llama.cppはmodel.iniでモデル管理~llama-serverで複数モデルが個別設定が効く~

こんにちはRcatです。
最近はこんなローカルLLMばっかりやってます。
で、LLMはllama.cppでホストしてるわけなんですが、ホストするにもいくつか方法があるんですね。
今まで適当だったのですが、今回ちゃんと詰めましたので記事にしようと思います。



はじめに

利用規約

情報や作品の活用時は事前に利用規約をご確認ください。


コメントについて

利用規約のガイドラインを確認の上コメントしてください。
則っていないコメントは削除します。


概要

llama.cppとは

ローカルでLLM(大規模言語モデル)をホストするためのツールです。
一般向けだとOllamaやLMStudioの方が有名ですが、知識のある人だとこれらよりも使いやすいです。
使いやすいというよりかは応用が効く感じですかね。
ちなみに根っこはみんなllama.cppですw

https://github.com/ggml-org/llama.cpp

OllamaやLMStudioとの違い

llama.cppの特徴を挙げるとまずはguiがないことでしょう。そう、画面で操作できないんですね。
逆に言えば画面がなくても動くので自動化に超向いてます。
また、基本的には自分でビルドしないといけないので、自分のマシンに特化したネイティブビルドができ、パフォーマンスが最高です。

環境構築が無理だったり、画面で操作できないと困る人やモデルを自分で選ぶことができない人は、こういう汎用GUIツールを使うのは全然いいと思います。でもOllamaはやめとけというのが正直なところw
しかし、極限までパフォーマンスを詰めたり、最新のモデルをいち早く試したいという人には向きませんね。誰って私のことですよ。

なのでレベルで言うとこう

Ollama < LM Studio < llama.cpp

パフォーマンスや拡張性がこの真逆。

llama-serverでAPIサーバーをホスト

llama.cppをビルドすると、llama-serverが生成されます。この実行ファイルがAPIサーバーとなります。

単純な単一ホスト

単純ホストの例です。
モデルを指定してすべてGPUに載せつつ、コンテキストサイズを8192にしています。


llama.cpp\build\bin\Release\llama-server.exe -m モデルファイルパス --host 0.0.0.0 --port 8080 -ngl 99 -c 8192

ビジョンモデルの場合

画像認識が可能なモデルは追加でmmprojを指定してビジョンエンコーダを読み込みます。

llama.cpp\build\bin\Release\llama-server.exe -m モデルファイルパス --mmproj ビジョンエンコーダーパス --host 0.0.0.0 --port 8080 -ngl 99 -c 8192

ビジョンエンコーダーはGGUF配布の際にFilesの方においてあったりする。
llama.cpp開発元のggml-orgの量子化だとおいてあることが多いです。


複数モデルをフォルダでホスト

上記だと単一モデルしかホストできないので、複数のモデルを選べるようにしたい時はこうすることができます。

llama.cpp\build\bin\Release\llama-server.exe ---models-dir モデルファイルを格納したフォルダのパス --host 0.0.0.0 --port 8080 -ngl 99 -c 8192

これはフォルダ内のファイルを列挙して、動的に読み込んでくれるモードです。
これだけで、一つ立ち上げれば軽量モデルと高性能モデルを使い分けられるですが・・・

設定が全部一緒

たとえば -c 8192の影響でコンテキストサイズは全モデル8192です。
普通はいいんですけど、もし128000とかだったら?
軽量モデルにさばけないコンテキストを与える意味がなく無駄。あとビジョンも読めない。

てな感じで、フォルダに入れるだけなので手軽に切り替えられるようになるんですが、設定が効きません。

そこで次の真打登場

設定ファイルで複数モデルを独自設定でホスト

モデルの読み込み設定などを記述したファイルを用意することで詳細に管理する。
LM Studioのパラメータ指定読み込み機能とほぼ同等のことができる。

llama.cpp\build\bin\Release\llama-server.exe --host 0.0.0.0 --port 8082 --models-preset models.ini

最後に指定したmodels.iniというファイルも作らないといけない
それがこちら

models.iniの例

# ==========================================
# 共通設定(すべてのモデルに適用)
# ==========================================
[*]
ngl = 999
ctx-size = 8192
;その他12項目

# ==========================================
# モデル個別定義(投機的デコーディング構成)
# ==========================================
[Qwen3.6-35B-A3B-UD-Q8_K_XL]
model = /opt/models/Qwen3.6-35B-A3B-UD-Q8_K_XL.gguf
ctx-size = 256000
mmproj = /opt/models/mmproj-Qwen3.6-35B-A3B-Q8_0.gguf
;その他2項目

[gemma-4-26B-A4B-it-Q8_0]
model = /opt/models/gemma-4-26B-A4B-it-Q8_0.gguf
ctx-size = 32768
mmproj = /opt/models/mmproj-gemma-4-26B-A4B-it-Q8_0.gguf
sleep-idle-seconds = 600
;その他1項目

[gemma-4-E4B-it-Q8_0]
model = /opt/models/gemma-4-E4B-it-Q8_0.gguf
mmproj = /opt/models/mmproj-gemma-4-E4B-it-Q8_0.gguf
sleep-idle-seconds = 300
;その他2項目

せっかくなのでちょっと凝ってみました。実際はもっと細かいんですけどね。

  • 一番上[*]
    共通設定。この先の個別セクションで省略したいか上書きするデフォルト値を入れる。
    コンテキストとかはここに入れておかないと、指定忘れた時に限界まで使おうとするので注意

  • その他[モデル名]
    モデルごとの設定
    最低限モデルファイルパスがいる。ビジョンならここでエンコーダーを指定すればビジョンも可能になる。
    また、思考のON/OFFやドラフト、コンテキストなどよく切り替えたい設定もここで行う
    特にメモリに直結するKVキャッシュ関連やコンテキスト長、スロット数などの設定をしていきたいところ。

Rcat999が使用している完全なiniファイルの例

末尾の特典をご覧ください


まとめ

今回はllama.cppで複数モデルをホストする方法をまとめました。
フォルダ指定だけでもなかなか便利だったのですが、設定ファイルにアップグレードすることで、かなり細かく制御が効くようになりました。

それではまたお会いしましょう


リンク集

感想投稿フォーム

コメントは公開で恥ずかしい!! Rcatだけに送りたい人向け


ミニPCにLinuxをインストール



特典

ここから先は

2,505字

メンバーシップ ¥ 300 /月

普段の開発のうち、プランに応じて情報やツールのダウンロード情報などが読み放題。 今後はAI対策で画像…

Lv1

¥300 / 月

情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。