LLaMA 3.1 405bは、Meta AI社によって開発された大規模言語モデルで、4,050億のパラメータを持つ、パラメータサイズの点で公開されているAIモデルとしては最大級のものです。これはLlama 3.1ファミリーの一部であり、異なるサイズ(8B、70B、405Bパラメータ)のモデルを含んでいます。
405Bバージョンは特にその規模が注目され、様々なベンチマークにおいてGPT-4のようなトップクラスのクローズドソースモデルの性能に匹敵、あるいはそれを上回ることを目標としており、言語理解や生成、その他のタスクにおける最先端の能力を示している。Llama 3.1モデルは、多言語サポートが強化され、多言語のテキストを理解・生成できるように設計されており、さまざまな地域やユーザーベースに適用できるようになりました。
この記事では、Google Cloud Platform (GCP) Compute EngineにLLaMA 3.1 405Bをインストールして本番環境にデプロイする方法を紹介する。最初にハードウェア要件について説明し、次にGCP上でのインスタンス・プロビジョニング、そしてvLLMによるデプロイと量子化について説明します。
Llama 3.1 405Bを実行するためのハードウェア要件は、そのサイズと複雑さのためにかなり広範囲に及ぶ。LLMをデプロイする際、最も複雑なのはGPUです。このモデルを展開するには、多くのVRAM(つまりGPUメモリ)が必要になります:
このようなニーズを考えると、一般的には次のようなセットアップを検討することになる:
いつものように、量子化には注意し、モデルの品質があまり低下しないようにしなければならない。私たちのテストでは、fp8の量子化はモデルの質を損なわないようなので、この記事ではこれを使うことにする。
Google Cloud Platform (GCP)は、AIワークロードのデプロイとスケーリングにとって興味深いプロバイダーだ。比較的安価で、GPUも充実している(NVIDIA H100 80GB、NVIDIA A100 80GB、NVIDIA V100、NVIDIA L4、NVIDIA T4...)。
また、インスタンスの選択に関しても非常に柔軟です。例えば、1つまたは複数のH100 GPUでインスタンスをプロビジョニングできます:1xH100、2xH100、4xH100、または8xH100です。
アカウントが新しい場合、GPUインスタンスのプロビジョニングが許可されない可能性があります。
最初のステップとして、GCP上に新しいプロジェクトを作成する。次に、プロジェクトのCompute Engine APIを有効にします。これを行うには、GCP ConsoleのAPI Libraryに行き、"Compute Engine "を検索します。それをクリックし、APIを有効にするために "Enable "をクリックします。
APIを有効にすると、新しいインスタンスを作成できるようになる。GCP Consoleの "VM instances "セクションに行き、"Create instance "をクリックすることで行うことができる。
その後、マシンタイプを選択するよう求められます。fp8モードのLLaMA 3.1 405Bの場合、8xH100 GPUを搭載したa3-highgpu-1gマシンを選択します。
LLaMA 3.1用GCPインスタンス 405B
その後、ネットワークやストレージなど、VMの詳細を設定する必要がある。この記事ではこれらの設定を全て確認するつもりはないが、イメージの種類とストレージに焦点を当てることにする。
LLaMA 3.1 405Bモデルの重みをfp8形式でダウンロードするには、少なくとも500GBのディスク容量が必要です。また、CUDA 12がすでにインストールされたLinux Deep Learningイメージを使用することをお勧めします。OSとストレージ」のセクションでそれを実現できます:
LLaMA 3.1のGCPイメージとディスク容量 405B
vLLMはVirtual Large Language Modelの略で、AI分野、特に大規模言語モデル(LLM)を推論にどのように提供し、活用するかという点で、大きな進歩を意味する。
vLLMは、高スループットと低レイテンシの推論のために設計されており、迅速かつ効率的な言語処理が重要なアプリケーションに最適です。これは、アテンション・キーとバリュー・メモリをより効率的に管理することでメモリ使用量を最適化するPagedAttentionのような革新的な技術によって実現され、HuggingFace Transformersのような従来の手法と比較して最大24倍のスループットを可能にします。
vLLMの効率性の中核は、そのメモリ管理にあります。PagedAttentionを使用することで、vLLMはキー・バリュー(KV)キャッシュをブロックに分割し、より良いメモリ利用を可能にし、LLMのGPUメモリ使用における一般的なボトルネックである断片化を低減します。このアプローチは、処理を高速化するだけでなく、パフォーマンスを大幅に低下させることなく、より多くのリクエストを同時に処理することを可能にします。
推論およびサービングエンジンであるvLLMは、単にLLMを実行するだけでなく、リソースの利用率を最大化するような方法でLLMを実行することに重点を置いている。着信リクエストの連続バッチ処理などのテクニックを採用し、GPUをフルに活用することで、アイドル時間を減らし、全体的な効率を高めている。
vLLMは様々な量子化技術(GPTQ、AWQ、INT4、INT8、FP8など)をサポートしており、モデル重みの精度を下げることで、メモリ使用量を減らし、推論を高速化できる可能性がある。
vLLMのインストールは比較的簡単だ。GCP VMインスタンスに接続し、pipを使ってvLLMをインストールしよう:
pip install vllm
H100GPU8台で分散推論を行うので、Rayもインストールする必要がある:
pip install ray
vLLMのインストール中に互換性の問題が発生した場合は、ソースからvLLMをコンパイルするか、そのDockerイメージを使用する方が簡単かもしれません: vLLMのインストール手順をご覧ください。
我々のモデルをテストするために、基本的なPythonの例から始めよう:
from vllm import LLM
# Load LLaMA 3.1 405B on 8 GPUs
llm = LLM("neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic", tensor_parallel_size=8)
print(llm.generate("What is the difference between fp8 quantization and int8 quantization?"))
Pythonスクリプトを実行できます。初めて実行する場合は、モデルがダウンロードされてGPUにロードされるのを待つ必要があります:
FP8 (Floating-Point 8) and INT8 (Integer 8) are both quantization techniques used to reduce the precision of numerical values in deep learning models, but they differ in their representation and behavior.
**INT8 Quantization**
INT8 quantization represents numbers as 8-bit integers, which can take on values between -128 and 127 (or 0 and 255 for unsigned integers). This means that the precision of the numbers is limited to 8 bits, and any values outside this range are clipped or saturated.
INT8 quantization is a simple and widely used technique, especially for integer-based architectures like ARM and x86. Most deep learning frameworks, including TensorFlow and PyTorch, support INT8 quantization.
**FP8 Quantization**
FP8 quantization, on the other hand, represents numbers as 8-bit floating-point numbers, with 1 sign bit, 2 exponent bits, and 5 mantissa bits. This allows for a much larger dynamic range than INT8, with values that can be as small as 2^-14 or as large as 2^15.
FP8 quantization is a more recent development, and its main advantage is that it can provide better accuracy than INT8 quantization, especially for models that require a large dynamic range, such as those with batch normalization or depthwise separable convolutions. FP8 is also more suitable for models that are sensitive to quantization noise, like those with recurrent neural networks (RNNs) or long short-term memory (LSTM) networks.
**Key differences**
Here are the key differences between FP8 and INT8 quantization:
1. **Dynamic range**: FP8 has a much larger dynamic range than INT8, which means it can represent a wider range of values.
2. **Precision**: FP8 has a lower precision than INT8, with 5 mantissa bits compared to 8 bits for INT8.
3. **Behavior**: FP8 is more suitable for models that require a large dynamic range, while INT8 is better suited for models with smaller weights and activations.
4. **Hardware support**: INT8 is widely supported by most hardware platforms, while FP8 is still an emerging standard, with limited hardware support.
In summary, FP8 quantization offers better accuracy and a larger dynamic range than INT8 quantization, but it requires more sophisticated hardware support and may not be suitable for all models or applications.
LLaMA 3.1 405BモデルはすでにNeural Magicによってfp8 for vLLMで量子化されているので、再度量子化を行う必要はない。量子化されたモデルをHuggingFace Hubからロードするだけです。
tensor_parallel_sizeパラメータは、我々のマシンにあるGPUの数に応じて設定される。
しかし、この単純なPythonスクリプトは、適切なプロダクションサーバーではない。多くのリクエストを並列処理し、スループットを最大化するために、推論サーバーを起動する:
python -m vllm.entrypoints.openai.api_server \
--model neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic \
--tensor-parallel-size 8
モデルがロードされたら、2つ目のターミナルを立ち上げて、いくつかのリクエストをすることができる:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic",
"prompt": "Who are you?"
}'
I'm an artificial intelligence model known as Llama. Llama stands for "Large Language Model Meta AI."
LLaMA 3.1 405Bは最先端のジェネレーティブAIモデルだが、本番への導入は容易ではない。
最大の課題は、適切なハードウェアを見つけることだ。GPUは非常に高価で、世界的に不足している。しかし、一度適切なGPUを用意することができれば、vLLMのような推論サーバーでモデルを展開するのは非常に簡単です。
このような大きなモデルの場合、私たちが行ったように、量子化を活用してVRAM使用量を減らし、レイテンシを改善したいと思うかもしれません。しかし、量子化はモデルの精度を低下させる可能性があるため、必ずしも特効薬になるとは限りません。
LLaMA 3.1 405Bを自分でデプロイできない、またはデプロイしたくない場合、NLPクラウド上で簡単に使用でき、本番でこの素晴らしいモデルをスケールアップして活用することができます。 今すぐNLPクラウドでLLaMA 3.1 405Bをお試しください!
LLaMA 3.1 405BやAI全般についてご質問があれば、遠慮なくお尋ねください!
Julien
NLPクラウドCTO