llama.cpp モデル管理とルーターモード

llama-server には ルーターモード が組み込まれ、ユーザーはサーバーを再起動することなく複数のモデルを動的にロード、アンロード、切り替えることができます。このアップデートにより、llama.cpp に Ollama スタイルのモデル管理が導入されます。マルチプロセスアーキテクチャを利用し、各モデルは独自のプロセスで実行されるため、1 つのモデルがクラッシュしても他のモデルに影響を与えません。

動的なモデルロードとルーティング

llama-server は今ではオンデマンドで複数のモデルを管理でき、API リクエストの model フィールドに基づいて適切なモデルにリクエストをルーティングできます。

主な管理機能

  • 自動検出: サーバーは llama.cpp キャッシュ(LLAMA_CACHE または ~/.cache/llama.cpp で定義)または --models-dir で指定されたカスタムディレクトリ内の GGUF ファイルを自動的にスキャンします。
  • オンデマンドロード: モデルは最初のリクエスト時に自動的にメモリにロードされます。同じモデルへの後続のリクエストは即座に処理されます。
  • LRU 削除: メモリを管理するために、サーバーは最近最少使用(LRU)削除ポリシーを採用します。ロード済みモデルの最大数(--models-max で定義、デフォルトは 4)に達すると、最も最近使用されていないモデルがアンロードされ、リソースが解放されます。
  • 手動制御: ユーザーは HTTP POST リクエストを使用して /models/load および /models/unload エンドポイントを介してモデルを明示的に管理できます。

設定と技術オプション

ルーターモードのモデルは、ルーターからコンテキストサイズ(-c)や GPU オフロード(-ngl)などのグローバル設定を継承します。ただし、プリセットを通じて細かい制御も可能です。

主なコマンドラインフラグ

Flag Description
--models-dir PATH GGUF ファイルを含むディレクトリを指定します。
--models-max N 同時にロードできるモデルの最大数を設定します(デフォルト: 4)。
--no-models-autoload 自動ロードを無効にし、明示的な /models/load 呼び出しを必要とします。

モデルごとのプリセット

ユーザーは --models-preset で渡される config.ini ファイルを使用して、個々のモデルに特定の設定を定義できます。これにより、モデルごとにカスタムコンテキストサイズと温度設定を行うことができます。コミュニティのディスカッションによると、presets.ini も特定のモデルの mmproj (マルチモーダルプロジェクター)ファイルを指定するために使用できます。

API とインターフェイスの統合

モデル管理は API とユーザーインターフェイスの両方に統合されています:

  • API 一覧: /models への GET リクエストは、発見されたすべてのモデルとその現在のステータス(loadedloading、または unloaded)を返します。
  • Web UI: 組み込みの llama.cpp Web UI は、ドロップダウンメニューを介したモデル切り替えをサポートし、これにより自動ロードがトリガーされます。
  • OpenAI 互換性: サーバーは軽量な OpenAI 互換 HTTP サーバーのまま残り、既存のワークフローへの統合が容易です。

コミュニティの洞察

ユーザーは、この機能がモデルバージョンの A/B テストやマルチテナントデプロイメントの作成に有用であることを指摘しています。技術的な詳細については、コミュニティメンバーが次のように述べています:

"llama-server はデフォルトでほとんどの実装において、応答属性の reasoning_content 変数に reasoning content を保持します。そこから取得できます。それ以外の場合は、reasoning-format フラグを使用し、DeepSeek 値を渡して純粋なトークンを取得してください。"

これは、ルーターがモデルを管理している一方で、基盤となるサーバーが特定のモデルアーキテクチャのための reasoning トークンのような高度な出力形式を引き続きサポートしていることを示唆しています。

Sources