0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LLMをローカルで動かす

0
Posted at

はじめに

ローカルで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

開発中のはちょっと…という方は,
{CA4257E6-6335-46E8-914D-8F9F49C27664}.png
右にある最新のリリースを次のように指定すると良いでしょう.

$ 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ディレクトリ内は次のようになります.
{6E2B2C47-02A6-44A6-9AC3-2399FD6FADE6}.png

コンパイラに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ファイルの中身は次のようになります.

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は充分簡単だと思います.
余計な事をしないか, 細部まで面倒見てくれるか, 中途半端は必要ないと思っています.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?