vLLM Prefill/Decode分離の評価設計

CHATGPT / AIChatGPTなどの生成AIを活用して運営・記事制作・更新を行っています。制作方針

vLLMの分離型Prefill/Decodeを導入判断するために、version、GPU、network、KV transferを固定し、TTFT、ITL、tail ITL、throughputを混同せず測る比較計画を解説します。

TTFTとITLを別軸で観測し、KV転送コストを加えて分離型の適用可否を判断する比較図

先に結論

Prefill/Decode分離の採用判断は、単一構成と比較してTTFT、ITL、tail ITL、KV transfer、error率を別々に見ることから始まります。vLLMの公式feature noteは、分離によりTTFTとITLを別のparallel strategyで調整でき、tail ITLを管理しやすいと説明する一方、分離型Prefill自体はthroughputを改善しないと明記します。したがって、throughputだけが課題なら分離を前提にせず、queue、batching、model、hardwareを含めて比較します。

確認日時: 2026年8月7日(Asia/Tokyo)
対象version: vLLM v0.23.0 release(2026年6月15日公開、commit 0fc695f)をrelease基準に確認。実装手順は現行Disaggregated Serving exampleを参照。
検証区分: 公式仕様を基にした机上調査・測定計画。本稿に実測値、benchmark結果、実行logはありません。
適用外: connectorごとの対応platform、model品質、実運用のcapacity、NIXL・Mooncake等の依存関係、security review

固定する条件と変える条件を分離する

評価対象を「単一vLLM instance」と「Prefill群+Decode群+KV transfer connector+proxy」の2構成に限定します。比較の途中でmodel、quantization、tokenizer、request内容まで変えると、分離の効果を判定できません。

区分固定するもの変えてよいもの記録する観測値
softwarevLLM version・commit、CUDA、driver、connector版構成の役割起動error、connector error、設定差分
modelrepository revision、tokenizer、dtype、max model lenなしmodel ID、hash、load時間
hardwareGPU種別・枚数、GPU memory上限、CPU、network経路P/DへのGPU配分、TP/PPVRAM、CPU、network転送、queue
workloadprompt token分布、output上限、temperature、concurrency、到着間隔prompt長・output長・concurrencyを1軸ずつTTFT、ITL、tail ITL、完了率
routingendpoint、timeout、retry方針、proxy versionP/D instance数request ID、KV transfer時間、retry理由

vLLMの現行exampleには、2 Prefill instanceと2 Decode instanceをproxyへ渡すXpYdの例があります。これは役割を分けたmultiple instance構成の例であり、2対2が最適な比率という根拠ではありません。台数比を変える試験は、同じ総GPU数と同じrequest群を固定して別runにします。

測定を四つの時間に分ける

client側の終了時間だけでは、Prefillが遅いのか、KV transferで待ったのか、Decodeが詰まったのかを区別できません。request IDを共通キーにし、次の時刻を収集します。

指標定義分離型で確認する理由
TTFTclient送信から最初のtoken受信までprompt処理とqueueを含む入口の体験を測る
ITLtoken間隔stream中の滑らかさを測る
tail ITL例: 各requestの高percentile ITLPrefillの混在で起きる長い間隔を見落とさない
KV transfer時間Prefill完了からDecodeが必要なKVを受け取るまでnetwork・connectorが新しい律速になっていないか確認する
throughput完了tokenまたはrequestの単位時間あたり分離を自動的な増加要因と誤解しないため別列にする

percentileの算出方法、warm-up除外、clock同期、stream eventの欠落時の扱いをrun前に決めます。TTFTとITLはclientが観測し、KV transferとworker queueはserver側の同じrequest IDへ結び付けます。server間で時計が揃っていない場合は、絶対時刻の差ではなく、同一process内のintervalとevent順序を主に使います。

比較手順

1. 単一構成の基準を作る

同じmodel revisionとrequest corpusで、単一instanceのTTFT、ITL、tail ITL、throughput、error率を測ります。chunked prefillを比較対象にする場合は、chunk size以外の条件を固定し、分離型とは別のrowにします。公式feature noteも、適切なchunk sizeのchunked prefillでtail ITLを扱えると説明しています。

2. 分離構成は最小台数から始める

PrefillとDecodeに使うGPU、TP/PP、connector、proxyを明示します。現行exampleのproxyはPrefill endpointとDecode endpointを別々に受けます。まず短い固定requestを低concurrencyで送り、KV transferが成功してDecodeからstreamが完了することを確認します。性能runの前に、endpoint不一致、model不一致、connector例外を除外します。

3. 一度に一変数だけ動かす

次の順序なら原因を追いやすくなります。

  1. prompt長を短・中・長へ変える
  2. output上限を短・長へ変える
  3. concurrencyを増やす
  4. P/D台数比を変える
  5. TP/PPとnetwork条件を変える

各runでGPU総数が変わるなら、「同じ資源での比較」と「追加資源を使ったcapacity比較」を分けます。特にP/D分離はKVを渡すため、network帯域、遅延、connectorの待機が測定対象から外せません。

解釈で混同しないトレードオフ

公式feature noteは、PrefillとDecodeを別instanceに置くとTTFTとITLへ別のparallel strategyを割り当てられ、tail ITLを制御しやすくなると説明します。ただしfeatureはexperimentalで変更され得ます。また、production-levelの分離はthird-party connectorに依存する場合があると同資料にあります。

  • tail ITLが下がり、TTFTが上がる: 入力処理、queue、KV転送を分けて確認します。Decode専用化だけを成果と決めません。
  • TTFTが下がり、error率が上がる: connectorのretryやtimeoutを隠さず、成功requestだけの集計を避けます。
  • throughputが変わらない: 公式の注意と整合します。SLOがtail ITLなら有効でも、capacity改善の根拠にはなりません。
  • 短いpromptで差がない: 直ちに失敗とは限りません。長いpromptや高concurrencyの運用条件を再現できるかを先に確認します。

採用・非採用の判断基準

分離型を候補に残すのは、対象workloadでtail ITLまたはTTFTのSLOが改善し、KV transferとerror率が許容範囲に収まり、version・connector・network設定を再現でき、rollback時に単一構成へ戻せる場合です。どれかが欠けるなら、単一構成またはchunked prefillを基準に改善します。

初めて概念を確認する場合は、vLLMのPrefill/Decode分離を理解する入門から進めてください。vLLM V1の基本用語と通常のAPI運用はvLLM V1入門で補えます。

参考資料