powered by TechFeed
表示モード
Deep Dive

ローカルLLM速度比較でわかった意外な事実 — エンジンの選択より「設定」が最大63%の差を生む

9月17日、Mozilla.aiが「Benchmarking llama.cpp vs llamafile vs LM Studio vs Ollama: What Moved Throughput」と題した記事を公開した。この記事では、ローカルLLMサーバー4種(llama.cpp、llamafile、LM Studio、Ollama)をMac・Linux・Steam Deckの3環境でベンチマーク比較し、スループットに最も影響した要因について詳しく紹介されている。Mozilla.aiは、Mozillaが支援するAI研究組織で、オープンで信頼できるAIエコシステムの構築を目的としている。今回の比較対象のひとつであるllamafileはMozilla.aiが開発・メンテナンスするプロジェクトであり、LLMを単一の実行可能ファイルとして配布できる形式だ。自らが開発するツールを含めた横断的な比較を公開した点は、透明性という観点で注目に値する。

9月17日、Mozilla.aiが「Benchmarking llama.cpp vs llamafile vs LM Studio vs Ollama: What Moved Throughput」と題した記事を公開した。この記事では、ローカルLLMサーバー4種(llama.cpp、llamafile、LM Studio、Ollama)をMac・Linux・Steam Deckの3環境でベンチマーク比較し、スループットに最も影響した要因について詳しく紹介されている。

Mozilla.aiは、Mozillaが支援するAI研究組織で、オープンで信頼できるAIエコシステムの構築を目的としている。今回の比較対象のひとつであるllamafileはMozilla.aiが開発・メンテナンスするプロジェクトであり、LLMを単一の実行可能ファイルとして配布できる形式だ。自らが開発するツールを含めた横断的な比較を公開した点は、透明性という観点で注目に値する。


最大63%の差を生んだのは「エンジンの選択」ではなく「設定」だった

この検証で最も重要な発見は、4つのサーバーどれを選ぶかよりも、どのようにビルド・設定するかのほうがはるかに大きな性能差を生んだ点だ。

具体的に出た数字を挙げる:

  • llamafileのCUDAバックエンドでCUDA graphsを有効化したところ、L40S環境でのデコード速度が0.8Bモデルで**+16.8%、9Bで+6.5%、27Bで+4.3%**向上した。それ以前のshippedビルドはCUDA graphsなしでコンパイルされていた。
  • Steam Deck(Vulkan)のシェーダーコンパイラを更新(Ubuntu 24.04付属の shaderc 2023.8 → LunarG Vulkan SDK 2026.03)することで、同一コミットのllamafileでプロンプト処理速度が0.8Bモデルで**+25.9%、9Bモデルで+63.3%**改善した。
  • Speculative decoding(投機的デコーディング)のドラフト長は、Metalでは2トークンが最適だが、CUDAでは4トークンが最大**+16%**優位になる。Metal環境でOllamaのデフォルト(ドラフト4)を使った場合、27Bモデルのデコードが投機デコードなし(23.4 tok/s)を下回り、約15 tok/sまで落ちた。

4つのサーバーはいずれも内部でllama.cppを使い、同じGGUF形式のモデルファイルを処理している。重みと環境を揃えると、プロンプト処理速度は互いに数%以内に収まる。差が出るのはビルドフラグ、シェーダーツールチェーン、デコード設定の組み合わせだ。


テスト環境と方法

環境 ハードウェア OS テストモデル
Mac Studio M4 Max、64GB統合メモリ macOS Tahoe 26.6.2 Qwen3.5 0.8B / 9B / 27B
Steam Deck AMD Van Gogh APU、16GB共有メモリ SteamOS 3.8.16 Qwen3.5 0.8B / 9B
Linux L40S Intel Xeon Gold 6338、NVIDIA L40S 48GB VRAM Ubuntu 24.04.3 LTS Qwen3.5 0.8B / 9B / 27B

ソフトウェアは3台で統一:llama.cpp b10441、llamafile 0.10.6、Ollama 0.34.0、LM Studio runtime 2.28.2。

測定は各サーバーを再起動してKVキャッシュをコールドな状態からスタートし、15回実行(1回目はウォームアップ除外、最速2・最遅2を除いた中央10回の平均)。計測値はプロンプト処理速度(PP)トークン生成速度(TG)の2種類。


環境別の結果

Linux / NVIDIA L40S

プロンプト処理は4サーバー間でほぼ差がない。差が出るのはトークン生成で、llama.cppとllamafileがリードし、OllamaはL40S環境の27Bで首位に立つ。

デコード速度の差の大半は、GPUの処理差ではなくホスト側の固定オーバーヘッド(トークンあたり約1.8ms)と推定されている。速いモデルでは67%差に見え、遅いモデルでは18%差に見えるが、絶対値はほぼ一定だ。

Mac Studio(Apple M4 Max / Metal)

プロンプト処理はllama.cpp・llamafile・Ollamaが±3%以内に収まる。LM Studioは小さいモデルで固定コストと思われる遅延がある。

Apple SiliconではOllamaとLM StudioがGGUFではなく**MLX**をデフォルトで使う点にも触れている。MLXはAppleが開発したApple Silicon向けの機械学習フレームワークで、GGUFとは異なる独自の実行パスを持つ。27Bモデルで比較すると、MLXはGGUFに対してプロンプト処理で約10%高速。ただし、OllamaのMLXランナーは自動でSpeculative decodingを有効化し、LM StudioのMLXはしないため、両者のトークン生成速度は直接比較できない。なお、llama.cppとllamafileにはMLXパスがない。

Steam Deck(AMD Van Gogh APU / Vulkan)

最も大きな差が出た環境で、その原因はほぼシェーダーコンパイラのバージョン差だ。llama.cppとllamafileがリード、Ollamaがその下、LM Studioが最も遅く、特に9Bのトークン生成で差が顕著だった。

LM Studioの遅さはプリビルドで配布されるランタイムに起因しており、ユーザー側での修正ができない。


プロンプト処理速度カーブが環境で異なる理由

L40Sではプロンプトが長くなるほどスループットが上昇し、Macでは上昇後に下降、Steam Deckでは一貫して下降する。この違いは、Prefill時間を t(n) = c + a·n + b·n²(固定コスト+線形項+二次のAttentionコスト)でモデル化すると説明できる。

平易に言い換えると、「プロンプトが長くなるほどトークンあたりの処理時間が増える二次的なコスト(Attentionの計算量)がいつ支配的になるか」がハードウェアによって異なる、ということだ。スループットのピーク点 n* = √(c/b) がL40SではApproximately 27,000トークン(テスト範囲外)、Macでは約2,800トークン、Steam Deckでは約2,000トークンにある。つまりL40Sは非常に長いプロンプトでも速度が落ちにくく、Steam DeckはプロンプトがわずかでもAttentionコストの影響を受けやすい、という特性の違いとして読み取れる。


実践的なアドバイス

Mozilla.aiが記事内でまとめた実践的な指針は以下の通りだ:

  • どのサーバーを使うかよりも、どのようにビルドされたかを確認する。 同じエンジンでも2通りのコンパイルでSteam Deckでは1.6倍の差が出た。
  • Speculative decodingのドラフト長はプラットフォームに合わせる。 MetalとCUDAで最適値が逆転する。
  • プロンプト処理とトークン生成を分けて評価する。 長文要約ではPPが支配的、チャットやコード補完ではTGが支配的になる。
  • 実行中の他プロセスに注意する。 バックグラウンドの負荷が結果に影響する。

詳細はBenchmarking llama.cpp vs llamafile vs LM Studio vs Ollama: What Moved Throughputを参照していただきたい。