LLaMA 3を本番環境に導入するには?

数日前にメタ社から発表されたLLaMA 3生成AIモデルは、すでに素晴らしい能力を示している。

このステップバイステップのガイドで、LLaMA 3を本番環境にインストールして展開する方法を学びましょう。ハードウェア要件からデプロイメント、スケーリングまで、スムーズな導入のために知っておくべきことをすべて網羅しています。

LLaMA 3

LLaMA入門 3

メタ社は、テキスト作成、プログラミング、チャットボットに活用できるオープンソースAIモデル「ラマ3」の初期バージョンを発表した。さらにメタ社は、LLaMA 3を主要なソーシャルメディア・アプリケーションに組み込む計画を発表した。この動きは、OpenAIのChatGPT、マイクロソフトのCopilot、グーグルのGeminiといった他のAIアシスタントに対抗することを目的としている。

Llama 2と同様に、Llama 3は、一流のAI企業が提供する、自由にアクセス可能なオープンウエイトの大規模言語モデルとして際立っている(ただし、従来の意味での「オープンソース」には該当しない)。

現在、ラマ3はメタ社のウェブサイトから2種類のパラメータサイズで無料でダウンロードできる:80億(8B)と700億(70B)。ユーザーはこれらのバージョンにアクセスするためにサインアップすることができる。Llama 3は、次のトークンを予測するための基本的なモデルであるpre-trainedと、ユーザーの命令に従うように微調整されたinstruction-tunedの2つのバージョンで提供されている。どちらのバージョンも、8,192トークンのコンテキスト制限がある。

ドワルケシュ・パテルとのインタビューで、メタ社のマーク・ザッカーバーグCEOは、2万4000GPUのクラスターを使って2つの特注モデルを訓練したと述べた。70Bのモデルは約15兆トークンのデータで訓練され、飽和や能力の限界に達することはなかった。その後、メタ社は他のモデルのトレーニングに集中することにした。Llama3は、MMLU、GPQA、HumanEval、MATHなどのベンチマークにおいて、GPT-4 Turbo、Claude 3 Opus、Gemini Ultraと同様の性能を発揮できると、Nvidiaのジム・ファンのような専門家は考えている。

メタ社によると、ラマ3は、MMLU(学部レベルの知識)、GSM-8K(小学生レベルの数学)、HumanEval(コーディング)、GPQA(大学院レベルの問題)、MATH(数学の単語問題)など、さまざまなベンチマークを使用して評価されている。これらのベンチマークは、8BモデルがGoogleのGemma 7BやMistral 7B Instructのようなオープンウェイトモデルを凌駕し、70BモデルがGemini Pro 1.5やClaude 3 Sonnetに対して競争力があることを示しています。

メタ社の報告によると、ラマ3モデルはラマ2同様、符号化を理解する能力を持つように改良され、初めて画像とテキストの両方を使用して学習された。しかし、現在の出力はテキストに限られている。

LLaMA 3ベンチマーク LLaMA 3ベンチマーク

LLaMA 3ハードウェア要件とAWS EC2上の適切なインスタンスの選択

多くの組織が本番ワークロードにAWSを使用しているため、AWS EC2にLLaMA 3をデプロイする方法を見てみよう。

LLMを実装する際には、VRAM(GPUメモリ)の消費、推論速度、スループット、ディスクスペースの使用率など、複数の障害があります。このシナリオでは、モデルの実行をサポートするのに十分なVRAM容量を持つGPUインスタンスをAWS EC2に割り当てなければなりません。

LLaMA 3 8Bは、FP16で約16GBのディスク容量と20GBのVRAM(GPUメモリー)を必要とする。もちろん、CPU上にLLaMA 3を展開することもできるが、実際の生産ユースケースにはレイテンシーが高すぎるだろう。LLaMA 3 70Bに関しては、FP16で約140GBのディスクスペースと160GBのVRAMが必要だ。

LLaMA 3 8B用に20GBのVRAMを入手するのはかなり簡単です。NVIDIA A10 GPUをプロビジョニングすることをお勧めする。このGPUには24GBのVRAMが搭載されており、Ampereプラットフォームベースの高速GPUだ。AWS EC2では、A10 GPUをプロビジョニングするためにG5インスタンスを選択する必要がある。g5.xlargeで十分です。

しかし、LLaMA 3 70Bモデルのデプロイはもっと難しい。どのGPUもこのモデルに十分なVRAMを持っていないので、マルチGPUインスタンスをプロビジョニングする必要があります。AWSでg5.48xlargeインスタンスをプロビジョニングすれば、192GBのVRAM(8 x A10 GPU)が手に入る。

このような構成では、以下のレイテンシ(応答時間)が予想される:LLaMA 3 8Bでは50トークンが1秒で生成され、LLaMA 3 70Bでは50トークンが5秒で生成される。

