Qwen 3.8 27B: 4ビット量子化、vLLMテンソル並列、VRAM/コンテキスト分析
Qwen 3.8 27B: vLLMとテンソル並列によるデプロイガイド
Qwen 3.8 27Bは、270億パラメータ、64層、隠れ次元5120を持つ高密度トランスフォーマーモデルです。Grouped-Query Attention(GQA)を使用してKVキャッシュメモリを削減し、マルチGPU構成での長いコンテキストに適しています。この記事では、vLLMとテンソル並列を使用して4ビット量子化モデルをロードする方法、重みとKVキャッシュのVRAM要件を計算する方法、および2台のRTX 3090と2台のRTX 5090で達成可能な最大コンテキスト長を推定する方法を説明します。
vLLMでQwen 3.8 27Bをテンソル並列でロードする
vLLMはテンソル並列(TP)をサポートし、モデルを複数のGPUに分散します。TPサイズ2では、各GPUがモデルの重みの半分を保持し、各層の演算の半分を計算し、NCCLを介して同期します。以下のコマンドは、4ビット量子化モデル(例:AWQまたはGPTQ)とTP=2でOpenAI互換サーバーを起動します:
python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen3.8-27B --tensor-parallel-size 2 --gpu-memory-utilization 0.90 --kv-cache-dtype fp8
--gpu-memory-utilizationフラグは、重み、KVキャッシュ、CUDAコンテキストに使用されるVRAMの割合を制御します。通信オーバーヘッドを最小限に抑えるため、モデルが収まる最小のTPサイズを常に選択してください。モデルが単一GPUに収まる場合は、TPを避け、スループットを高めるために別々のインスタンスを実行します。
VRAM使用量:モデルの重みとKVキャッシュ
VRAMは主に2つのコンポーネントで消費されます:モデルの重みとKVキャッシュです。4ビット量子化モデルの場合、各パラメータは約0.5バイト(スケールとゼロの小さなオーバーヘッドを含む)を占有します。重みのフットプリントは次のように計算されます:
| コンポーネント | 値 |
|---|---|
| パラメータ | 270億 |
| パラメータあたりのバイト数(4ビット) | 0.5 |
| 重みVRAM(生) | 13.5 GB |
| CUDAコンテキストとバッファ | 1-2 GB |
| 重みの総フットプリント | ~15 GB |
KVキャッシュのサイズは、コンテキスト長、精度、モデルアーキテクチャによって異なります。GQAを使用するQwen 3.8 27Bの場合、式は次のとおりです:2 * num_layers * num_kv_heads * head_dim * seq_len * bytes_per_element。64層、8 KVヘッド、head_dim 128で、32kコンテキストのKVキャッシュを計算できます。
| 精度 | バイト/要素 | KVキャッシュサイズ |
|---|---|---|
| BF16 | 2 | ~6.8 GB |
| FP8 | 1 | ~3.4 GB |
2x RTX 3090と2x RTX 5090での最大コンテキスト計算
2台のRTX 3090(各24 GB)で合計48 GB、2台のRTX 5090(各32 GB)で合計64 GBのVRAMを想定し、重みのフットプリント(~15 GB)とCUDAオーバーヘッドを差し引いて、KVキャッシュに利用可能なVRAMを求めます。最大コンテキストは、利用可能なVRAMをトークンあたりのKVキャッシュサイズで割って推定します。
| ハードウェア | 総VRAM | 重み | KVに利用可能 | 最大コンテキスト(FP8) |
|---|---|---|---|---|
| 2x RTX 3090 | 48 GB | 15 GB | 33 GB | ~300kトークン |
| 2x RTX 5090 | 64 GB | 15 GB | 49 GB | ~460kトークン |
BF16 KVキャッシュの場合、最大コンテキストはFP8の約半分、つまり2x 3090で~150kトークン、2x 5090で~230kトークンになります。これらの数値はバッチサイズ1と他のメモリオーバーヘッドがないことを前提としています。実際には、vLLMはCUDAグラフとスケジューリングのためにメモリを予約するため、実際のコンテキストはわずかに低くなる可能性があります。
KVキャッシュのFP8 vs BF16とFP8ストレージタイプ
BF16は高精度ですが、FP8の2倍のメモリを消費します。推論では、FP8がKVキャッシュ容量を2倍にし、精度損失が無視できるため、好ましい選択です。FP8にはE4M3とE5M2の2つのストレージ形式があります。E4M3は範囲と精度のバランスが良く、KVキャッシュと重みに推奨されます。E5M2は精度が低く、通常はトレーニングの勾配に使用されます。vLLMでは、--kv-cache-dtype fp8でFP8 KVキャッシュを有効にできます。
| 形式 | 指数ビット | 仮数ビット | 用途 |
|---|---|---|---|
| E4M3 | 4 | 3 | KVキャッシュと重み(推奨) |
| E5M2 | 5 | 2 | トレーニングの勾配(推論では避ける) |
結論として、4ビット量子化のQwen 3.8 27BはデュアルGPUシステムで効率的にデプロイできます。FP8 KVキャッシュを使用すると、コンテキスト長とスループットが最大化されます。2x RTX 3090では~300kトークンのコンテキストを処理でき、2x RTX 5090では~460kトークンを提供し、両方の構成が長文ドキュメント処理と高並行サービングに最適です。
一緒に取り組みましょう
さらに詳しい情報やプロジェクトのヘルプ、またはアイデアの構築が必要ですか?
簡単な質問でもフルプロジェクトでも、お気軽にどうぞ。お問い合わせいただき、あなたのアイデアを一緒に実現しましょう。
お問い合わせ →