TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

vLLM機能マップ:何があり、いつメリットがあり、バージョンごとに何が変わったか

状態:ドラフト(2026-10-27)、一部実測。 機能リストとオプションは、vLLM 0.32.0の公式ドキュメント(リポジトリ docs/)と、0.8.0から0.32.0までのリリースノートを2026-10-27に直接開いて確認しました。実測は0.31.0(2026-10-05リリース)の公式コンテナで行いました。0.32.0のイメージは新たにダウンロードする必要があったため使用せず、両バージョンのドキュメントで異なる点は記事ごとに記載しました。 2026-10-27追加。 承認を得てvLLM 0.32.0イメージとQwen3-0.6B・Qwen3-0.6B-GPTQ-Int8・Qwen3-4B-AWQ・Qwen3-VL-2B-Instructを取得し、再測定しました。3-1節に両バージョンの比較を、各項に「2026-10-27再測定」節を追加しました。0.31.0の数値は削除していません。 作成規則:実測データを基本とし、測定できなかったものは「未測定」、確認できなかったものは「未確認」と表示します。

目次

1. このシリーズが扱う内容

vLLMは言語モデルをサービングするエンジンです。PagedAttention(Kwon他、SOSP 2023)から始まりましたが、現在はスケジューラー、キャッシュ、デコーディング加速、出力強制、量子化、複数GPU、運用ツールまで非常に多くの機能を備えています。このサイトには、すでにvLLMを扱った記事が多数あります。

このシリーズは、それらの記事が扱っていない機能を補完することに注力します。重複する機能は簡潔にまとめ、過去の記事へとつなげます。

編 扱う機能 実測
1 機能マップ、バージョン別の変更 要約
2 連続バッチング、chunked prefill、プレフィックスキャッシュ、cache_salt 繰り返し測定、機能をオフにしたベースライン
3 推論デコーディング(n-gram、EAGLE、MTP、suffix) n-gramの2つの実装、提案長、同時実行数
4 構造化出力(xgrammar、guidance) 正確性、初回リクエストのコスト、トークンあたりのコスト
5 ツール呼び出し(パーサー、tool_choice、strict) スキーマ準拠率
6 量子化(FP8、AWQ、GPTQ、KV FP8) オンラインFP8、パープレキシティ
7 KVオフロードと分散サービング CPUオフロード
8 スリープモード、起動時間、/metrics、認証 スリープ、コンパイルキャッシュ、パス別認証
9 並列化、マルチモーダル、プーリング、LoRA 埋め込み・再ランクのみ

2. 機能マップ

「節約するもの」はその機能が削減するコスト、「メリット条件」は実測やドキュメントで効果が出た条件です。

機能 原理(論文) 有効にするオプション(0.31・0.32) デフォルト 節約するもの メリット条件 メリットのない条件
PagedAttention KVをブロックに分割(Kwon他、SOSP 2023) 常時 有効 KVメモリの無駄 リクエスト長がバラバラなとき 該当なし
連続バッチング ステップ単位のスケジュール(Yu他、OSDI 2022) --max-num-seqs 256 空のバッチスロット 同時リクエストが多いとき リクエストが1つだけのとき
chunked prefill プリフィルを分割してデコードと混在(Sarathi) --max-num-batched-tokens 有効、2,048(70GB未満のGPUサーバー) デコードの停止時間 長い入力とデコードが混在するとき 短い入力のみが来るとき
プレフィックスキャッシュ ブロックハッシュによるKVの再利用 --enable-prefix-caching 有効 プリフィル計算 共通の先頭部分が長く、頻繁に来るとき 先頭部分が毎回異なるとき
cache_salt 最初のブロックハッシュにソルトを追加 リクエストの cache_salt なし テナント間のタイミング漏洩 複数顧客が1つのエンジンを使用するとき 単一ユーザー
推論デコーディング ドラフトをまとめて検証(Leviathan他、ICML 2023) --speculative-config 無効 デコードステップ数 同時性が低く出力が予測可能なとき 高い同時性、ランダムな出力
構造化出力 トークンマスク(XGrammar、MLSys 2025) response_format, structured_outputs auto 形式エラー 機械が読み取る出力 自由な文章
ツール呼び出し パーサー + 構造タグ --enable-auto-tool-choice --tool-call-parser 無効 呼び出しパースエラー エージェント ツールを理解していないモデル
重み量子化 FP8、AWQ、GPTQ --quantization なし 重みメモリ・読み込み 同時性が低いとき、大規模モデル 大規模バッチ
KV量子化 KV FP8 --kv-cache-dtype fp8 auto(モデルの精度) KVメモリ KVが不足しているとき KVに余裕があるとき
マルチLoRA アダプターのバッチ計算(Punica、S-LoRA) --enable-lora --max-loras 無効 モデルの数 アダプターが複数あるとき アダプターが1つのとき
KVオフロード KVコネクター、CPUレイヤー --kv-offloading-size 無効 押し出されたプレフィックスの再計算 GPUのKVが不足し、再利用があるとき 再利用がないとき
分散サービング プリフィル・デコードの分離(DistServe、OSDI 2024) --kv-transfer-config(NIXLなど) 無効 末尾のITL 高速なGPU間接続 低速な接続、スループット目標
並列化 TP・PP・DP・EP Megatron-LMなど --tensor-parallel-size など 1 GPU1枚の限界 モデルが収まらないとき モデルが収まるとき
スリープモード CuMemアロケーター --enable-sleep-mode + 開発モード 無効 再起動時間 GPUを交互に使用するとき 常時サービング
マルチモーダル・プーリング エンコーダー、LAST/CLSプーリング モデルに依存、 --runner pooling モデルに依存 個別サーバー 同一エンジンで統一 特化型エンジンのほうが早いとき

