vLLM と TileRT のレイテンシクリティカルなサービング統合
vLLM と TileRT のレイテンシクリティカルなサービング統合
vLLM は TileRT 0.1.5 をプラガブルなデコードエンジンとして統合し、ユーザーは vLLM のプリフィル機能と TileRT の専門的なデコード速度を組み合わせることができます。この統合により、リアルタイム音声、インタラクティブなコーディングアシスタント、エージェントループなどのレイテンシクリティカルなワークロードが、vLLM エコシステムの運用成熟度、API、スケジューリングを犠牲にすることなく、ユーザーごとのトークン生成速度を最大化できます。
プラガブルデコードアーキテクチャ
分散型サービング(計算バウンドのプリフィルフェーズとメモリ帯域幅バウンドのデコードフェーズを分離すること)を活用することで、vLLM はデコード側をプラガブルにします。TileRT の統合は vLLM V1 の公開コネクタインターフェース(KVConnectorBase_V1)を通じて実現されるため、TileRT デコードプールは vLLM のソースコードを変更したりフォークを作成したりせずにデプロイに追加できます。
統合の主要コンポーネント
- vLLM Prefill: スケジューリング、チャンク化されたプリフィル、プレフィックスキャッシュを処理します。
- vLLM Serving Surface: OpenAI 互換の API、リクエストフォーマット、既存ツールを維持します。
- TileRT Decode: ユーザーごとのデコード速度をハードウェアの限界まで引き上げることを目的とした、専門的な推論ランタイムです。
- MultiConnector: 単一の標準 vLLM プリフィルプールで、ネイティブ vLLM デコードプール(高スループット向け)と TileRT デコードプール(低レイテンシ向け)の両方にサービスを提供できるようにします。
リクエストルーティングとハンドオフ
ネイティブと専門的なデコードプールの共存を維持するために、システムは軽量ルーターと特定のクレームフィルタリングメカニズムを使用します。
ルーティングメカニズム
レイテンシクリティカルなトラフィックに対しては、ルーターが max_tokens=1 を設定し、vLLM がプリフィルを実行して最初のトークンを出力します。その後、kv_transfer_params(具体的には tilert_host と tilert_ctrl_port)を介して対象デコードノード情報を付加します。一般的なトラフィックは標準の分散プロキシを通じて変更なく流れ続けます。
データプレーンと状態転送
TileRT デコードへの vLLM プリフィルからのハンドオフは高速かつノンブロッキングになるよう設計されています:
- RDMA Transfer: アテンション状態(圧縮 KV、スパースアテンションインデックスキャッシュ、メタデータ)は、RDMA の片方向書き込みを使用して、Mooncake または NIXL を用いた事前登録済み GPU バッファへ転送されます。
- Prefill Overlap: 状態抽出はフォワードウィンドウ内で行われ、キャッシュブロックがリサイクルされる前にステージングバッファへコピーされ、バックグラウンド送信スレッドがネットワーク転送を処理します。これにより、TileRT に割り当てられたリクエストが後続のプリフィルイテレーションをブロックしません。
- Immediate Execution: 到着時に状態は TileRT のネイティブレイアウトに変換され、実行中のエンジンに注入され、マルチトークンの投機的デコードが即座に開始されます。
パフォーマンスとユースケース選択
デコードプールの選択は、ワークロードの具体的な要件に依存します:
- Use TileRT Decode: ユーザーごとのトークン速度が主要な制約である場合(例:インタラクティブエージェント、レイテンシ SLO 推論)で、かつモデルがサポートされている場合に使用します。
- Use Native vLLM Decode: 最大の総合スループット、高並列バッチ処理、広範なモデル/機能サポートが必要な場合に使用します。
現在の制限とサポート
TileRT 0.1.5 の時点では、TileRT デコードノードは同時に 1 件のリクエストしか処理できず、ルーターがゲート付きディスパッチとバックプレッシャーを管理します。現在サポートされているモデルは GLM-5/5.1 と DeepSeek-V3.2 です。
実装とセットアップ
TileRT プールをデプロイするには、PyPI または GitHub 経由で TileRT 0.1.5 をインストールする必要があります。プロセスは主に 3 つのステップで構成されます:
- Weight Conversion: Hugging Face のチェックポイントを
weight_converterモジュールを使用して TileRT の重み形式に変換します。 - Decode Server Launch:
decode_serverを起動し、MTP(マルチトークン予測)と KV キャッシュの dtype 用に特定の設定を行います。 - vLLM Prefill Configuration:
vllm serveを実行し、--kv-transfer-configでTileRTConnectorプラグインを指定します。speculative-configをmtpに設定し、プリフィルノードがデコード側の投機用ドラフトレイヤー KV を生成するようにします。