Llama 3.1 405B を Novita AI でデプロイする方法

Llama 3.1 405B を Novita AI でデプロイする方法

はじめに

Llama3.1 のリリースは瞬く間に世界中の注目を集め、オープンソースモデルが初めてクローズドモデルに迫り、一部の指標ではそれを上回ったことを示しました。本記事では、Novita AI の GPU インスタンスを用いて Llama3.1-405B モデルをゼロからデプロイする方法と手順を紹介します。特に、大規模モデルをゼロからデプロイすることは時間と労力を要する作業です。このような面倒な作業を避け、直接 Llama3.1-405B モデルを利用したい場合は、業界で優れたモデルホスティングプラットフォームを探し、OpenAI API 形式で推論サービスを呼び出すことをお勧めします。使いやすいだけでなく、コスト面でも非常に優れており、総コストは非常に低く抑えられます。現在、Novita AI は Llama3.1 の API サービスを提供しており、Playground で直接体験できます:https://novita.ai/model-api/llm-api/playground

Llama3.1-405B デプロイの基本要件

Meta がオープンソース化した Llama3.1 シリーズのモデルは、8B、70B、405B の 3 サイズがあります。その中でも 405B モデルは、これまでで最大のオープンソース大規模言語モデルであり、パラメータ規模は 405 億です。複数の評価結果において、同モデルの性能は GPT-4 および GPT-4o モデルを上回り、Claude3.5-Sonnet に匹敵します。このような大規模なモデルを GPU にロードするのは困難です。オリジナルの FP16 版 405B モデルには 810GB の GPU メモリが必要です(下図参照)。しかし、現在市販されている最高スペックの GPU H100 でも、最大 8 枚構成のサーバーではこのバージョンのモデルを直接ロードできません。FP16 版モデルをより低精度の表現に量子化し、メモリ要件を削減して GPU にロード可能にする必要があります。

Llama3.1 シリーズのモデルアーキテクチャは Llama3 から継承されており、構造は非常に似ているため、推論フレームワークにとって非常に好都合です。vLLM のようなオープンソースの推論ソリューションは迅速に適応を完了し、Llama3.1-405B などの大規模モデルの推論をサポートできます。まとめると、Llama3.1-405B 推論サービスのデプロイを完了するには、以下の 3 つの側面から準備する必要があります。

  • ハードウェア: 8 基の H100 GPU を搭載した GPU サーバーインスタンスを選択し、約 1.5TB のストレージ容量を確保することを推奨します。Novita AI コンソールからインスタンスを選択し、ネットワークボリュームをマウントしてストレージ容量を提供できます。

  • モデル: Huggingface アカウントを準備し、オリジナルの Llama3.1-405B モデルをダウンロードするか、FP8 または INT4 版のモデルをダウンロードします。
  • 推論フレームワーク: 最新版の vLLM v0.5.3.post1 をダウンロードします。

モデルの準備

8 枚の H100 カードを搭載した GPU サーバーを準備したら、サーバーにログインしてモデルのダウンロードを開始します。ここでは、FP16 版モデルをダウンロードし、手動で FP8 および INT4 量子化バージョンに変換する方法を紹介します(もちろん、huggingface プラットフォームで直接量子化モデルをダウンロードすることもできます)。Huggingface プラットフォームから Instruct 版をダウンロードすることをお勧めします。まず、Huggingface プラットフォームに登録およびログインし、設定ページで現在のユーザーの Access Token を作成して保存します。これはモデルのダウンロード時に使用します。Llama3.1-405B モデルのホームページ(https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct)を開き、Meta にモデル申請を送信し、約 30 分間の承認を待ちます。GPU サーバーに戻り、huggingface クライアントプログラムをインストールし、以下のコマンドでモデルのダウンロードを開始します。

pip install huggingface-hub
huggingface-cli login  ## Access Token を入力
huggingface-cli download meta-llama/Meta-Llama-3.1-405B-Instruct  ## 405B 大規模モデルのダウンロードを開始

