LLaMA2、Mistral、MixtralをAWS EC2にvLLMでデプロイする

2023年、多くの先進的なオープンソースのLLMがリリースされたが、これらのAIモデルを本番環境にデプロイすることは、依然として技術的な課題である。この記事では、AWS EC2上で最高のLLMのいくつかをデプロイする方法を紹介する:LLaMA 3 70B、Mistral 7B、Mixtral 8x7Bだ。スループットを最大化するために、バッチ推論をサポートする高度な推論エンジンvLLMを使用する。

ブイエルエルエム

LLaMA 3、Mistral、Mixtral

Meta社は、大規模言語モデル(LLM)のLLaMA 3シリーズを開発し、販売を開始した。LLMには、事前にトレーニングされ、微調整された様々な生成テキストモデルが含まれている。これらのモデルのサイズは様々で、パラメータは70億から700億の間です。

ミストラルAIは、グーグルのディープマインドとメタで経験を積んだ人物が共同設立した新興企業で、ミストラル7B、そしてミストラル8x7BでLLMの世界に大きく参入した。

ミストラル7Bが特に印象的なのは、そのパフォーマンスだ。様々なテストにおいて、Llama2-13Bを凌駕し、多くのメトリクスにおいてLlama1-34Bを上回った。このことは、Mistral 7Bが同等かそれ以上の機能を、大幅に低い計算オーバーヘッドで提供していることを示唆している。コーディングタスクに関しては、Mistral 7BはCodeLlama 7Bと競合し、13.4GBというコンパクトなサイズにより標準的なマシンでの実行が可能です。

Mixtral 8x7Bは、様々な用途に適した適応性の高い高速モデルです。6倍の速度で動作し、すべてのテスト指標においてLLaMA 3 70Bの性能を満たすか上回る。このモデルは、複数の言語をサポートし、固有のコーディング機能を備えている。最大32kトークンまでのシーケンスを管理できます。

これらのモデルは全てオープンソースであり、適切なハードウェアにアクセスすることができれば、自分のサーバーにデプロイすることができる。それでは、vLLMを使ってAWS EC2にこれらのモデルをデプロイする方法を見てみよう。

vLLMによるバッチ推論とマルチGPU

vLLMは、効率的なLLM推論と展開のために調整された、迅速で使いやすいライブラリです。vLLMの性能は、効果的なアテンション・キーと値のメモリ管理のためのページド・アテンション、リアルタイムで入力されるクエリのバッチ処理、カスタマイズされたCUDAカーネルなど、いくつかの高度なテクニックに由来する。

さらにvLLMは、(テンソル並列による)分散推論、出力ストリーミング、NVIDIAとAMDの両方のGPUアーキテクチャへの対応など、優れた柔軟性を提供している。

特に、vLLMは、LLaMA 3、Mistral、Mixtralのデプロイに非常に役立ちます。なぜなら、vLLMは、(NVIDIA A100やH100のような)1つの大きなGPUではなく、(NVIDIA A10のような)複数の小さなGPUを組み込んだAWS EC2インスタンス上にモデルをデプロイすることを可能にするからです。また、vLLMは、バッチ推論のおかげで、モデルのスループットを劇的に向上させることができます。

AWS EC2に適切なハードウェアをプロビジョニングする

LLMの導入は、さまざまな理由から難しい:VRAM(GPUメモリ)の使用量、推論速度、スループット、ディスクスペースの使用量...。ここでは、我々のモデルを実行するのに十分なVRAMを持つAWS EC2上のGPUインスタンスをプロビジョニングすることを確認する必要がある。

G5インスタンスは、最新のNVIDIA A10 GPUにアクセスでき、192GBのVRAMまで拡張可能(g5.48xlargeインスタンスを参照)でありながら、費用対効果が非常に高いため、良い選択です。

Mistral 7Bは約14GBのVRAMを必要とするため、最も導入しやすいモデルだ。次に110GBのMixtral 8x7B、そして140GBのLLaMA 3 70Bとなる。ここでは、fp32ではなくfp16のみを考慮し、量子化も適用していない。