これらのモデルの運用コストを削減し、レイテンシを増加させるために、量子化技術を調査することができますが、そのような最適化はモデルの精度を損なう可能性があることに注意してください。量子化はこの記事の範囲外です。

このようなインスタンスをプロビジョニングするには、AWS EC2コンソールにログインし、新しいインスタンスを起動する。g5.xlargeまたはg5.48xlargeインスタンスで、NVIDIAディープラーニングAMIを選択する。十分なディスク容量のプロビジョニングも忘れずに。

AWS上のG5インスタンス上のディープラーニングAMI

vLLMによる生産推論

vLLMは、LLMの推論と展開を迅速かつ容易に行うために設計されたライブラリである。その効率性は、アテンション・キーと値メモリの最適な管理のためのページド・アテンション、バッチで入力されるクエリのリアルタイム処理、パーソナライズされたCUDAカーネルなど、様々な洗練された手法に起因する。

さらにvLLMは、(テンソル並列を使用した)分散計算、リアルタイムストリーミング、NVIDIAとAMDの両方のグラフィックスカードとの互換性を採用することで、高度な適応性を提供する。

具体的には、vLLMはLLaMA 3のデプロイに大いに役立ち、複数のコンパクトなNVIDIA A10 GPUを搭載したAWS EC2インスタンスを利用できるようになる。これは、NVIDIA A100やH100のような単一の大型GPUを使用するよりも有利です。さらに、vLLMは継続的なバッチ推論によってモデルの効率を大幅に向上させます。

vLLMのセットアップはとても簡単だ。最近作成したAWSインスタンスにSSH接続を確立し、pipを使ってvLLMをインストールしよう:

pip install vllm

vLLM を使って 8 x A10 GPU 上で分散推論を行う予定なので、Ray のインストールも必要です:

pip install ray

インストール中に互換性の問題が発生した場合は、ソースからvLLMをコンパイルするか、そのDockerイメージを使用する方が簡単かもしれない: vLLMのインストール手順をご覧ください。

推論サーバーの起動

それでは、Python推論スクリプトを作ってみよう:

from vllm import LLM

# Use LLaMA 3 8B on 1 GPU
llm = LLM("meta-llama/Meta-Llama-3-8B-Instruct")

# Use LLaMA 3 70B on 8 GPUs
# llm = LLM("meta-llama/Meta-Llama-3-70B-Instruct", tensor_parallel_size=8)

print(llm.generate("What are the most popular quantization techniques for LLMs?"))

上記のスクリプトを実行できます。このスクリプトを初めて実行する場合は、モデルがダウンロードされてGPUにロードされるまで待つ必要があります:

The most popular quantization techniques for Large Language Models (LLMs) are:
1. Integer Quantization
2. Floating-Point Quantization
3. Mixed-Precision Training
4. Knowledge Distillation

理解するのはとても簡単だ。所有するGPUの数に応じてtensor_parallel_sizeを調整するだけです。

我々は今、多数のリクエストを管理し、同時に推論を実行できる適切な推論サーバーを起動しようとしている。まず、サーバーを起動する:

LLaMA 3 8B用:

python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-8B-Instruct

LLaMA 3 70B用:

python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-70B-Instruct
--tensor-parallel-size 8

モデルがGPUにロードされるまで1分ほどかかるはずです。その後、2つ目のターミナルを起動して、いくつかのリクエストを開始することができます:

curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "meta-llama/Meta-Llama-3-8B-Instruct",
    "prompt": "What are the most popular quantization techniques for LLMs?"
}'

これで、継続的なバッチ処理のおかげで、多くの並列リクエストを処理できる、適切な本番用推論サーバーが完成した。しかし、リクエストの数が多すぎると、GPUに負荷がかかります。その場合は、複数のGPUインスタンスにモデルを複製し、リクエストの負荷分散を行う必要があります(しかし、これはこの記事の範囲外です)。

結論

ご覧のように、LLaMA 3を本番環境にデプロイする場合、vLLMのような推論サーバーのおかげで複雑なコードは必要ない。

しかし、適切なハードウェアを用意するのは難しい。第一に、これらのGPUは非常に高価であり、また現在の世界的なGPU不足のためです。AWSで初めてGPUサーバーをプロビジョニングしようとする場合、GPUサーバーを作成する権限がないかもしれません。その場合はサポートに連絡し、ユースケースを説明する必要があります。この記事ではAWS EC2を使用しましたが、もちろん他のベンダーも利用可能です(Azure、GCP、OVH、Scaleway...)。

LLaMA 3をご自身でデプロイすることに興味がない場合は、弊社のNLPクラウドAPIを利用することをお勧めします。このオプションは、LLaMA 3インフラストラクチャを自分で管理するよりも効率的で、費用対効果も高い可能性があります。 今すぐNLPクラウドでLLaMA 3をお試しください!

LLaMA 3やAI導入全般についてご質問があれば、遠慮なくお尋ねください!

Julien
NLPクラウドCTO