PSA: llama-swapが新しい「matrix」機能をリリース—同時に動かせるモデルの組み合わせを微調整可能に

Reddit r/LocalLLaMA / 2026/4/30

📰 ニュースDeveloper Stack & InfrastructureTools & Practical UsageModels & Research

要点

  • llama-swapが新しい「matrix」機能をリリースし、複数のモデルを同時に走らせる組み合わせ(グループ)を柔軟に定義できるようになりました。
  • 従来はモデルを1つのグループにしか入れられませんでしたが、matrixでは用途別に「自分だけで動かす大規模モデル用」「STT+大規模モデル用」「RAG用」など、任意の組み合わせグループを作成できます。
  • 要求されたモデルを起動する際、solverベースのスワップDSLが「アンロード(退避)コスト」が最小になる組み合わせを選んで、必要最小限のモデルだけを停止します。
  • matrixの設定例では、組み合わせの集合(sets)や退避コスト(evict_costs)を定義し、部分集合の意味論や演算子(AND/OR/括弧/インライン展開)によって有効な同時実行セットを記述できると説明されています。
  • 設定はmatrixと従来のlegacy groupsを同時に使用できず、どちらか一方のみを指定する必要があります。

以前は、モデルは1つのグループにしか存在できませんでした。現在は、好きなだけ任意のグループを作成できます。たとえば、単独で動作すべき大きなモデル用のグループ、STT+より大きいモデル用のグループ、RAGの用途用のグループなどです。モデルの「切り替え(unload)コスト」に基づいて、賢くモデルをアンロードします。

設定を確認してください:llama-swap/config.example.yaml at main · mostlygeek/llama-swap

# ============================================================================= # 行列: ソルバベースのスワップDSLで並行モデルを実行 # ============================================================================= # # 注: # 設定では、matrix か legacy groups のどちらか一方を使用する必要があります。両方を定義すると # 設定エラーが発生します。legacy Groups の設定例は以下にあります: # https://github.com/mostlygeek/llama-swap/blob/40e39f7/config.example.yaml#L334-L396 # # matrix は、同時に実行可能なモデルの有効な組み合わせを宣言します。 # モデルが要求されると、ソルバは「そのモデルを利用可能にするための最安の方法」を見つけます。 # 可能な限り少ない(かつ最もコストの低い)実行中モデルを追い出して提供します。 # # ソルバの動作: # 1. モデルXに対する要求が到着 # 2. もしXがすでに実行中なら、そのまま転送。完了。 # 3. Xを含むすべての集合を見つける # 4. 各候補集合についてコストを計算: # その集合に含まれていない実行中モデルそれぞれについての evict_costs の合計 # 5. 最も低いコストの候補を選ぶ。 # 同点の場合は定義順で決まる。 # 6. 停止が必要なものを追い出す。Xを開始する。要求を転送する。 # # 部分集合セマンティクス: 集合 [a, b, c] は任意の部分集合が有効であることを意味します。 # 要求されたモデルのみが開始されます — 他は事前にプリロードされません。 # # どの集合にも登場しないモデルは、単独でのみ実行可能です。 # matrix: # vars: モデルの短い名前(英数字、1〜8文字) # - sets と evict_costs の設定で必要 # - 各エントリは実際のモデルIDへの短い名前です。エイリアスは使わないでください # - sets DSLのロジックを短くして読みやすくするために使用 # - sets と evict_costs では vars で定義した識別子のみを使う vars: g: gemma-model q: qwen-model m: mistral-model v: voxtral-model e: reranker-model L: llama-70B sd: stable-diffusion # evict_costs: 実行中モデルを失うこと(=evict)の相対コスト(デフォルト: 1) evict_costs: v: 50 # vllm バックエンド、コールドスタートが遅い L: 30 # 70B の重み、読み込みが遅い # sets: 並行実行するモデルの組み合わせを表す名前付き集合 # 値は、演算子を使うDSL文字列です: # & AND(モデルが一緒に実行される) # | OR(代替案) # () グルーピング # +ref その集合の別の式をインライン展開 # # 展開例: # "L" → [L] # "a & b" → [a, b] # "a | b" → [a], [b] # "(a | b) & c" → [a, c], [b, c] # "(a | b) & (c | d)" → [a,c], [a,d], [b,c], [b,d] # "+llms & v" → llms をインライン展開してから、& v の集合を適用 sets: # LLM + TTS: g/q/m の切り替えは v を追い出さない # 展開先: [g,v], [q,v], [m,v] standard: "(g | q | m) & v" # LLM + TTS + ランカラ # 展開先: [g,v,e], [q,v,e] with_rerank: "(g | q) & v & e" # LLM + 画像生成、TTSなし # 展開先: [g,sd], [q,sd] creative: "(g | q) & sd" # 70B モデルはすべてのGPUを使用するため単独でしか実行できない # 展開先: [L] full: "L" 
submitted by /u/walden42
[link] [comments]