llama.cppとは何か、Ollamaから乗り換えるべきか ?
llama.cppは、GGUF形式のモデルをCPUやNVIDIA、AMD、Intel、Apple SiliconのGPUで実行するC/C++の推論エンジンです。Ollama、LM Studio、KoboldCppはいずれもこれを基盤としています。llama-serverを通じて直接使っても、同じハードウェアでモデルが速くなるわけではありません。その代わり、GPUとCPUへの処理の振り分け、コンテキストサイズ、KVキャッシュの量子化など、上位のアプリケーションがユーザーに代わって決めている設定を自分で調整できます。
llama.cppは、CとC++で書かれた推論エンジンです。GGUF形式のモデルをCPU、NVIDIA・AMD・IntelのGPU、そしてMacで実行します。2026年9月20日時点で、ローカルLLMアプリケーションの大半は、このエンジンまたはそのライブラリであるggmlを利用しています。Ollama、LM Studio、KoboldCpp、Janなどがその例です。直接使っても、モデルの実行速度が上がるわけではありません。その代わり、通常は上位のアプリケーションがユーザーに代わって決める設定を、自分で調整できるようになります。
#llama.cpp についての概要
このプロジェクトは 2023 年 3 月に Georgi Gerganov によって開始され、Python や重い依存関係なしに Meta の LLaMA モデルを MacBook で実行するというシンプルな目標を持っていました。MIT ライセンスで公開されています。3 年後、このリポジトリ(ggml-org 組織に移行)は数百のアーキテクチャをサポートし、2023 年 8 月に定義されたファイル形式 GGUF は、量子化モデルの配布における事実上の標準となりました。
この成功を説明する技術的な選択は二つあります。一つ目は量子化です。llama.cppは2〜8ビットに圧縮された重みを使ってモデルを実行できるため、80億パラメータのモデルを16 GBではなく5 GBに収められます。二つ目は、CPUとグラフィックカードで処理を分担することです。モデル全体がVRAMに収まらない場合、一部の層をRAMに残し、残りをGPUに配置します。すべてをGPUに読み込む場合より遅くなりますが、動作します。この機能を提供するエンジンは少数です。
#箱の中身
お使いのマシンで、プライベートかつ無料のChatGPTを1時間で構築 — LM Studio、Ollama、Open WebUI、ご自身のドキュメント、クラウド不要。
- 永久に利用できるオンラインスペース
- PDF + ファイル
- 生涯アップデート
- llama-cli
- コマンドライン用のチャット。モデルや設定を数秒でテストできます。
- llama-server
- OpenAI互換APIと内蔵ウェブインターフェースを備え、ポート8080で動作するHTTPサーバーです。上級ユーザーの大半が常時稼働させているコンポーネントです。
- llama-bench
- 測定ツールです。プロンプトの読み取り速度と生成速度を別々に表示するため、思い込みに惑わされずに2つの設定を比較できます。
- llama-quantize
- フル精度のGGUFファイルを、より軽量な量子化形式(Q4_K_M、Q5_K_M、Q8_0)に変換します。
- llama-server:ローカルの OpenAI 互換 API を構築する手順
- GGUFおよびsafetensors:モデルフォーマットを理解する
- GGUFフォーマットの公式ドキュメント — Hugging Face
#上位レイヤーが追加するもの、隠すもの
Ollama、LM Studio、KoboldCppは、llama.cppが提供しない機能を備えています。モデルカタログ、1コマンドでのダウンロード、インターフェース、モデルの自動読み込みと解放です。その代わり、これらのツールがデフォルト値を設定します。以下の表は性能を比較するものではなく、誰が何を決めるのかを示しています。
| 設定 | llama.cpp単体 | Ollama | LM Studio | KoboldCpp |
|---|---|---|---|---|
| コンテキストのサイズ | -c オプションで自由に設定可能 | デフォルト値は慎重に設定されており、変数またはModelfileで変更可能です。 | モデルごとのスライダー | 起動時のオプション |
| 量子化の選択 | 任意の GGUF ファイル | カタログタグ、デフォルトでQ4 | ダウンロード候補の一覧 | 任意の GGUF ファイル |
| GPUに送られるレイヤー数 | -nglオプション、レイヤー単位 | 自動 | スライダー | 起動時のオプション |
| KVキャッシュの量子化 | オプション -ctk および -ctv | グローバル環境変数 | 高度な設定 | 起動時のオプション |
| API | llama-server、OpenAI互換 | シンプルなAPI+OpenAIとの互換性 | OpenAIと互換性のあるサーバー | シンプルなAPI+OpenAIとの互換性 |
| エンジンの更新 | その日のうちに、コミットごとに | デルタを適用する場合 | デルタを適用する場合 | デルタを適用する場合 |
最後の行は、見た目以上に重要です。新しいモデルアーキテクチャが登場すると、まずllama.cppで対応し、その数日〜数週間後に、それを利用する上位のツールが対応します。モデルの公開された週に試したいなら、llama.cppを使うのが唯一の方法となることもよくあります。
#すべてを変える 4 つの設定
- -ngl (n-gpu-layers)
- VRAMに配置するモデルのレイヤー数。値99は「収まる限りすべて」を意味します。モデルがVRAMを超えている場合は、読み込みが成功するまでこの数を下げてください: CPUに残した各レイヤーは生成を遅くしますが、8トークン/秒で動作するモデルの方が、起動しないモデルより良いです。
- -c (ctx-size)
- 割り当てるコンテキストウィンドウのサイズです。KV キャッシュはそのサイズに応じて大きくなります。8B モデルでは、8,000 トークンから 32,000 トークンに増やすと、数 GB の VRAM が追加で必要になります。モデルが公表している最大値をそのまま割り当てるのではなく、必要な分だけ割り当ててください。
- -fa (flash-attn)
- Flash Attentionを有効にし、メモリ使用量を減らして長いプロンプトの処理を高速化します。KVキャッシュの量子化にも必須です。
- --n-cpu-moe
- MoEモデルの場合、一定数の層のエクスパートをRAMに保持し、残りはGPUに配置します。これにより、16 GBのカードで300億または1200億パラメータのMoEを、実用的な速度で動作させることができます。
- Flash Attention:llama.cpp、Ollama および vLLM で有効にする。
- KV キャッシュの量子化で VRAM を節約
- tensor-splitでモデルを複数のGPUに分散する
- llama-serverの公式ドキュメント(全オプションリスト)
#変更点:--fit が -ngl を自動で設定
長い間、llama.cppのガイドでは、まず-nglを手動で設定するのが定番でした。すべてをGPUに載せるために99を指定し、読み込みに失敗したら試行錯誤しながら値を下げる方法です。今では、この手順は必須ではありません。プロジェクトには、デフォルトで有効な--fitオプションが追加されています。これは、モデルが利用可能なメモリに収まるように、未指定のパラメータ(-nglを含む)を自動調整します。性能が控えめなカードでも、起動に失敗しては-nglを手動で下げるという、よくある繰り返しを避けられます。
#あなたのGPUに適したバックエンドは?
llama.cppは、特定の計算バックエンド向けにコンパイルするか、そのバックエンド向けのビルドをダウンロードして使います。適切な選択は、お使いのハードウェアだけで決まります。この表は、当サイトの90種類の構成データベースにある構成を系統別にまとめたものです。
| あなたのハードウェア | 推奨されるバックエンド | 注記 |
|---|---|---|
| NVIDIA GTX 10〜RTX 50、デスクトップ向けおよびノートPC向け | CUDA | 最も高速で、最も十分にテストされた方法です。 |
| AMD Radeon RX 7000 および RX 9000 | ROCm (HIP) または Vulkan | ROCmは、動作する場合にはより高速です。VulkanはWindowsでも手間なくインストールできます。 |
| AMD Radeon RX 6000シリーズおよびそれ以前 | Vulkan | カードにより ROCm のサポートは部分的または全くありません。 |
| Apple M1 から M5 | Metal | macOSバイナリではデフォルトで有効です。すべての統合メモリが使用可能です。 |
| IntelまたはAMDの内蔵GPU、Intel Arc | VulkanまたはSYCL | 小型モデルにおいてCPUのみを使用する場合と比較した実際の性能向上。 |
| GPU なし | CPU(AVX2、AVX-512、NEON) | どこでも動作します。パラメータ数80億以下のモデルを選んでください。 |
#llama.cppでの当社の測定結果
llama.cppは、すべてのプラットフォームで同じように動作するという理由から、当サイトのベンチマーク環境の基準エンジンです。以下は、Llama 3.1 8BをQ4で使用し、コンテキスト2,048トークン、リクエスト1件、Flash Attention有効という条件で測定した生成速度です。
| マシン | メモリ | Llama 3.1 8B Q4 |
|---|---|---|
| RTX 5090 | 32 GB | 172 tok/s |
| RTX 4090 | 24 GB | 128 tok/s |
| RTX 4070 | 12 GB | 76 tok/s |
| Mac M3 Max | 64 GBのユニファイドメモリ | 64 tok/s |
| RTX 3060 | 12 GB | 44トークン/秒 |
| Ryzen 7 7700、CPUのみ | システムRAM | 7.8 tok/s |
ここから2つのことが読み取れます。まず、RTX 3060とCPUのみの場合には5〜6倍の差があり、エントリークラスのカードでも使用感が変わります。次に、計算エンジンが同じなので、同じマシンでOllamaやLM Studioを使っても、これらの数値はほぼ同じになるでしょう。
#Ollamaを使い続けるか、llama.cppに移行するか
| 次の場合はOllamaまたはLM Studioを使い続けてください… | こんな場合はllama.cppに移行… |
|---|---|
| ドキュメントを読まずにモデルと会話したい | モデルがVRAM容量に収まらず、GPUとCPUへの配分を細かく調整したい場合。 |
| モデルを頻繁に切り替え、内蔵カタログを便利に感じている。 | 今週公開されたアーキテクチャを試したい。 |
| お使いのツール(Open WebUI、エディターの拡張機能)がOllamaのAPIを前提としている場合。 | 長期運用するサーバーを構築し、コンテキストからKVキャッシュまで、すべての設定を自分で制御したい場合。 |
#10分で開始
試すためにコンパイルする必要はありません。リリースごとにWindows、macOS、Linux向けのコンパイル済みバイナリが公開されており、残りの作業はパッケージマネージャーが行います。以下のコマンドは、Hugging Faceから小さなモデルをダウンロードし、http://localhost:8080 でウェブインターフェースを開きます。
カタログからより高性能なモデルを使う場合は、好みの GGUF ファイルを取得し、-m オプションで指定してください。ソースからのコンパイルが役立つのは、特定のバックエンドを有効にする場合や、日々の開発に追随する場合だけです。
#モデル読み込み時のよくあるエラー
llama.cppでのほとんどのトラブルは三つの原因に集約されます。メモリ超過、インストールされたビルドと互換性のないGGUFファイル、または誤ったスペルで入力されたオプションです。コマンドラインに表示されるエラーメッセージは、最後まで読み取れば、ほぼ常にこの三つのうちどれであるかを示しています。閉じて再実行するのではなく、最後までお読みください。
| メッセージまたは症状 | 考えられる原因 | 試してみる |
|---|---|---|
| cudaMalloc failed: out of memory | 指定したコンテキストを含めると、モデルに必要なメモリ量が利用可能なVRAM容量を超えます | -c を減らし、--fit が -ngl を自動調整できるようにするか、または軽量な量子化を選択する |
| unknown model architecture | GGUFファイルは、インストールされたバイナリよりも新しいアーキテクチャを採用しています。 | 公開されている最新版に更新する。新しいアーキテクチャへの対応は、まず llama.cpp に導入されます。 |
| 最新のGPUを備えているにもかかわらず、生成が非常に遅い | すべてのレイヤーが GPU に移されているわけではありません。多くの場合、VRAM の空き容量不足が原因です。 | 読み込み時の出力(「offloaded」の行)を確認し、GPUを使用している他のアプリケーションを閉じる |
| error: invalid argument | コマンドでのオプションの名前変更または誤記 | 短縮形と長い形式のエイリアスを最新の状態で一覧表示する llama-server --help と比較する |
サーバー起動時に表示される読み込みログの行は、一度全文を読んでおく価値があります。実際にGPUに送られたレイヤー数、有効なコンテキストサイズ、使用されるKVキャッシュの種類が分かるためです。うまく動くまで手当たり次第にオプションを追加するより、そのほうが早いことがよくあります。インストール済みのバージョンにも注意してください。llama.cppはナイトリービルドを非常に頻繁に公開しており、お使いのグラフィックスカードやモデル向けの修正がすでに公開されていても、先週インストールしたHomebrewやwingetのパッケージにはまだ含まれていないことがあります。
#FAQ
llama.cppはOllamaよりも速いですか?+
llama.cppを使うには、コンパイルの方法を知っている必要がありますか?+
llama.cpp をグラフィックスカードなしで使用することは可能ですか?+
llama.cppとvLLMの違いは?+
Mac上でllama.cppかMLXか?+
ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。