その結果、Mistral 7Bはg5.xlargeインスタンスで動作させることができますが、Mixtral 8x7BとLLaMA 3 70Bはg5.48xlargeインスタンスを必要とするので、このチュートリアルではg5.48xlargeインスタンスをプロビジョニングします。

このようなインスタンスをプロビジョニングするには、AWSのEC2コンソールにログインし、新しいインスタンスを起動する:g5.48xlargeインスタンスで、NVIDIAディープラーニングAMIを選択する。少なくとも300GBのディスク容量が必要です。

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

分散推論用vLLMのインストール

vLLMのインストールは非常に簡単だ。新しく作成したAWSインスタンスにSSH接続を開き、vLLMをpipでインストールしよう:

pip install vllm

vLLM を 8 x A10 GPU の分散推論に使用するので、Ray もインストールする必要がある:

pip install ray

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

推論スクリプトの作成

これで最初の推論スクリプトを作成できます。次のようなPythonファイルを作成する:

from vllm import LLM

# Replace the model name with the one you want to use:
# Mixtral simple: mistralai/Mixtral-8x7B-v0.1
# Mixtral instruct: mistralai/Mixtral-8x7B-Instruct-v0.1
# Mistral 7B simple: mistralai/Mistral-7B-v0.1
# Mistral 7B instruct: mistralai/Mistral-7B-Instruct-v0.1
# LLaMA 3 70B: meta-llama/Llama-2-70b-hf
llm = LLM("mistralai/Mixtral-8x7B-Instruct-v0.1", tensor_parallel_size=8)

print(llm.generate("What is batch inference?"))

では、Pythonでスクリプトを実行してみよう:

Batch inference is the process of applying machine learning models to a batch of data inputs all at once, rather than processing each input individually in real-time. In batch inference, a large set of inputs is collected and then processed together as a group, or "batch," by the machine learning model.

Batch inference is often used in scenarios where real-time predictions are not required, and where there is a large volume of data that needs to be processed. It can be more efficient and cost-effective than real-time inference, as it allows for the efficient use of computing resources and can reduce the latency associated with processing individual inputs.

Batch inference is commonly used in applications such as image recognition, natural language processing, and predictive analytics. For example, a company might use batch inference to analyze customer data and generate insights about purchasing patterns, or to analyze sensor data from industrial equipment to identify potential maintenance issues.

In summary, batch inference is the process of applying machine learning models to a batch of data inputs all at once, as an alternative to real-time inference. It is commonly used in scenarios where real-time predictions are not required and where there is a large volume of data that needs to be processed efficiently.

見ての通り、これは簡単なことだ。GPUの数に応じて、tensor_parallel_sizeを調整する必要があります。

上記は単発のシナリオである。今度は、複数のリクエストを処理し、その場でバッチ推論を実行できる適切な推論サーバーを立ち上げたい。まず、サーバーを起動する:

python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mixtral-8x7B-Instruct-v0.1
--tensor-parallel-size 8

しばらくして、モデルがVRAMに正しくロードされたら、2つ目のシェルウィンドウを開き、いくつかの要求を出すことができる:

curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "mistralai/Mixtral-8x7B-Instruct-v0.1",
    "prompt": "What is batch inference?"
}'

これは前と同じ結果を返すが、今回は複数のリクエストを同時に実行できる。

結論

vLLMのような高度な推論サーバーを活用することは、GPUの利用率を最大化し、モデルを複数のGPUに簡単に並列展開したい場合に有益です。

ご覧のように、このテクニックのおかげで、LLaMA 3、Mistral、Mixtralのような最も先進的なオープンソースのAIモデルを自分のサーバーに導入するのは非常に簡単です。

このチュートリアルではAWS EC2を使用したが、もちろん他のベンダーを使用することもできた。主な課題は、GPUのコストとその入手可能性です。

このようなLLMを自分でデプロイしたくない場合は、代わりに弊社のNLPクラウドAPIを使用することをお勧めします。多くの時間を節約でき、自分でLLMをデプロイするよりも安いかもしれません。 まだの方は、お気軽にお試しください!

Vincent
NLPクラウドのデベロッパー・アドボケイト