vLLM ネイティブ RL API リリース
vLLM ネイティブ RL API リリース
vLLM は、トレーニングと推論間の重み同期を標準化し、非同期 RL ワークロードを安定化するために設計されたネイティブ Reinforcement Learning (RL) API をリリースしました。これらのアップデートは、フレームワーク間で ad-hoc で重複した方法で重み同期が実装されていた一般的な問題と、特に P/D と DPEP デプロイメントにおいてスケール時に非同期 RL セットアップが脆弱になる問題を解決します。
ネイティブ重み同期 API
オンライン RL のロールアウトが最新のモデル重みから生成されることを確保するため、vLLM は現在、フレームワーク固有のワーカー拡張の必要性を置き換える標準化された重み転送インターフェースを提供しています。
重み転送ライフサイクル
重み転送プロセスは、プラグ可能なバックエンドを用いて4つの異なるフェーズに分割されます:
- 初期化 (
init_weight_transfer_engine): トレーニングループが始まる前に、トレーナーと推論ワーカー間の通信チャネルを確立します。 - 重み更新の開始 (
start_weight_update): 通常、各トレーニングステップ後に呼び出され、vLLM ワーカーが重みを受信できるように準備します。 - 重みの更新 (
update_weights): トレーナーから推論エンジンへすべてまたは一部の重みを転送し、チャンク転送をサポートします。 - 重み更新の終了 (
finish_weight_update): 量子化などの必要な後処理を実行します。
サポートされているバックエンドとカスタマイズ
vLLM は現在、重み転送のための2つの主要なバックエンドをサポートしており、どちらもシリアライズオーバーヘッドを削減する最適化されたパック実装を使用しています:
- NCCL: 別々のGPU上のトレーニングと推論ワーカー間でのブロードキャスト操作による重み転送に使用されます。
- IPC: 共有メモリハンドルを介した同一デバイスでの重み転送にCUDA IPCを使用します。
開発者は、カスタム WeightTransferEngine 抽象を登録することで、トランスポートメカニズムとワーカー実装を分離した独自のトランスポートロジックを実装できます。
改善された非同期 RL サポート
非同期 RL では、推論リクエストが処理中の間に重みを更新する必要があります。vLLM は、クライアントリクエストを中断したりシステムデッドロックを引き起こしたりすることなくこのプロセスを処理する新しいメカニズムを導入しました。
「Keep モード」の導入
vLLM は、pause_generation と resume_generation メソッド(および対応する /pause と /resume HTTP API)に keep モード を追加しました。これにより、エンジンは状態を保持したまま進行中のリクエストを一時停止し、スケジューラを停止することができ、クライアントがリクエストを再試行する必要がなくなります。
| Mode | Explanation | Client-side impact | Asynchronous RL possible? |
|---|---|---|---|
abort |
すべての進行中のリクエストを中止 | クライアントはリトライを処理する必要がある | はい |
wait |
すべての進行中のリクエストを待機 | クライアントはリトライする必要がない | いいえ |
keep |
進行中のリクエストを一時停止 | クライアントはリトライする必要がない | はい |
DPEP セットアップでのデッドロックの解決
データパラレル (DP) デプロイメントでは、一部のエンジンが一時停止信号を受信し、他のエンジンがリクエストを積極的に処理しながら同期を待っているときに、以前はデッドロックが発生していました。vLLM は、以下の2つの主要な変更によりこの問題に対処します:
- EngineCore の統合: レース条件を減らすため、
AsyncLLMエントリポイントレイヤーから一時停止ロジックがEngineCore内のスケジューラーに直接移動されました。 - 2 フェーズ ポーズ/レジューム プロトコル:
- フェーズ 1 (ローカル ポーズ): エンジンはスケジューリングを一時停止しますが、必要なフォワードパスに参加するために
START_DP_WAVEリクエストに応答し続けます。 - フェーズ 2 (グローバル ポーズ): エンジンは定期的に all-reduce (32 ステップごと) を実行し、すべてのランクが「ローカル ポーズ」状態であるかを確認します。コンセンサスが得られたら、彼らは一緒にグローバル ポーズに移行します。
- フェーズ 1 (ローカル ポーズ): エンジンはスケジューリングを一時停止しますが、必要なフォワードパスに参加するために
検証とパフォーマンス
フレームワーク統合
新しい API は SkyRL に統合され、DAPO レシピを使用して Qwen3-1.7B の非同期トレーニングが可能になりました。
大規模デプロイメント
Prime-RL チームは、P/D ディスアグリゲートセットアップで zai-org/GLM-5.1-FP8 モデルを使用して API を検証しました。このデプロイメントは、プリフィルとデコードに DPEP32 を使用した 4P+4D の 2 レプリカである 16 個の 8xH200 ノードにわたり、CPU KV キャッシュオフロード (ノードあたり 1TB) を利用しました。このセットアップは、一貫した重み更新と評価パフォーマンスの向上とともに、100+ ステップのトレーニングにおいて安定していました。
Sources
- OriginalNative RL APIs in vLLM