長時間の待機の後(現在のネットワーク速度に依存)、800GB の 405B 大規模モデルがローカルに正常にダウンロードされ、huggingface-cli scan-cache を呼び出すことで具体的なモデル情報を確認できます。次に、オリジナルモデルに対して FP8 および INT4 量子化を実行します。まず、FP8 量子化ツールをダウンロードします。オープンソースの AutoFP8(https://github.com/neuralmagic/AutoFP8)を直接使用でき、その中のスクリプトを使用して手動で量子化します。量子化モードは dynamic です。以下の通りです。

git clone https://github.com/neuralmagic/AutoFP8.git
cd AutoFP8
pip install -e .  ## AutoFP8 ツールをローカルにコンパイルしてインストール
python3 examples/quantize.py --model-id meta-llama/Meta-Llama-3.1-405B-Instruct --save-dir Meta-Llama-3-8B-Instruct-fp8 --activation-scheme dynamic --max-seq-len 2048 --num-samples 2048

量子化スクリプトでは、--save-dir で量子化モデルの出力パスを指定します。重みのみの量子化であるため、全体の速度は非常に速いです。Meta が量子化した FP8 版を直接ダウンロードすることもできます:https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct-FP8。ダウンロードコマンドは以下の通りです。

huggingface-cli download meta-llama/Meta-Llama-3.1-405B-Instruct-FP8

FP8 量子化と同様に、INT4 版量子化にはオープンソースの AutoAWQ を使用できます。この量子化ソリューションのアドレスは、https://github.com/casper-hansen/AutoAWQ です。量子化方法は以下の通りです。

git clone https://github.com/casper-hansen/AutoAWQ.git
cd AutoAWQ
pip install -e .   ## AutoAWQ ツールをローカルにコンパイルしてインストール
## examples/quantize.py を手動で修正
    model_path = 'meta-llama/Meta-Llama-3.1-405B-Instruct'
    quant_path = 'meta-llama/Meta-Llama-3.1-405B-Instruct-awq'
    
# 量子化を開始
python examples/quantize.py

推論フレームワークの構築

オープンソースコミュニティの強力なサポートにより、vLLM は産業グレードの高効率推論フレームワークとして認識されており、大規模モデルへのサポートが非常に豊富で、アップデートも非常に迅速です。v0.5.3.post1 から、vLLM は Llama3.1 シリーズモデルの推論サービスをサポートしています。vLLM のソースコードをダウンロードしてコンパイルする方法は以下の通りです。

git clone https://github.com/vllm-project/vllm
cd vllm
git checkout -b v0.5.3.post1 v0.5.3.post1
pip install -e .

コンパイルが成功したら、推論サービスを開始できます。vLLM をローカルでコンパイルするだけでなく、Docker イメージにコンパイルすることもできます。以下の通りです。

git clone https://github.com/vllm-project/vllm
cd vllm
git checkout -b v0.5.3.post1 v0.5.3.post1
docker build -t vllm_0.5.3.p1 .

公式の vLLM イメージを直接ダウンロードすることもできます。

docker pull vllm/vllm-openai:v0.5.3.post1

推論サービスの実行

vLLM 推論フレームワークの構築が完了したら、vLLM を起動し、Llama3.1-405B モデルをロードして推論サービスを開始できます。ローカルでコンパイルした vLLM 推論フレームワークの場合は、vLLM ソースコードのルートディレクトリに移動し、以下のコマンドを実行して推論サービスを開始します。

cd vllm
python3 -m vllm.entrypoints.openai.api_server --port 18001 --model meta-llama/Meta-Llama-3.1-405B-Instruct-FP8 --tensor-parallel-size 8 --pipeline-parallel-size 1 --swap-space 16 --gpu-memory-utilization 0.99 --dtype auto --served-model-name llama31-405b-fp8 --max-num-seqs 32 --max-model-len 32768 --max-num-batched-tokens 32768 --max-seq-len-to-capture 32768

Docker コンテナで推論サービスを実行する場合は、以下のコマンドを参考にしてください。

docker run -d --gpus all --privileged --ipc=host --net=host vllm/vllm-openai:v0.5.3.post1 --port 18001 --model meta-llama/Meta-Llama-3.1-405B-Instruct-FP8 --tensor-parallel-size 8 --pipeline-parallel-size 1 --swap-space 16 --gpu-memory-utilization 0.99 --dtype auto --served-model-name llama31-405b-fp8 --max-num-seqs 32 --max-model-len 32768 --max-num-batched-tokens 32768 --max-seq-len-to-capture 32768

vLLM 推論フレームワークが正常に起動すると、指定したポートでリッスンを開始します。

Novita AI は、AI の野心を実現するためのオールインワンクラウドプラットフォームです。統合 API、サーバーレス、GPU インスタンスなど、費用対効果に優れたツールを提供します。インフラストラクチャの管理を排除し、無料で始めて、AI のビジョンを現実のものにしましょう。

おすすめの記事:

  1. Docker から Kubernetes へ
  2. Kubernetes スケジューリングの謎を解く:Predicates と Priorities の深掘り