見出し画像

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からローカルに話しかけたい」という願望、ありませんか?

クロ助(ClaudeDesktop)からllama-serverへ話しかけてもらいました!

実はllama-serverはOpenAI互換APIを喋れるので、わざわざコミュニティ製MCPを入れなくても、Claudeのブラウザから`fetch()`で直接叩けば会話できてしまいます。

やったこと

  1. Claude Desktopの「Claude in Chrome」機能を起動

  2. ローカルWebUI(`http://localhost:8081`)を開いた状態でClaudeに依頼

  3. ClaudeがJavaScriptの`fetch()`でローカルLLM(Gemma 4 E4B)に質問送信

  4. 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

いいなと思ったら応援しよう!

YaroTech|生成AIの傾奇者 記事がお役に立てたなら嬉しいです! いただいたチップは、新しいMCPツールの検証や、より深い実践実験の資金として大切に使わせていただきます。 あなたの応援が次の「AI活用の感動」を生み出す原動力になります✨ 一緒に羽ばたき続けましょう!