llama.cpp を自分でビルドする方法
結論
llama.cpp は CPU のみでも、GPU バックエンド(Vulkan、CUDA、ROCm、SYCL)でも動作します。GPU を利用すれば必ず高速化するわけではありませんが、公式バイナリに比べてビルド時に CPU の AVX/AVX2、場合によっては AVX‑512 などの最適化や GPU バックエンドを有効化することで、性能を引き出すことができます。実測例として、CUDA 12 系で 7B モデルを Q4KM 量子化した場合、公式バイナリより約 1.8 倍 の速度向上が報告されています。
速度向上は GPU の世代、VRAM 容量、量子化レベル、-ngl 設定などに大きく左右されます。自分のハードウェアに合わせて最適化すれば、ローカルで LLM を快適に利用できる可能性が高まりますが、期待できる速度は環境次第で変動します。
1 llama.cpp の概要
- 軽量推論エンジン:C++ で実装され、CPU のみでも動作します。
- GPU バックエンド:CUDA、Metal、ROCm、Vulkan、SYCL など複数の GPU API に対応しています(Metal 版は
docs/metal.mdを参照)。 - 量子化フォーマット:モデルは GGUF 形式で提供され、4 ビットや 5 ビットに圧縮すれば数 GB のメモリで実行可能です。
- オープンソース:MIT ライセンスで公開され、GitHub のスター数は 75,000 を超えています。
2 ビルドの選択肢とその影響
・CPU 版:GPU が無い環境でも動作。最小構成でビルド可能。 ・Vulkan 版:クロスプラットフォームで比較的ドライバ依存が少ない。 ・CUDA 版:NVIDIA GPU 向けで高速な行列演算が可能。cuDNN は必須ではなく、CUDA Toolkit だけで動作します。 ・ROCm 版:AMD GPU 向け、主に Linux で利用。 ・SYCL 版:Intel oneAPI 系列に対応した比較的新しいバックエンド。 ・Metal 版:Apple Silicon(M1・M2 系列)での最適化が可能。macOS で GPU を活用したい場合に選択します。
バックエンドを選択すると、ビルド時に有効化する CMake オプションが変わります。GPU が搭載されていない場合は CPU 版 のみで十分です。GPU がある環境でも、CUDA や ROCm はオプション扱いであり、必ずしもインストールする必要はありません。
3 環境別ビルド手順
3‑1 Ubuntu(Linux)でのビルド(初心者向け)
対象:Ubuntu 24.04 LTS(他バージョンでもパッケージ名が若干異なる場合があります)
- 必要なパッケージをインストールします。
sudo apt update
sudo apt install -y git git-lfs cmake g++ libcurl4-openssl-dev
- 作業ディレクトリを作成し、リポジトリを取得します。
mkdir -p ~/git
cd ~/git
git clone https://github.com/ggml-org/llama.cpp.git
cd llama.cpp
- ビルドディレクトリを作成し、CMake を実行します。
- CPU 版
cmake -B build
- Vulkan 版
cmake -B build -DGGML_VULKAN=ON
- CUDA 版(CUDA がインストール済みの場合)
cmake -B build -DGGML_CUDA=ON -DGGML_CUDA_F16=ON
- **Metal 版(Apple Silicon 用)**は macOS で実行してください。
cmake -B build -DGGML_METAL=ON
- リリース構成でビルドします。
cmake --build build --config Release -j $(nproc)
- 実行ファイルを確認します。
build/binディレクトリにllama-cliやllama-serverが生成されます。
ポイント
- -DLLAMA_CURL=OFF を付ければ curl が未インストールでもビルドできます。
- CUDA を有効にする場合は、環境変数 CUDA_PATH が正しく設定されているか echo $CUDA_PATH で確認してください。
- 実行時に Flash Attention を利用したい場合は、-fa オプションを付与するとパフォーマンスが向上します(ビルドオプションは不要です)。
3‑2 Windows でのビルド(ややハードルは高め)
対象:Windows 10/11、Visual Studio Build Tools がインストール済み
- Visual Studio Build Tools をインストールし、「C++ によるデスクトップ開発」ワークロードを有効にします。
- CMake をインストールし、インストーラで「システム PATH に追加」にチェックを入れます。
- 必要なら CUDA をインストールします。NVIDIA の公式サイトからダウンロードし、インストール後に
CUDA_PATHが自動設定されます。GPU が無い環境ではこの手順は省略してください。 - Git をインストールし、PowerShell でリポジトリを取得します。
mkdir C:\git
cd C:\git
git clone https://github.com/ggml-org/llama.cpp.git
cd llama.cpp
- CMake を実行します(例:CUDA 有効、Visual Studio 2022 用ジェネレータ)。パスにスペースが含まれる場合は必ず二重引用符で囲んでください。
cmake -B build -G "Visual Studio 17 2022" `
-DGGML_CUDA=ON -DGGML_CUDA_F16=ON `
-DCUDAToolkit_ROOT="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.6"
※ v12.6 はインストールした CUDA のバージョン例です。実際のバージョンに合わせて書き換えてください。
- ビルドします。
cmake --build build --config Release
- 実行ファイルを確認します。
build\bin\Releaseにllama-cli.exeなどが生成されます。
デバッグのやり方
build\llama.cpp.sln を Visual Studio で開き、llama-cli プロジェクトのプロパティ → デバッグ → コマンド引数に例 -m models\llama-2-7b.Q4_K_M.gguf -p "こんにちは" を設定して実行します。main.cpp の llama_decode 行にブレークポイントを置き、[デバッグ] → [新しいインスタンスの開始] でコードの流れを追えます。
3‑3 macOS(Apple Silicon)でのビルド(Metal バックエンド)
対象:macOS 14 以降、Apple Silicon(M1、M2 系列)
- 必要なツールを Homebrew 経由でインストールします。
brew update
brew install git cmake
- 作業ディレクトリを作成し、リポジトリを取得します。
mkdir -p ~/git
cd ~/git
git clone https://github.com/ggml-org/llama.cpp.git
cd llama.cpp
- ビルドディレクトリを作成し、Metal バックエンドを有効にして CMake を実行します。
cmake -B build -DGGML_METAL=ON
- リリース構成でビルドします。
cmake --build build --config Release -j $(sysctl -n hw.logicalcpu)
build/binにllama-cliが生成されます。GPU(Metal)を利用した実行は-nglオプションでオフロード層数を指定してください。
4 カスタム最適化と実測結果
・GPU オフロード層数 (-ngl):-ngl 20 など、VRAM に余裕がある範囲で設定
・CPU スレッド数 (-t):-t 8 など、CPU コア数の半分程度から試す
・量子化レベル:Q4_K_M(デフォルト)または Q5_K_M(品質向上)
・CUDA バージョン:CUDA 12 系でビルドした例では、公式バイナリより約 1.8 倍速くなる
・CPU の拡張命令:AVX‑512 が有効な CPU では自動的に利用され、CPU 版でも大幅な高速化が期待できる
上記はあくまで一例です。実際にはハードウェア条件に合わせて数値を調整してください。
5 ハマりやすいポイントと回避策
CUDA と cuDNN のバージョン不一致
llama.cpp の標準ビルドでは cuDNN は必須ではなく、CUDA Toolkit だけで動作します。cuDNN が見つからない場合は無視して構いません。Vulkan が見つからない
sudo apt install vulkan-tools libvulkan-devで開発パッケージを導入すれば解決します。環境変数の設定ミス
echo $CUDA_PATH(Linux)やecho %CUDA_PATH%(Windows)で確認し、必要に応じてexport CUDA_PATH=/usr/local/cudaなどで設定します。VRAM が足りない
-nglの値を下げ、コンテキスト長-cも適宜小さく設定すると安定します。ビルドディレクトリの残骸
再ビルド前にrm -rf build(Linux)やRemove-Item -Recurse -Force .\build(PowerShell)でディレクトリを削除してから実行してください。モデル変換に Python が必要
GGUF 形式への変換スクリプトは Python 環境で動作します。リポジトリに含まれるrequirements.txtをインストールすることで、pip install -r requirements.txtが実行可能です。これにより、Hugging Face などから取得した HF 形式のモデルを簡単に変換できます。
6 モデルの入手と実行例
llama.cpp がビルドできたら、GGUF 形式のモデルを用意します。代表的な入手先として Hugging Face のリポジトリがあります。モデルをダウンロードしたら models/ ディレクトリに配置し、以下のように実行できます。
./build/bin/llama-cli -m models/llama-2-7b.Q4_K_M.gguf -p "こんにちは、調子はどうですか?"
GPU を利用する場合は -ngl オプションでオフロード層数を指定し、さらに Flash Attention を有効にしたいときは -fa を付与します。
./build/bin/llama-cli -m models/llama-2-7b.Q4_K_M.gguf -ngl 20 -fa -p "GPU で高速化できるか教えて"
7 まとめ
- CPU だけでも、GPU バックエンドでも動作する ことが llama.cpp の大きな利点です。GPU があっても速度向上は保証されず、ハードウェア構成や量子化レベル、
-ngl設定などが結果に大きく影響します。 - Ubuntu はパッケージが揃っているため手順がシンプル です。一方、Windows では Visual Studio と CUDA の環境設定が必要ですが、標準コンパイラを使えば同様にビルドは可能です。
- macOS(Apple Silicon)向けに Metal バックエンドを有効にすれば、Apple の GPU でも高速化が期待できます。
- カスタムビルドは必ずしも大幅な高速化を保証しません が、GPU を有効にした場合に 1.5〜2.0 倍程度の速度向上が報告されています(実測は環境依存)。
- ビルド後は
llama-cliで対話的に、llama-serverで API 化でき、ノートパソコンでも日本語 LLM を手軽に試すことができます。
本手順は執筆時点の情報に基づいています。公式リポジトリは随時更新されますので、最新のビルドオプションや依存パッケージは GitHub の README を併せて確認してください。
ご自身の環境や目的に合わせて適宜調整し、最適な llama.cpp を構築してローカル AI の可能性を広げてみてください。