OpenAI互換API(/v1/completions, /v1/chat/completions, /v1/embeddings, /v1/responses など)と /metrics は機能というよりこれらすべての入口であるため、表から除外しました。本シリーズのすべての測定はこのAPIで行い、指標は第8回にまとめています。

機能同士を同時に使用できない場合もあります。0.32.0のドキュメントの互換性表によると、推論デコーディングはLoRA、プーリング、プロンプト埋め込み入力と同時に使用できません(❌)。実測中も、0.31.0はn-gram推論デコーディングを有効にすると、「非同期スケジュールを無効にする」、「Model Runner V2がまだngramをサポートしていないためV1実行器に戻る」という警告を出しました。

3. 実測値の要約

すべて8GBクラスのノートPC用GPU(Ada世代)1枚、vLLM 0.31.0、Qwen3-Reranker-0.6B(bf16、再ランク用にファインチューニングされた0.6B因果言語モデル)、コンテナメモリ制限4GiBまたは4.5GiBの環境で測定しました。同じ条件を3〜4回繰り返して中央値を使用し、サーバー起動後の最初のバッチはウォームアップとして除外しました。

機能 条件 結果(中央値)
連続バッチング 同時16、入力256・出力128 単発 174.6 tok/s → デフォルト 1,683.1 tok/s(9.6倍)
chunked prefill デコード中の3,700トークン入力 デコード最大停止 512トークンチャンク 35.6ms、デフォルト 109.8ms、チャンク無効 197.6ms
プレフィックスキャッシュ 3,200トークン共通 1つ目のトークン 174.7ms → 18.9ms、無効時 173.8ms
cache_salt 同じプレフィックス、異なるソルト 異なるソルトはキャッシュ0トークン、173.7ms
n-gram推論デコーディング 同時1、文章コピー 176.4 → 704.1 tok/s(提案4個、4.0倍)、提案8個 1,117.0 tok/s(6.3倍)、受容率96%以上
n-gram推論デコーディング 同時1、ランダム出力 プロンプトセットの中で受容率が低い1つは10%低下(171.4 → 153.6 tok/s)。同時32ではスループット14%減少
構造化出力 JSONスキーマ、同時16 正しいJSON 46/48(不正な2個は長さ超過)、なしの場合は0/48。初回リクエスト 446ms(xgrammar)
ツール呼び出し required、strictなし/あり スキーマ準拠 0/5 → 5/5、値は不正確
FP8オンライン量子化 同時 1/16/64 スループット 1.36/1.24/1.08倍、重み 1.12 → 0.71GiB
KV CPUオフロード 追い出された1,600トークンのプレフィックス 再計算 77.3ms → CPUで35.1ms(GPUヒット 14.0ms)
スリープモード 段階2、段階1 段階2:GPU 6,168 → 606MiB、復帰 0.39秒(再起動 32秒)、出力同一。段階1:コンテナOOM 2回
起動時間 同一設定での再起動 65秒 → 32秒(コンパイルキャッシュ)
認証 --api-key /v1/* 401, /invocations 200(生成実行)
埋め込み・再ランク 64文、32ドキュメント 371.8ms、33.9ms

測定できなかったのは、テンソル・パイプライン・データ・エキスパート並列(GPU1枚のため)、分散サービング(同上の理由)、EAGLE・MTP・suffix推論デコーディングです。EAGLEはドラフトの重み(pickle形式かつ独自ライセンス)、suffixは追加パッケージが必要なため取得を見送りました。初期バージョンで未測定だったマルチモーダル入力とAWQ・GPTQは、3-1節の再測定で測定しました。

3-1. 2026-10-27再測定:0.32.0と対話モデル

機能 2026-10-27 0.31.0測定(再ランク 0.6B) 0.32.0再測定
連続バッチング・チャンク・プレフィックスキャッシュ 9.6倍、109.8ms、174.7 → 18.9ms 同一モデルで1.5%以内で同等(1,683.6 tok/s、108.2ms、175.2 → 18.9ms)
認証(/invocations) キーなしで200 キーなしで200(そのまま)
スリープ 段階2・段階1 復帰 0.39秒、段階1でコンテナOOM 復帰 0.41秒、段階1で再びOOM
n-gram推論デコーディング コピー 4.0倍、貪欲出力 10/12一致、KV 23%減少 Qwen3-0.6B:コピー 3.7倍、コード返却 3.1倍、 説明 0.97倍(受容 3%)、貪欲出力 12/12一致、KV 2%減少(V2実行器)
構造化出力 強制なしの場合、正しいJSON 0/48 Qwen3-0.6B:強制なしでも値は18/18一致したが、コードブロックのためそのままでは読めず 0/18、強制すると18/18
ツール呼び出し strictなしの場合、スキーマ準拠 0/5 Qwen3-0.6B・GPTQ・4B AWQ:autoを含め36/36すべて一致する都市・単位
量子化 FP8 1.36倍 Qwen3-0.6B: FP8 1.37倍、GPTQ 8bit 1.40倍(パープレキシティ -1.4%·+1.6%)。4B AWQ は 8GB で秒間 80 トークン
マルチモーダル 未計測 VL-2B デフォルト設定は KV -0.07GiB で起動失敗、サイズヒントで KV 2.13GiB。896px 画像 808トークン·初トークン 238ms、同じ画像を再度 32.7ms。デフォルト設定は内部アドレスを実際に取得する

この計測の限界

4. バージョンごとに変わったこと

vLLM はおおよそ2週間ごとにリリースされます。以前の記事を読んだり、古い設定を移行する際に役立つ変化だけをピックアップしました(リリースノートで確認)。

バージョン 変更点
0.8.0 V1 エンジンがデフォルトに
0.10.0 V0 エンジンコードの整理を開始(V0 の推測デコーディングワーカーなどを削除)
0.11.0 V0 エンジン完全削除。CPU KV オフロード(LRU)導入。プレフィックスキャッシュハッシュのデフォルトが sha256(ドキュメント基準)
0.12.0 guided_json など guided_* リクエストフィールド削除、 structured_outputs に統一
0.14.0 非同期スケジュール(エンジンのスケジュールと GPU 実行をオーバーラップ)がデフォルト
0.19.0 汎用 CPU KV オフロード(ポリシー置換可能)
0.21.0 xgrammar 構造タグによる strict ツール呼び出し
0.28.0 大きな GPU の max_num_batched_tokens デフォルト 8,192 → 16,384
0.29.0 Model Runner V2 がすべてのモデルのデフォルト
0.31.0 オンライン量子化 --quantization fp8 が fp8_per_tensor に移行(実測で警告を確認)
0.32.0 max_tokens をコンテキストから事前に除外しない(長いプロンプトが拒否されなくなる)。デフォルトの CORS が「許可なし」。カスケードアテンション削除。Python 3.10 サポート終了。64段階を超えてネストされた JSON スキーマを拒否。MRV2 に GPU n-gram 提案器

V0 から V1 に移行する過程で消えた機能もあります。0.32.0 の V1 ガイドは best_of、リクエストごとのロジットプロセッサ、GPU↔CPU KV 交換(プリエンプション時のスワップ)、リクエストごとの構造化出力バックエンドを「削除済み」と記載しています。V1 のプリエンプションはスワップではなく再計算(RECOMPUTE)がデフォルトです。

5. どこから見るべきか

参考

ログインするといいねできます

コメント

まだコメントはありません。

ログインするとコメントできます