この記事は、実際に使って確かめた記録ではありません。この記事は公式の文書や論文を読んでまとめたものです。
3行でいうと
- 公式の入手方法は、ワンライン導入、アプリ、パッケージ管理、ビルド済み実行ファイル、Docker、ソースからのビルドの6つです。
- サーバーは既定で127.0.0.1の8080番で待ち受け、OpenAI互換のAPIとWeb画面が使えます。
- 文脈の長さ(-c)は既定でモデルの値を使い、GPUの割り当て(-ngl)は自動です。
- Ollamaの公式READMEは、対応するバックエンドとしてllama.cppを挙げています。
先に結論
llama.cppは、「モデルのファイル(GGUF形式)を1つ用意して、1コマンドで動かす」ための道具です。公式のREADMEが掲げる目標は、最小限の準備で、幅広い機器の上で高い性能の推論を行うことです。
見立てです。モデルの管理や自動の面倒見まで任せたい人にはOllamaやLM Studioが楽で、設定を一つずつ自分で決めたい人、サーバーとして細かく調整したい人にはllama.cppが向くと思います。どちらが速いかは、今回の資料からは言えません。
前提:言葉の整理
- llama.cpp:C/C++で書かれた、AIモデルを動かすためのプログラム群です。ライセンスはMITです。
- 推論:学習済みのモデルに文章を入れて、答えを出させることです。
- GGUF:llama.cppが読むモデルのファイル形式です。公式のドキュメントでは、重み、トークナイザー(文章を部品に分ける辞書)、付随情報を、1つのファイルにまとめたものと説明されています。
- 量子化:数字の精度を落として、ファイルとメモリを小さくする方法です。READMEは、1.5ビットから8ビットまでの整数量子化に対応するとしています。
- KVキャッシュ:会話の途中の計算結果を置いておく領域です。会話が長いほど大きくなります。
- OpenAI互換API:OpenAIのAPIと同じ書き方で呼べる窓口です。対応しているアプリやライブラリを、そのまま接続できます。
入手:公式が挙げる6つの方法
READMEの「Quick start」とインストールの文書によると、方法は次のとおりです。
- ワンライン導入:
curl -LsSf https://llama.app/install.sh | sh(Windowsはpowershell版)。環境を検出して、最新のllama実行ファイルを入れます。 - アプリ:llama.appから、MacとWindows向けの「Llama」アプリ(メニューバー常駐)を入れる方法です。同サイトは、llama.cppのチームとHugging Faceが作っていると説明し、ダウンロードは約1MBとしています。
- パッケージ管理:Homebrew(
brew install llama.cpp、MacとLinux)、Winget(Windows)、conda-forge、MacPorts、Nix。conda-forgeはCUDA、Vulkan、Apple Metalの版を出している、とあります。 - ビルド済みの実行ファイル:GitHubのリリースページから落とします。
- Docker:公式のイメージがあります。
- ソースからのビルド:CMakeを使います。macOSではMetal(AppleのGPUの仕組み)が既定で有効で、無効にするにはビルド時に
-DGGML_METAL=OFF、実行時に--n-gpu-layers 0と書かれています。
対応する演算の道具(バックエンド)一覧
READMEの表です。Apple Siliconは「first-class citizen(第一級)」と書かれ、ARM NEON、Accelerate、Metalで最適化されている、とあります。
| 道具 | 対象 |
|---|---|
| Metal | Apple Silicon |
| CUDA | NVIDIAのGPU |
| HIP | AMDのGPU |
| Vulkan | 各種GPU |
| SYCL | IntelのGPU |
| OpenCL | Adreno GPU |
| Hexagon | Snapdragon |
| CANN | Ascend NPU |
| MUSA | Moore ThreadsのGPU |
| WebGPU | すべて |
| RPC | すべて(別のマシンの機器を使う) |
READMEには、ほかにBLAS、BLIS、IBM zDNN、OpenVINO(開発中)、VirtGPU、ZenDNNも挙がっています。NVIDIA、AMDなどの機器でどこまで動くかは、機器ごとの文書を見てください。この記事では、確認していません。
コマンド名について
2026年10月8日に読んだ公式資料には、2つの呼び方が混ざっています。
- READMEとllama.appの文書:
llama cli、llama serve(スペースで区切る)。 - サーバーのREADME(tools/server):
llama-server(ハイフンで続ける)。ビルドすると./build/bin/llama-serverにできる、とあります。
llama.appのインストール文書は、「どの方法で入れても同じ道具一式(llama cli、llama serve ほか)が入る」としています。ただ、2つの名前が同じ実行ファイルを指すのかは、資料から断定できません。この記事では、llama-server のREADMEの内容を「サーバーのオプション」として扱い、手元で実行するときは --help で確かめてください。
動かす:公式の最短手順
公式文書の例です。この記事では、実行していません。
# 端末で対話する(初回に Hugging Face から取得、以後はキャッシュ)
llama cli -hf unsloth/gemma-4-E4B-it-GGUF:Q4_K_M
# OpenAI互換のAPIサーバーと Web 画面を立てる
llama serve -hf ggml-org/gemma-4-e4b-it-GGUF:Q4_0
# 手元の GGUF ファイルを使う
llama serve -m my-model.gguf
llama.appのクイックスタートは、Gemma 4 E4Bの4ビット版を「約6GBのメモリ、文脈16kトークン」で動かす例だとしています。サーバーを立てたら、ブラウザで http://localhost:8080 を開くとWeb画面が出ます。
-hf の書き方は、<ユーザー>/<モデル>[:量子化] です。サーバーのREADMEによると、量子化を省くとQ4_K_Mが選ばれ、それがなければリポジトリの最初のファイルになります。画像用のファイル(mmproj)があれば自動で一緒に取得されます。
サーバーの主なオプション
サーバーのREADMEは、オプションの一覧が自動生成されたものだと明記しています。次は、主なものです。
| オプション | 意味 | 既定値 |
|---|---|---|
-m / -hf |
モデルのファイル/Hugging Faceの指定 | なし |
-c, --ctx-size |
文脈の長さ(トークン) | 0(モデルの値) |
-ngl, --gpu-layers |
GPUに置く層の数。数、auto、all |
auto |
-fit |
メモリに収まるよう、未指定の設定を調整 | on |
-fa, --flash-attn |
計算を省メモリ・高速にする方式 | auto |
-np, --parallel |
同時に処理する枠(スロット)の数 | 自動 |
-ctk / -ctv |
KVキャッシュの精度(f16、q8_0、q4_0など) | f16 |
--host / --port |
待ち受けるアドレスと番号 | 127.0.0.1 / 8080 |
--api-key |
APIキーを必須にする | なし |
--embedding |
埋め込み専用で動かす | 無効 |
--reasoning-budget |
考える長さの上限 | -1(無制限) |
--metrics |
監視用の数値を出す | 無効 |
--sleep-idle-seconds |
使われない時間の後にモデルを手放す | -1(無効) |
読み方の補足
- -fit が既定でon:メモリに収まらないとき、文脈の長さなどを自動で下げます。下げる下限(
-fitc)は既定で4096です。-cを指定しない場合、モデルの最大値ではなく、収まる値で始まることがある、と読めます(見立てです)。 - -np と文脈の関係:llama.appの文書は、「各スロットは1つの会話を持ち、文脈は枠のあいだで共有される」と説明し、
-c 16384 -np 4で最大4件の同時処理の例を示しています。OllamaのFAQによると、Ollamaは並列数に応じて文脈が増える作りで、ここは違います。 - 監視の窓口:
/health、/slots(枠の状態)、/metrics(--metricsを付けたとき)があります。 - 待ち受けの安全:既定は自分のPC(127.0.0.1)だけです。
--host 0.0.0.0にすると、同じネットワークの他の機器から届きます。公開するときは--api-keyの設定を検討してください(見立てです)。
使えるAPI
サーバーのREADMEによると、次の窓口があります。
- OpenAI互換:
/v1/chat/completions、/v1/completions、/v1/responses、/v1/embeddings、/v1/models - Anthropicのメッセージ形式の互換:
/v1/messages - 独自:
/completion、/tokenize、/embedding、/reranking(並べ替え)、/infill(コードの穴埋め)
そのほか、READMEは「並列デコード」「連続バッチ処理(複数の依頼を効率よくまとめて処理する)」「JSONの形を指定した出力」「関数呼び出し」「投機的デコード(小さなモデルで先読みして高速化)」「Web画面」を機能として挙げています。
複数のモデルを切り替える(ルーターモード)
サーバーのREADMEによると、モデルを指定せずに起動すると「ルーター」になります。依頼の model の名前に応じて、モデルを必要なときに読み込み、使われないものを手放します。
- モデルの置き場は3つ:キャッシュ、
--models-dirで指す自分のフォルダ、--models-presetで指すINI形式の設定ファイル。 --models-maxは同時に読み込む数で、既定は4(0で無制限)。--no-models-autoloadで、自動の読み込みを止められます。
Ollamaとの違い
llama.cppの文書には、Ollamaとの比較は書かれていません。以下は、Ollamaの公式文書(FAQ、READMEなど)とllama.cppの文書を、並べて読んだものです。
| 観点 | llama.cpp | Ollama |
|---|---|---|
| 位置づけ | 推論の土台。自分でモデルのファイルや設定を指定 | モデルの取得・管理つきのアプリ。READMEは、対応バックエンドとしてllama.cppを挙げる |
| モデルの指定 | GGUFファイル、またはHugging Faceのリポジトリ | ollama pull 等でモデルを管理(置き場は ~/.ollama/models) |
| 既定の文脈 | モデルの値(-c 0)。収まらなければ調整 | 公式文書は、VRAM(GPUのメモリ)の量で変わると説明(24GiB未満は4k、24〜48GiBは32k、48GiB以上は256k)。FAQには「既定は4096」の記述も残る |
| 並列処理 | -np(自動)。文脈は枠で共有 |
OLLAMA_NUM_PARALLEL(既定1)。並列数だけ文脈が増える |
| 複数モデル | ルーターモード(既定で同時4) | 同時に載せる数は OLLAMA_MAX_LOADED_MODELS(GPUの数×3が既定) |
| メモリから手放す | --sleep-idle-seconds(既定は無効) |
既定で5分後(OLLAMA_KEEP_ALIVE) |
| 設定のしかた | コマンドの引数と環境変数(LLAMA_ARG_…) |
環境変数(OLLAMA_…)、/set parameter、Modelfile |
つまり、同じllama.cppの系統でも、既定値の考え方が違います。Ollamaは「メモリに応じて自動で決める」、llama.cppは「引数で指定、足りなければ調整する」です。
なお、Ollamaのmainブランチのソース(llm/llama_server.go)には、llama-serverを起動するときの引数として -c(文脈の長さ×並列数)と -np(並列数)を組み立てる箇所があります。READMEの記述と合わせると、Ollamaはllama.cppのサーバーを内部で使っていると読めます。ただしこの記事ではソースの全体を追っておらず、リリース版でも同じかは確認していません。
選び方の見立て
見立てです。
- まず試す・日常使い:AppleのMacなら、LM StudioやOllama、llama.appのアプリが入口として楽だと思います。
- サーバーとして組み込む・設定を詰める:llama.cppのサーバーが向きます。APIキー、KVキャッシュの精度、スロット数、ルーターモードなど、手元で決められる範囲が広いためです。
- 埋め込みや並べ替え(RAG用)も同じ道具で:
--embeddingと--rerankで、同じサーバーで動かせると文書にあります。
つまずきやすい点
- コマンド名が文書で違う:上のとおり、
llama serveとllama-serverが混在します。--helpが正です。 - 文脈を大きくしすぎる:KVキャッシュの分、メモリが増えます。llama.appの文書は、概算を「層の数×文脈の長さ×KVヘッド数×ヘッド次元×精度」と書いています。
- スロット数を増やして文脈が足りなくなる:文脈が枠で共有されるので、
-np 4なら1つの会話に使える量は小さくなります。 - 0.0.0.0で公開してしまう:認証なしだと、同じネットワークの誰でも使えます。
- GGUF以外のファイルを指す:llama.cppはGGUFを読みます。元の形式のモデルは、変換や、GGUF版の取得が必要です。
気をつけること
- この記事は、実際に使って確かめた記録ではありません。コマンドと数値は、公式の文書の記載です。
- 公式の文書は、更新が速く、コマンド名やオプションが変わります。この記事は、2026年10月8日にmasterブランチのREADMEを読んだ内容です。
- 既定値の説明は、オプション一覧の自動生成の記述によります。実際の動作は
--helpと合わせて確かめてください。 - Ollamaの比較は、Ollamaの文書とソースのmainブランチを読んだものです。リリース版とずれる可能性があります。
- 速度やメモリの実測は、していません。「どちらが速い」とは書いていません。
- 各種モデルのライセンスは、モデルごとに違います。llama.cpp自体はMITです。
- ビルド済み実行ファイルの具体的な名前や、リリースの最新版は、確認していません。
出典
- llama.cpp README(ggml-org、GitHub、2026年10月8日確認)
- LLaMA.cpp HTTP Server(ggml-org、GitHub、2026年10月8日確認)
- Install pre-built version of llama.cpp(ggml-org、GitHub、2026年10月8日確認)
- Build llama.cpp locally(ggml-org、GitHub、2026年10月8日確認)
- llama.cpp tools/cli README(ggml-org、GitHub、2026年10月8日確認)
- llama.app トップ(llama.cppチームとHugging Face、2026年10月8日確認)
- Introduction / Installation / Quickstart(llama.app Docs、2026年10月8日確認)
- Running a server(llama.app Docs、2026年10月8日確認)
- Using the CLI(llama.app Docs、2026年10月8日確認)
- Prefill vs. Decode(llama.app Docs、2026年10月8日確認)
- Ollama README(Ollama、GitHub、2026年10月8日確認)
- Ollama FAQ(Ollama、GitHub、2026年10月8日確認)
- Ollama Context length(Ollama、GitHub、2026年10月8日確認)
- Ollama server/sched.go(Ollama、GitHub、2026年10月8日確認)
- Ollama llm/llama_server.go(Ollama、GitHub、2026年10月8日確認)
- Ollama envconfig/config.go(Ollama、GitHub、2026年10月8日確認)
更新履歴
- 2026年10月25日 書き方を直しました。
- 前:運営者が使っていないと読める書き方 → いま:「この記事は、実際に使って確かめた記録ではありません」。公式の資料を読んでまとめた記事で、使い心地は書いていない、という意味に直した
