vLLM セマンティックルーターのマルチモーダルルーティングとビジョンエンコーダの強化

vLLM セマンティックルーターのマルチモーダルルーティングとビジョンエンコーダの強化

vLLM はセマンティックルーター (VSR) を拡張し、マルチモーダルルーティングをサポートしました。これにより、画像、スクリーンショット、文書からの視覚的証拠をテキストと同じ意思決定構造内で型付けされたシグナルとして扱うことができます。この移行により、VSR はプロンプトレベルのルーティングからリクエストレベルのポリシーへと移行し、マルチモーダルリクエストの実際の内容に基づいたより精密なルーティングが可能になります。

リクエストレベルポリシーとしてのマルチモーダルルーティング

VSR におけるマルチモーダルルーティングは単なる画像分類ではなく、視覚シグナルを Signal-Decision アーキテクチャに統合することです。このモデルでは、シグナルは独立した観測であり、優先度とブールロジックを用いて組み合わせ、ルーティングパスを決定します。

テキストプロンプトだけでなく、リクエスト全体を分析することで、テキストは一般的でも画像が決定的な証拠を含むシナリオに対応できるようになりました。例として:

  • PII リスク: 「Summarize this」というリクエストにパスポート画像が組み合わされると、識別文書として制限付きで処理されます。
  • ドメイン特化: 「What does this show?」という曖昧な質問に胸部X線画像が組み合わされると、医療ドメインのポリシーが発動し、適切な Vision-Language Model (VLM) にルーティングされます。
  • セキュリティレビュー: 「Find the bug」というプロンプトにコードのスクリーンショットが組み合わされると、コードアーティファクトとして識別され、セキュリティレビューのパスとシークレット漏洩チェックがトリガーされます。
  • ドメイン外拒否: 医療に関するプロンプトに無関係な車の画像が組み合わされると、ドメイン外の視覚証拠としてフラグが立てられ、確認または拒否のパスへと導かれます。

ビジョン信号の逆転の解決

multi-modal-embed-small (mmes) エンコーダを用いたマルチモーダルルーティングの実装中、vLLM は「自信を持って間違っている」重大な失敗を特定しました。3つの業界にまたがる 11 枚の画像プローブと 21 の候補ラベルで調査した結果、逆転率は 82% となり、シグナルは単なるノイズではなく逆相関していました(例: 医療用 X 線が半導体候補に近い順位に付けられ、医療候補よりも上位に来た)。

誤診断: エンコーダの強度

当初の仮説では、コンパクトな multi-modal-embed-small エンコーダがタスクに対して不十分であると考えられました。しかし、テストの結果、SigLIP2-base、SigLIP-base(Hugging Face 経由)、およびより大きな multi-modal-embed-large (mmEL) などの他のモデルすべてが同じプローブで 10/10 のスコアを獲得しました。重要なのは、PyTorch 参照パスでロードした mmes モデルも 10/10 を取得しており、エンコーダ自体が問題ではないことが証明された点です。

根本原因: 実装のドリフト

調査の結果、PyTorch 参照パスと Rust/Candle バインディングパスの間に大きな乖離があることが判明しました。パスポートフィクスチャテストでは、PyTorch でのコサイン類似度が 0.7204 に対し、Candle バインディングパスでは 0.1576 でした。

Candle パスで特定された 3 つの実装エラーがあり、修正されました:

  1. プーリングヘッドの不一致: SigLIPVisionEncoder::forward の実装が、必要な注意プローブプーリングヘッドではなく、BERT スタイルの mean + Linear + tanh プーリングを使用していました。この問題は PR #1927 で対処されました。
  2. 正規化エラー: Go の画像ローダーがピクセルを [0, 1] の範囲で提供していましたが、SigLIP はチャンネルごとの正規化 (x - 0.5) / 0.5 を必要とします。この問題は PR #1928 で修正されました。
  3. 前処理の乖離: Go 側のリサイズパスが 4 タップのバイリニア実装を使用しており、PyTorch 参照の PIL スタイル前処理と異なっていました。PR #1943 では、画像のデコード、リサイズ、変換を Rust の image クレートと Catmull‑Rom フィルタを用いて実装し、PIL のバイキュービック+アンチエイリアスの挙動に近似させました。

検証とパフォーマンス

これらの修正後、プロダクションパスは PyTorch 参照と比較して検証されました。パスポートフィクスチャでの 3 ベクトル分離実験において、フルブランチスタックパイプラインは参照に対し 0.999902 のコサイン類似度を達成しました。

20 枚の画像コーパス全体で、システムは最小コサイン 0.999557、平均 0.999919 を記録し、20/20 の画像が PyTorch 参照に対して $\ge 0.999$ のスコアを獲得しました。

パフォーマンスに関しては、VSR の分類シグナルは runSignalDispatchers を通じて並行実行されるため、実時間レイテンシは最も遅い有効な分類器に制限されます。代表的なトレースでは、CPU 上で完全な分類決定が約 1.3 秒で完了しています。

VSR の今後のロードマップ

信頼できるビジョンシグナルパスが確立したことで、vLLM は VSR を包括的なリクエストレベルのコントロールプレーンへと進化させることを目指しています。今後のアーキテクチャ目標は以下の通りです:

  • 画像由来のシグナルをテキストシグナルと同じ意思決定層に直接統合する。
  • マルチモーダル決定がリプレイ、メトリクス、デバッグツールで可視化されることを保証する。
  • モデル選択がポリシー適合性とモダリティ能力の両方を考慮できるようにする。
  • PII や jailbreak など安全性が重要なシグナルに対して高忠実度の検査を維持する。
  • ツール呼び出しやメモリ書き込みを含むエージェントワークフローへルーティングファブリックを拡張する。

Sources