llama.cppルーターモードで5モデル一気比較!Claudeからローカルに話しかけてみた
こんにちは!YaroTechです。
半年前、ラズパイで0.5 tok/sのローカルLLMにヒィヒィ言っていた私。今や同じデスクトップでローカルLLM 5モデルを1台のサーバーで切り替えながら動かし、しかもClaudeのブラウザから直接ローカルLLMに話しかけるところまで来てしまいました。
今日は3つのテーマを一気にお届けします。
5モデル比較テスト:同じ3問をDense 4B〜MoE 35Bまで投げて速度&品質を実測
llama.cppルーターモード:1台のllama-serverで複数モデルをWebUIから切り替え
Claude→ローカルLLM API連携:Claudeのfetchから直接ローカルLLMと会話成功
そして検証中に見えてきた「tok/sの罠」と、Day269で1.8 tok/sしか出なかったLLM-jp-4 8Bが30 tok/s(16倍速)でリベンジしたストーリーも合わせてご紹介します。
本日の記事はローカルLLM関連の用語が連発しているため、先に下記用語集をチェックすることをおすすめします!できるだけ、イメージしやすい例えを意識してまとめてみました。
※見出し画像のプロンプトは一番下におまけで公開中!
🖥️ 実行環境
$$
\begin{array}{|l|l|} \hline
\text{項目} & \text{内容} \\ \hline
\text{検証PC} & \text{メインPC(デスクトップ)} \\ \hline
\text{CPU} & \text{Intel Core i9-12900T(16コア24スレッド)} \\ \hline
\text{RAM} & \text{128GB} \\ \hline
\text{GPU} & \text{NVIDIA GeForce RTX 3050(8GB VRAM)} \\ \hline
\text{CUDA} & \text{13.1} \\ \hline
\text{OS} & \text{Windows 11 Pro} \\ \hline
\text{Python} & \text{3.12.10} \\ \hline
\text{推論エンジン} & \text{llama.cpp b8955(CUDA 13.1版)} \\ \hline
\text{担当AI} & \text{クロ助(Claude Desktop)} \\ \hline
\end{array}
$$
🎯 この記事で得られること
ローカルLLM 5モデル(Dense 4B〜MoE 35B)の実測速度・品質比較
「生成速度(tok/s)が速い=体感速度が速い」とは限らない理由
llama-server 1台で複数モデルを切り替える「ルーターモード」の設定方法
Claude(ブラウザ側)からローカルLLMのOpenAI互換APIを直接呼び出す方法
LLM-jp-4 8Bを1.8 tok/s → 30 tok/s(16倍速)にしたリベンジの全貌
🛠️ 準備:llama.cpp更新と5モデルダウンロード
まずはllama.cppを最新版(b8955 / CUDA 13.1)に更新します。旧版(b8683)はNSSMでLLM-jp-4 32B-A3Bが常駐サービス化されているのでそのまま温存し、新版は別フォルダ(`D:\AITools\llama.cpp_b8955`)に配置しました。
今回テストするモデルはこの5つ。
$$
\begin{array}{|l|l|l|l|l|} \hline
\text{No} & \text{モデル} & \text{構造} & \text{サイズ} & \text{想定用途} \\ \hline
\text{①} & \text{Qwen3.5-4B} & \text{Dense 4B} & \text{2.74GB} & \text{軽量・万能} \\ \hline
\text{②} & \text{Gemma 4 E4B} & \text{Dense 4B} & \text{4.98GB} & \text{レスポンス重視} \\ \hline
\text{③} & \text{LLM-jp-4 8B} & \text{Dense 8B} & \text{5.30GB} & \text{日本語特化} \\ \hline
\text{④} & \text{Qwen3.5-35B-A3B} & \text{MoE 35B/3B} & \text{22.0GB} & \text{じっくり品質} \\ \hline
\text{⑤} & \text{Gemma 4 26B-A4B} & \text{MoE 26B/4B} & \text{16.9GB} & \text{じっくり品質} \\ \hline
\end{array}
$$
すべて`huggingface-cli download`で`unsloth/`系または`mmnga-o/`系のGGUFを取得し、`D:\AITools\models`配下に配置しました。
🚦 ルーターモード:1台のllama-serverで5モデル切り替え
llama.cppにはpresets.iniファイルでモデル設定をまとめておき、WebUIから切り替えられる「ルーターモード」があります。これがめちゃくちゃ便利でした。
presets.ini の例:
[qwen3.5-4b]
model = D:/AITools/models/qwen3.5-4b/Qwen3.5-4B-Q4_K_M.gguf
ngl = 99
ctx-size = 4096
[gemma4-e4b]
model = D:/AITools/models/gemma4-e4b/gemma-4-E4B-it-Q4_K_M.gguf
ngl = 99
ctx-size = 4096
[llm-jp-4-8b]
model = D:/AITools/models/llm-jp-4-8b-thinking-gguf/llm-jp-4-8b-thinking-Q4_K_M.gguf
ngl = 99
ctx-size = 4096
[qwen3.5-35b-a3b]
model = D:/AITools/models/qwen3.5-35b-a3b/Qwen3.5-35B-A3B-Q4_K_M.gguf
ngl = 15
ctx-size = 4096
[gemma4-26b-a4b]
model = D:/AITools/models/gemma4-26b-a4b/gemma-4-26B-A4B-it-UD-Q4_K_M.gguf
ngl = 20
ctx-size = 4096ポイントは`ngl`(GPUオフロード層数)をモデルごとに変えていること。Dense 4Bは全部GPU(`ngl=99`)に載せ、MoE 26B/35Bは部分オフロード(`ngl=15-20`)にしてVRAM 8GBに収めています。
起動コマンド:
D:\AITools\llama.cpp_b8955\llama-server.exe `
--models-preset D:\AITools\models\presets.ini `
--host 0.0.0.0 --port 8081 --jinja -c 4096ポート8080 はNSSMで常駐させているLLM-jp-4 32B-A3B(n8nワークフロー依存)が占有しているので、テスト用はポート8081を使い分けています。
起動後、ブラウザで `http://localhost:8081` を開くとWebUIのドロップダウンから5モデルを選択できます。各モデル横の電源ボタンでロード/アンロードを制御でき、メモリの取り合いを発生させずに済むのが嬉しいポイントです。
APIから呼ぶときは`model`フィールドにセクション名を入れるだけ。
curl http://localhost:8081/v1/chat/completions `
-H "Content-Type: application/json" `
-d '{"model": "gemma4-e4b", "messages": [{"role": "user", "content": "こんにちは"}]}'これだけで「5モデル切り替え可能なローカルAPIサーバー」の完成です。
📊 5モデル比較テスト:同じ3問を投げてみた
5モデルすべてに以下の3問を同条件で投げ、tok/s・トークン数・回答時間・品質を測りました。
① 日本語:「日本の四季について3文で説明してください」
② コーディング:「Pythonでフィボナッチ数列を出力するコードを書いて」
③ 推論:「100人が参加するトーナメントで優勝者を決めるには何試合必要?」
全モデル比較表
$$
\begin{array}{|l|l|l|l|l|l|l|l|l|} \hline
\text{No} & \text{モデル} & \text{構造} & \text{サイズ} & \text{tok/s} & \text{日本語} & \text{コーディング} & \text{推論} & \text{全問正解} \\ \hline
\text{1} & \text{Qwen3.5-4B} & \text{Dense 4B} & \text{2.74GB} & \text{~50} & \text{1分16秒} & \text{32秒} & \text{19秒} & \text{✅} \\ \hline
\text{2} & \text{Gemma 4 E4B} & \text{Dense 4B} & \text{4.98GB} & \text{~48} & \text{6.8秒} & \text{35秒} & \text{22秒} & \text{✅} \\ \hline
\text{3} & \text{LLM-jp-4 8B} & \text{Dense 8B} & \text{5.30GB} & \text{~27} & \text{14秒} & \text{28秒} & \text{18秒} & \text{✅} \\ \hline
\text{4} & \text{Qwen3.5-35B} & \text{MoE 35B/3B} & \text{22.0GB} & \text{~10} & \text{1分21秒} & \text{32秒} & \text{1分41秒} & \text{✅} \\ \hline
\text{5} & \text{Gemma 4 26B} & \text{MoE 26B/4B} & \text{16.9GB} & \text{~6} & \text{2分12秒} & \text{3分8秒} & \text{1分57秒} & \text{✅} \\ \hline
\end{array}
$$
全モデルが3問全問正解。RTX 3050 8GBのVRAMでもMoE 35Bまで動くという事実が、まずすごい時代だなと感じます。
⚠️ tok/sの罠:生成速度 ≠ 体感速度
今回の最大の発見はこれでした。
Qwen3.5-4B(50 tok/s)とGemma 4 E4B(48 tok/s)は生成速度ほぼ同等。なのに日本語の四季テストでは…
Qwen3.5-4B:1分16秒(思考トークン3,888生成)
Gemma 4 E4B:6.8秒(出力トークン335)
約11倍の体感速度差です。
原因はシンプルで、Qwenはthinkingモードで「考える」トークンを大量生成してから本回答を出すのに対し、Gemmaは簡潔に回答するスタイルだったから。tok/sだけ見ていると「Qwenの方が速い」と思いがちですが、ユーザーが画面の前で待つ時間=(生成トークン数) ÷ (tok/s) なので、出力量が10倍違うと体感は10倍変わります。
$$
\begin{array}{|l|l|l|l|} \hline
\text{モデル} & \text{tok/s(生成速度)} & \text{出力トークン} & \text{体感速度} \\ \hline
\text{Qwen3.5-4B} & \text{50.5(1位)} & \text{3888} & \text{1分16秒(遅い)} \\ \hline
\text{Gemma 4 E4B} & \text{49.6} & \text{335(最少)} & \text{6.8秒(最速)} \\ \hline
\end{array}
$$
教訓:ローカルLLMのベンチマークではtok/sと出力トークン数の両方を見ましょう。「tok/sが速いモデル=体感速度が速い」とは限りません。
🔥 LLM-jp-4 8Bリベンジ:1.8 tok/s → 30 tok/s(16倍速)
Day269の検証では、LLM-jp-4 8BをTransformers + CPU推論で動かして1.8 tok/sしか出ず、「品質はいいけど実用は厳しい」という結論になっていました。
GGUF自力変換も独自トークナイザーが原因で失敗。「8Bは当面お預け」と諦めていたところに、mmnga-o氏が独自にchat-templateカスタマイズ済みのGGUFを公開してくれていたのです。
Day291ではこれを使い、llama.cpp b8955 + RTX 3050(ngl=99)で再検証しました。
$$
\begin{array}{|l|l|l|} \hline
\text{検証日} & \text{環境} & \text{速度} \\ \hline
\text{Day269} & \text{Transformers CPU推論} & \text{1.8 tok/s 🐢} \\ \hline
\text{Day291} & \text{llama.cpp GGUF + GPU} & \text{23-30 tok/s ⚡(約16倍速)} \\ \hline
\end{array}
$$
LLM-jp-4 8Bの結果:
$$
\begin{array}{|l|l|l|l|l|} \hline
\text{テスト} & \text{tok/s} & \text{トークン} & \text{時間} & \text{品質コメント} \\ \hline
\text{① 日本語(四季)} & \text{29.9} & \text{448} & \text{14秒} & \text{✅ 緯度情報まで含めた解説} \\ \hline
\text{② コーディング} & \text{27.26} & \text{778} & \text{28秒} & \text{✅ 関数版+1行版+再帰版+日本語コメント} \\ \hline
\text{③ 推論(99試合)} & \text{23.52} & \text{443} & \text{18秒} & \text{✅ LaTeX数式+偶奇のbye補足} \\ \hline
\end{array}
$$
特にコーディングテストでは5モデル中もっとも丁寧で読みやすい回答を返してくれました。日本語コメント、複数の実装パターン、解説表まで自発的に作ってくる姿勢は、さすが日本語特化モデル。「日本語でコードを書いてもらいたい」用途のチャンピオンだと思います。
補足:`mmnga-o`版GGUFは独自にchat-template対応されているので、無印`mmnga`版より動作が安定する印象でした。
🤝 Claude → ローカルLLM API連携:MCPなしで会話成功
「Claudeからローカルに話しかけたい」という願望、ありませんか?

実はllama-serverはOpenAI互換APIを喋れるので、わざわざコミュニティ製MCPを入れなくても、Claudeのブラウザから`fetch()`で直接叩けば会話できてしまいます。
やったこと:
Claude Desktopの「Claude in Chrome」機能を起動
ローカルWebUI(`http://localhost:8081`)を開いた状態でClaudeに依頼
ClaudeがJavaScriptの`fetch()`でローカルLLM(Gemma 4 E4B)に質問送信
Gemma 4 E4Bが回答 → WebUI上に表示される様子をスクショで確認
Claude側のリクエスト例(中身はOpenAI互換):
fetch("http://localhost:8081/v1/chat/completions", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
model: "gemma4-e4b",
messages: [
{ role: "user", content: "Claudeから質問です。あなたは何のモデル?" }
]
})
})`model`フィールドを`llm-jp-4-8b`や`qwen3.5-35b-a3b`に変えるだけで話し相手のローカルLLMが切り替わるのがルーターモードのうれしいところ。
これでローカルLLMへの3つの入り口が揃いました:
WebUI(`http://localhost:8081`):人間が手動で使う
fetch / OpenAI SDK:AI(Claudeなど)が使う
PowerShell / curl:自動化スクリプトが使う
PowerShellから`Invoke-RestMethod`で日本語を送るときは、UTF-8エンコーディングを明示する必要がある点だけ注意です(`[System.Text.Encoding]::UTF8.GetBytes()`を経由)。
💡 用途別おすすめ:5モデルの使い分け方
最後に、この5モデルをどう使い分けるかをまとめます。
文章作成(レスポンス重視):Gemma 4 E4B
6.8秒で簡潔に回答してくれるので、チャットUIでサクサク使いたい用途に最適。
コーディング:LLM-jp-4 8B
28秒で日本語コメント付きの丁寧なコードを返してくれる。日本語でレビューしたいときの相棒。
推論・論理問題:Qwen3.5-4B または LLM-jp-4 8B
18-19秒で正解。thinkingモードで「考えてから答える」スタイルが論理問題には向いています。
じっくり品質重視:Qwen3.5-35B-A3B
MoEの中ではもっとも速く(10 tok/s)、品質も良好。VRAMにそこまで載らないので「待てる時間がある時」用。
Gemma 4 26B-A4B:5モデル中最遅(6 tok/s)でしたが、回答品質はトップクラス。「どうしてもGemmaでじっくり考えてほしい」というときに。
ちなみにMoEモデルは部分オフロードでもCPU 78%・GPU 93%のフル稼働でRTX 3050 8GBには荷が重い印象。次世代GPU(VRAM 16GB以上)が欲しくなりました。
🔗 関連記事
今回の内容に関連する過去記事もぜひご覧ください:
📝 まとめ
5モデル一気比較:Dense 4B〜MoE 35BまでRTX 3050 8GBで全問正解
tok/sの罠:Qwen3.5-4B(50 tok/s)vs Gemma 4 E4B(48 tok/s)でも体感速度は11倍違う
LLM-jp-4 8Bリベンジ:mmnga-o版GGUF + llama.cpp b8955で1.8→30 tok/s(16倍速)を達成
ルーターモード:presets.iniで5モデル定義 → WebUIから切り替え+API経由でも`model`フィールドだけで切替
Claude → ローカルLLM API連携:MCPなしでもfetch経由でGemma 4 E4Bと会話成功
「ローカルLLMはまだまだ実用じゃない」と思っていた人ほど、b8955時代の進化を一度体験してみてほしいです。ローカルでこれだけ動く時代になりました。
🚀 次回予告
ダウンロード中のチャレンジ枠MiniMax M2.7(230B/10B、約101GB)の実測テストをお届け予定です。さすがに101GBはRAM 128GBでもギリギリ。動くのか、動かないのか…乞うご期待!
🎨 おまけ:見出し画像作成プロンプト
今日の見出し画像のベースはジミー(Gemini)に下記プロンプトで作成してもらいました!:
詳細なアニメの美意識の画像を作成してください。表情豊かな瞳、なめらかな網掛けセルの色使い、はっきりした線画を使用します。アニメのシーンに典型的な身ぶりと雰囲気で、心情と登場人物の存在を強調してください。
下記条件のnote見出し画像をサイズは横長で作成してください。サイズは必ず横長で作成してください。
## 🎨 見出し画像案
### デザインコンセプト
- **背景**: 深い青→紫のグラデーション(夜のサーバールーム風、テクノロジー感)
- **メインビジュアル**:
- 中央にクロ助(Claude Desktop擬人化キャラ)
- 20代前半女性、ダークブラウンのウェーブがかったセミロングヘア
- 丸い細フレームの眼鏡
- クリーム色のケーブルニットセーター、ブラウンのフレアミディスカート
- クロ助は大きなモニター画面の前に座り、5つのローカルLLMアイコン(吹き出し)と楽しそうに会話している様子
- 画面にはllama.cppのWebUI(モデル切り替えドロップダウン)が映っている
- 5つの吹き出しには「Qwen3.5」「Gemma 4」「LLM-jp-4」「Qwen 35B」「Gemma 26B」のラベル
- **テキスト要素**:
- 上部: 「llama.cpp ルーターモード」(大きく・太字・白色)
- 中央: 「5モデル一気比較!」(中サイズ・黄色・強調)
- 下部: 「Claude × ローカルLLM」(小サイズ・白色)
- **装飾**:
- 吹き出しに矢印、tok/s数値(50, 48, 30, 10, 6)を小さく散りばめる
- キラキラエフェクトで「テクノロジーと親しみやすさの両立」を演出
### 作成手順
1. スライドサイズ(1536×1024px)の横長フォーマット
2. 背景に深い青→紫のグラデーションを設定
3. 中央にクロ助を配置(モニター画面の前で楽しそうな表情)
4. 周囲に5つのローカルLLM吹き出しアイコンを配置
5. テキストを3段構成で追加:
- 上部: 「llama.cpp ルーターモード」(48pt、太字、白色)
- 中央: 「5モデル一気比較!」(36pt、黄色、強調)
- 下部: 「Claude × ローカルLLM」(24pt、白色)
6. tok/s数値や矢印などの装飾を追加
7. 下部中央寄りに「YaroTech」のロゴを12ptで控えめに配置
8. 全体のバランスを確認して完成
※テクノロジー(サーバー・モニター)と親しみやすさ(クロ助の表情)を両立
※ローカルLLMたちと会話している楽しい雰囲気を演出
※「Claudeからローカルに話しかけてみた」というテーマが伝わる構図#YaroTech #ローカルLLM #llamacpp #ルーターモード #LLMjp4 #Qwen #Gemma #ClaudeDesktop #生成AI #MoE
いいなと思ったら応援しよう!
記事がお役に立てたなら嬉しいです!
いただいたチップは、新しいMCPツールの検証や、より深い実践実験の資金として大切に使わせていただきます。
あなたの応援が次の「AI活用の感動」を生み出す原動力になります✨
一緒に羽ばたき続けましょう!