model フィールドを変更するだけでモデル間のルーティングが行える。エンドポイントや APIキーは変わらず、変更されるのは model の値のみだ。
ルーティングの仕組み
各デプロイには固有の公開名が存在する。Tokiosがリクエストを受信するとmodel フィールドを参照し、該当名を持つデプロイを特定した上でそのデプロイのアップストリームモデルIDに書き換え、コネクター経由で転送する。クライアント側の設定は一切変更不要で、変更されるのは model の値のみだ。
一つのコネクターで複数モデルを利用
一つのコネクターで複数のモデルを扱うことも可能だ。Routes 欄に各アップストリームモデルIDを記載し、Upstreams 欄でそれらを名付けたローカルアップストリームにマッピングする。
tokios-connector.json
gemma-tunnel → gemma4:e4b、qwen-coder → qwen2.5-coder)。これらすべてが同一のコネクターを指すことになる。
リクエスト内でのモデル切り替え
両方のデプロイが登録済みの状態で、モデルを切り替えるにはmodel フィールドのみを変更すればよい。
クライアント側を一切変更せずにバックエンドを入れ替えられる
クライアントは公開名前のみを参照するため、アップストリームモデルIDを変更せずにモデルを別のハードウェアやバックエンドへ移行できます。デプロイ設定(またはコネクターのアップストリーム情報)を新しいサーバーへ更新し、同じ公開名前を維持すれば既存のリクエストも問題なく処理されます。ルーティング戦略について
複数のローカルモデルを運用する際、すべてのリクエストを同一モデルへ送信するとリソースが無駄になります。コーディング用リクエストには120B推論モデルは不要であり、単純な分類タスクにも70B大規模モデルは過剰です。ルーティング機能により各リクエストを最適なモデルへ振り分けられ、処理速度や品質、コストを最適化できます。 すべての処理に1モデルを使用するとトレードオフが生じます。大規模モデルはあらゆるタスクに対応できますが応答が遅くVRAM消費量も多いです。小規模モデルは応答が速いものの複雑な推論には不向きです。ルーティング機能で両方のモデルを活用可能です。- 速度: 単純なクエリは小規模かつ高速なモデルへ、複雑なタスクは大規模モデルへ振り分けられる
- 品質: コーディング関連のタスクは専用モデルへ、一般的な会話は汎用モデルへ送信される
- コスト: 小規模モデルは消費電力やVRAM使用量が少なく、高負荷処理用のリソースを確保できる
- 耐障害性: プライマリモデルが混雑または停止してもバックアップモデルへリクエストが自動転送される
タスクベースのルーティング
タスクベースのルーティング
タスクの種類に応じてルーティングします。例えばコーディング関連のリクエストはコーディング専用モデルへ、一般的なチャットは汎用モデルへ、推論処理は高機能モデルへ送信します。クライアントまたはミドルウェア層がリクエスト内容を確認した上で適切なデプロイ先を選択します。より高度なルーティングが必要な場合は、リクエスト内容を解析し設定可能なルールに基づいて適切なバックエンドへ転送する LiteLLMや OpenRouterといったゲートウェイを利用できます。
最も簡単な実装方法はアプリケーションコード内で行うことです。リクエストの種類を確認し、適切なデプロイ名を選択してください:
ゲートウェイレベルでのルーティング
ゲートウェイレベルでのルーティング
クライアントと Tokiosの間にルーティングプロキシを配置します。このプロキシがリクエストの属性や負荷状況、カスタムルールに基づいて使用すべき Tokiosデプロイを決定します。LiteLLMは複数の Tokiosデプロイの前段に配置でき、モデルエイリアスに基づいてルーティングを行うことも可能です:クライアントはエイリアス
litellm_config.yaml
gpt-4を使って LiteLLMプロキシへリクエストを送信し、プロキシが事前に設定した Tokiosデプロイへ転送します。OpenRouterでは複数のプロバイダー間でのモデルフォールバックや負荷分散も可能です。ご自身の Tokiosエンドポイントをカスタムプロバイダーとして追加し、OpenRouterダッシュボードでルーティングルールを設定してください。フォールバックチェーン
フォールバックチェーン
プライマリモデルを設定し、さらに 1個以上のフォールバックモデルも指定します。プライマリモデルが利用中、オフライン状態、またはエラーを返した場合、リクエストはチェーン内の次のモデルへと転送されます。Tokiosのコネクターは自身のステータスをゲートウェイへ報告します。コネクターがオフラインになると、そのコネクター経由でデプロイされたモデルへのリクエストは全て 503を返します。アプリケーション側でこの状況を検知し別のデプロイへ再試行することも可能ですし、LiteLLMのようなゲートウェイを利用して自動的にフォールバック処理を行わせることもできます。
コストに基づくルーティング
コストに基づくルーティング
頻度が高く単純なリクエストはより小規模で低コストなモデルへ振り分け、大規模モデルは必要なタスク専用に確保します。
この戦略により総計算量と消費電力が削減される。VRAMや電力に制限がある一般向けハードウェア上で運用する際に非常に有益だ。
判断基準表
これらの戦略は互いに排他的なものではない。実際の運用では、タスク種別に応じたルーティング(コード生成タスク→コード生成用モデル)と、ゲートウェイプロキシの背後で実施されるフォールバックチェーン(主要モデル→バックアップモデル)を組み合わせるケースが多い
次に行うべきこと
ローカルで利用可能なモデルを選択する
各モデルやバックエンドを比較し、どのデプロイを登録すべきかを決定してください。
ご利用のデプロイのベンチマークを実施しましょう。
実際のワークロード下でルーティング設定が適切かを確認するため、スループットやレイテンシを測定してください。