INT4 量子化を使って Llama 4 Scout を NVIDIA H100 1 枚で動かす

2025年4月10日

プレスリリース によると、Llama 4 Scout は INT4 量子化をすることでNVIDIA H100 1 枚に載り、最大 1000 万トークンまで入力できるとされています。一方で、前回の記事で紹介した通り、vLLM では H100 1 枚に載せきることはできず、 1000 万トークンを入力することもできませんでした。そこで、今回は公式に提供されているスクリプトを使用して、これらを実現できるかについて調べます。

環境構築

公式の手順に従って環境構築をします。まずは llama-stack ライブラリをインストールします。

uv venv -p 3.11
. .venv/bin/activate
uv pip install llama-stack

次に、モデルをダウンロードします。今回は HuggingFace を経由するのではなく、 https://llama.meta.com/llama-downloads/ から直接ダウンロードします。必要な情報を入力すると、ダウンロードリンクがメールで送られてきます。

ダウンロード先は ~/.llama 以下になるので、空き容量に注意してシンボリックリンクを張るなどして対応してください。

ダウンロードのコマンドは次のようになります。

llama download --source meta --model-id Llama-4-Scout-17B-16E-Instruct --meta-url <ダウンロードリンク>

次に、モデルを実行するための llama-models ライブラリをインストールします。

git clone git@github.com:meta-llama/llama-models.git
cd llama-models
pip install .[torch]

FP16 精度でモデルを実行するためには、README に記載されている次のスクリプトを実行します。

#!/bin/bash

NGPUS=4
CHECKPOINT_DIR=~/.llama/checkpoints/Llama-4-Scout-17B-16E-Instruct
PYTHONPATH=$(git rev-parse --show-toplevel) \
  torchrun --nproc_per_node=$NGPUS \
  -m models.llama4.scripts.chat_completion $CHECKPOINT_DIR \
  --world_size $NGPUS

FP8 量子化も同様に README のスクリプトで実行可能です。H100 GPU が 2 枚ある環境で動きます。

MODE=fp8_mixed  # or int4_mixed
if [ $MODE == "fp8_mixed" ]; then
  NGPUS=2
else
  NGPUS=1
fi
CHECKPOINT_DIR=~/.llama/checkpoints/Llama-4-Scout-17B-16E-Instruct
PYTHONPATH=$(git rev-parse --show-toplevel) \
  torchrun --nproc_per_node=$NGPUS \
  -m models.llama4.scripts.chat_completion $CHECKPOINT_DIR \
  --world_size $NGPUS \
  --quantization-mode $MODE

一方で、 INT4 量子化は上記のスクリプトそのまま( MODE 変数を修正するだけ)ではエラーになってしまいましたが、 https://github.com/meta-llama/llama-models/pull/316 のパッチによって動くようになることを確認しました。

動作すると、下記のようにテキストが生成される様子が確認できます。

検証

実装を見ると分かる通り、デフォルトのコンテキスト長は 4096 と設定されています。次のスクリプトのように --max-seq-len を引数に追加することによって、コンテキスト長を大きくしたときの挙動を調査します。

# 利用する GPU を指定する
export CUDA_VISIBLE_DEVICES=0
NGPUS=1

# コンテキスト長を指定する
SEQ_LEN=10000

# 同じマシンの別の GPU でも実行する場合は torchrun のポートを個別に指定する
MASTER_PORT=29004

# INT4 量子化で推論を実行する
MODE=int4_mixed
CHECKPOINT_DIR=~/.llama/checkpoints/Llama-4-Scout-17B-16E-Instruct
PYTHONPATH=$(git rev-parse --show-toplevel) \
  torchrun --nproc_per_node=$NGPUS --master-port $MASTER_PORT \
  -m models.llama4.scripts.chat_completion $CHECKPOINT_DIR \
  --world_size $NGPUS \
  --quantization-mode $MODE \
  --max-seq-len $SEQ_LEN

GPU 数が 1,2,4,8 枚のときにコンテキスト長を二分探索した結果を次の表に示します。

H100 GPU の枚数動作した最大コンテキスト長動作しない最小コンテキスト長
135,00040,000
2400,000600,000
41,000,0001,200,000
82,500,0003,000,000

H100 を 1 枚使ったときの最大コンテキスト長は 3.5 万トークンに限られており、H100 を 8 枚使っても 250 万トークンが最大となっていました。vLLM を利用した FP8 量子化推論に比べると、より少ないメモリで動作し、より長いコンテキスト長を実現できましたが、プレスリリースにある 1000 万トークンの入力は実現できませんでした。なお、コンテキスト長がメモリ容量に比例すると仮定すると、1000 万トークンの入力を今回の方法で実現するためには 32 枚以上の H100 が必要になると考えられます。

まとめ

今回は、Llama 4 のプレスリリースのうち「1 枚の H100 GPU に載せることができる」という部分が正しいことを公式の手順に従って確認しました。「1000 万トークンの入力ができる」という部分は検証できませんでしたが、実現させる場合のGPU 数の見積もりを行いました。

今後は実装の確認やプロファイルを通して、効率的なデプロイに適したオプションについて調査していきます。

About Author

kota.iizuka

Leave a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Recent Comments

Social Media