はじめに
ローカルでLLMを動かす記事が目立ってきたのですが, 私の知見をまとめておこうと思います.
前提としてここはQiitaで, 対象読者はエンジニアであることとします.
Ollamaを使わない
理由はいくつかありますし, 時間と共に改善するかもしれません.
改善したとしても特に選択する理由はないと思います.
何故ならエンジニアにとって, 大した利点がないからです.
もちろん, エンジニア以外のネットワークって何?とかギフハブって闇サイト何?という方には簡便に動かせて良い選択肢かもしれません.
- 開発の動きが遅い
- 仕方ない面もあるのですが, 脆弱性の修正が早いとは言えない
- 最近(2026/06/18)推論バックエンドをllama.cppそのままに変えたらしいが, 自作だったためモデル対応が遅く, 脆弱性を生んでいた
- WindowsインストーラではCドライブからインストール場所を変えることができない
- コマンドラインからできるらしい
- OllamaはLMStudioとllama.cppの中間で, GUIで簡単に使いたいならLMStudioでいいよね?となる
- LMStudioは昨年から商用利用もできる
llama.cpp
インストーラはないし, CLIしかないが, エンジニアにとっては抵抗がないと思います.
ビルド済みバイナリ
llama.cppリリースページにビルド済みバイナリがある.
Huaweiのプラットフォームなんて知らねぇよってぐらい, ひととおりの環境はある.
LinuxはUbuntuとあるが, やっていること的にディストリビューション中立だと思う.
好きな場所に解凍してください. 勝手にOS用のSSDを圧迫したりしないです. システムディレクトリやレジストリを汚すこともありません.
ビルド
ソースコードからビルドする方法を説明します.
先ず, 必要なアプリケーションをインストールします.
コンパイラがMSVC, ClangのどちらでもCMakeは必要です.
次に, リポジトリをクローンします.
$ git clone https://github.com/ggml-org/llama.cpp.git
開発中のはちょっと…という方は,

右にある最新のリリースを次のように指定すると良いでしょう.
$ git clone -b b9682 https://github.com/ggml-org/llama.cpp.git
そのまま, llama.cppのディレクトリに入ります.
$ cd llama.cpp
コンパイラにMSVCを使う
Visual Studioをインストールします. Professional以上なら商用利用できます, Communityは商用利用に条件があるので気をつけてください.
大丈夫なの?というライターが特に某ITニュースサイトに沢山いるので気を付けましょう.
$ cmake -B build -DCMAKE_INSTALL_PREFIX="X:\llama.cpp"
$ cmake --build build --config Release
$ cmake --install build
CUDAを使いたい場合は次のようにしましょう.
$ cmake -B build -DGGML_CUDA=ON -DCMAKE_INSTALL_PREFIX="X:\llama.cpp"
成功すると, X:\llama.cpp\binディレクトリ内は次のようになります.

コンパイラにClangを使う
LLVMをインストールします.
さらに, Ninjaもインストールします, インストーラはないのでパスを通してください. パスを通すは理解できるものとします.
$ cmake -G"Ninja" -B build -DCMAKE_INSTALL_PREFIX="X:\llama.cpp" -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
$ cmake --build build --config Release
$ cmake --install build
CUDAを使いたい場合は同じく-DGGML_CUDA=ONを追加します.
動かす
llama-serverを動かす例を示します.
LLMはGemma4を例にしてみます. QAT使用とMTP対応のモデルを用意します.
各用語の説明
- MTP(Multiple Token Prediction)
- 軽量なドラフトモデルで複数のトークンを精製します.
ターゲットモデルがバッチでドラフトモデルのトークンの検証を行い, 妥当であるならば採用します.
更にターゲットモデルは自身のトークン生成も同時に行います.
- 軽量なドラフトモデルで複数のトークンを精製します.
- QAT(Quantization Aware Training)
- 学習時から量子化を考慮することで, 量子化による劣化を抑制します.
次のように配置しました。
X
├── llama.cpp
│ └── bin
└── models
│ ├── gemma-4-31B_q4_0-it.gguf
│ └── gemma-4-31b-it-qat-q4_0-assistant.gguf
└── run_gemma_mtp.bat
run_gemma_mtp.batファイルの中身は次のようになります.
.\llama.cpp\bin\llama-server -c 131072 -ngl 99 -ctk q8_0 -ctv q8_0 -m .\models\gemma-4-31B_q4_0-it.gguf -md .\models\gemma-4-31b-it-qat-q4_0-assistant.gguf -ctkd q8_0 -ctvd q8_0 -ngld 0 -ot ".*ffn_.*_(up|down|gate|norm).*=CPU" --no-mmap --spec-type draft-mtp --spec-default --jinja
http://127.0.0.1:8080に簡易チャットが立ち上がっているので試してみましょう.
また, http://127.0.0.1:8080/v1にはOpenAI互換APIサーバが立ち上がっているので, OpenCodeなどと連携してみましょう。
オプションについて
| 名前 | 説明 |
|---|---|
| -c | 入力コンテキストサイズ. 大きいほど長文を扱えるが, VRAM消費が多くなります. |
| -ngl | VRAMにロードするレイヤー数を指定します. 後述する override-tensor(ot)と合わせて使うため, 全部載せ(99)に設定します. |
| -ctk | Keyキャッシュを量子化します. |
| -ctv | Valueキャッシュを量子化します. |
| -m | メインのモデルを指定します. |
| -md | ドラフトモデルを指定します. |
| -ctkd | ドラフトモデルのKeyキャッシュを量子化します. |
| -ctvd | ドラフトモデルのValueキャッシュを量子化します. |
| -ngld | ドラフトモデルのVRAMにロードするレイヤー数を指定します. |
| -ot | "正規表現=ユニット"の書式でレイヤー名でどこにパラメータをロードするか指定します. ".ffn_._(up|down|gate|norm).*=CPU"は, FFN(フィードフォワードネットワーク)レイヤーをメインメモリに置いてCPU計算するという意味になります. CPUとGPUで得意な計算が異なっているため, CPUが得意なレイヤーを選択してメインメモリに置くことで, VRAM消費を抑制しながら速度低下も抑制します. |
| --no-mmap | メインメモリに常駐させて, ページフォールトによる遅延を防ぎます. |
| --spec-type |
draft-mtpを指定し, MTPによる高速化を図ります. |
| --spec-default | 細かい設定もできるのですが, 深く理解していないと大きく性能劣化するので, デフォルトのままにします. |
| --jinja | 多くのLLMがJinjaライブラリのテンプレートフォーマットを採用しているので, 指定します. |
まとめ
私は, Ollamaがそう簡単とも思えませんし, 手軽さを求めるならLMSturioを使えばいいし, エンジニアならllama.cppは充分簡単だと思います.
余計な事をしないか, 細部まで面倒見てくれるか, 中途半端は必要ないと思っています.