所要時間: 約40分 | 難易度: ★★★☆☆
この記事で作るもの
この記事を読むと、Hugging Faceで公開されている最新のLLM(Llama 3やQwenなど)を、自分のPCスペックに合わせて「量子化」し、OpenAI互換のAPIサーバーとして稼働させる環境が作れます。
- Python環境に依存せず、C++ベースで動作する爆速な推論環境
- 数十GBあるモデルを数GBまで軽量化し、家庭用GPUやメモリで動かす技術
- 既存のアプリから「自前AI」として呼び出すためのAPIサーバー
前提知識として、ターミナル(コマンドプロンプトやPowerShell)の基本操作ができることを想定しています。
先に確認するスペック・料金
ローカルLLMの世界は「VRAM(ビデオメモリ)」がすべてです。 私がRTX 4090を2枚挿しているのは、合計48GBのVRAMがあれば、現時点で実用的なモデルのほとんどを高速に動かせるからです。 しかし、llama.cppの最大のメリットは「VRAMが足りなくても、メインメモリ(RAM)で補完して動かせる」点にあります。
最低でも以下のスペックは確保してください。
- GPU(NVIDIA製推奨): VRAM 8GB以上。RTX 3060 12GBや4060 Ti 16GBがコスパ最強です。
- メインメモリ: 16GB以上(32GBあると安定します)。
- ストレージ: SSD空き容量 50GB以上。モデルファイルは1つで5GB〜30GBあります。
- OS: Windows(WSL2推奨)またはMac(Apple Silicon M1/M2/M3)。
Macユーザーなら、ユニファイドメモリのおかげで、16GB以上のメモリを積んでいれば驚くほど快適に動きます。 逆に、Intel内蔵グラフィックスのみの古いWindowsノートPCだと、1秒間に1文字出るかどうかの速度になり、実用には耐えません。 その場合はおとなしくAPI(GPT-4等)を使うべきですが、一度ローカルで「プライバシーを気にせず回せる快感」を知ると戻れなくなります。
なぜこの方法を選ぶのか
ローカルでLLMを動かす手法は、他にも「Ollama」や「LM Studio」があります。 これらはボタン一つで動くので初心者には最適ですが、私は「llama.cpp」を直接ビルドして使う方法を推奨します。
理由は3つです。 第一に、最新モデルへの対応が最も速いこと。 Hugging Faceに新しいモデルが上がってから数時間後には、llama.cppで動かすためのプルリクエストが飛んでいます。 第二に、量子化のプロセスを自分で制御できること。 モデルの精度をどこまで削り、ファイルサイズをどこまで絞るかを、自分のマシンスペックに合わせてミリ単位で調整できます。 第三に、サーバーとしてのオーバーヘッドが最小であること。 余計なGUIがない分、推論速度(トークン生成速度)を限界まで引き出せます。
Step 1: 環境を整える
まずはllama.cppを自分のPCで動かせるようにコンパイル(ビルド)します。 「exeファイルをダウンロードして終わり」ではない理由は、あなたのPCのCPUやGPUの命令セットに最適化させるためです。
Mac(Apple Silicon)の場合
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make -j
Apple Siliconの場合、これだけでMetal(GPU加速)が有効になります。-jは全CPUコアを使ってビルドするフラグです。
Windows(NVIDIA GPU利用)の場合
WSL2(Ubuntu)上での実行を強く推奨します。 CUDA Toolkitがインストールされている前提で、以下のコマンドを叩きます。
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
mkdir build
cd build
cmake .. -DGGML_CUDA=ON
cmake --build . --config Release
-DGGML_CUDA=ONが最も重要なフラグです。
これを忘れると、どれだけ高いGPUを積んでいてもCPUだけで計算が走り、1トークンの生成に数秒かかる地獄を見ることになります。
⚠️ 落とし穴:
Windowsでcmakeが通らない場合、大抵は「Visual Studio Build Tools」が入っていないか、PATHが通っていないことが原因です。
また、CUDAのバージョンが古すぎるとコンパイルエラーが出ます。現時点ではCUDA 12.x系を推奨します。
Step 2: モデルのダウンロードと量子化
次に、動かしたいモデルをHugging Faceから取得します。 今回は、日本語能力が高い「Llama-3-8B」系のモデルを例にします。 生の状態(FP16)では15GB以上ありますが、これを4bit(約5GB)に量子化します。
まず、必要なライブラリをインストールします。
# llama.cppディレクトリ内で実行
pip install -r requirements.txt
次に、モデル(Safetensors形式)をGGUF形式に変換します。 ※現在は、多くの場合すでにGGUF形式で配布されているものをダウンロードするのが主流ですが、自作モデルや最新モデルを扱うにはこの工程が不可欠です。
python3 convert_hf_to_gguf.py models/Llama-3-8B-Instruct/
そして、いよいよ「量子化」を実行します。
./llama-quantize ./models/Llama-3-8B-Instruct/ggml-model-f16.gguf ./models/Llama-3-8B-Instruct/Llama-3-8B-Q4_K_M.gguf Q4_K_M
ここで「Q4_K_M」という指定をしました。 これは「4bit量子化」の一種で、計算の重い部分にはビットを多く割り振り、そうでない部分は削るという賢い設定です。 なぜQ4_K_Mなのか? 私の検証では、FP16(無劣化)と比較して、Q4_K_Mでの精度低下(パープレキシティの上昇)はわずか1〜2%程度です。 一方で、メモリ使用量は1/3以下になります。8BモデルならVRAM 8GBのカードで余裕を持って動作します。
Step 3: 動かしてみる
準備が整いました。まずはCLI(コマンドライン)から対話してみましょう。
./llama-cli -m ./models/Llama-3-8B-Instruct/Llama-3-8B-Q4_K_M.gguf \
-n 512 \
-p "あなたは優秀なアシスタントです。自己紹介してください。" \
-ngl 33 \
--color
パラメータの解説
-m: モデルファイルのパス。-n: 生成する最大トークン数。-p: プロンプト(入力文)。-ngl: 「GPUにオフロードするレイヤー数」。 Llama-3-8Bの場合は「33」と指定すれば、全レイヤーがGPUに乗ります。 VRAMが足りない場合は、この数字を減らして(例: 20)、残りをCPU(RAM)に担当させます。これがllama.cppの真骨頂です。
期待される出力
私はAIアシスタントです。お手伝いできることがあれば何でも聞いてください...
(レスポンスが1秒間に数十トークンの速さで流れる)
レスポンスの最後に「eval time = XXX ms / token」といった統計が出ます。 ここが「20ms/token」以下なら爆速、「100ms/token」以上なら設定を見直す必要があります。
Step 4: 実用レベルにする
CLIで動かすだけでは「動かしてみた」で終わってしまいます。 仕事で使うなら、これをサーバー化して、PythonスクリプトやCursor、Difyなどのツールから呼び出せるようにしましょう。
llama.cppには標準で「OpenAI互換サーバー」の機能が付いています。
./llama-server -m ./models/Llama-3-8B-Instruct/Llama-3-8B-Q4_K_M.gguf \
--host 0.0.0.0 \
--port 8080 \
-ngl 33 \
-c 8192
-c 8192はコンテキストサイズ(一度に扱える記憶容量)の設定です。
これを大きくしすぎるとVRAMを激しく消費するので、8Bモデルなら8192〜16384あたりが現実的です。
この状態で、別のターミナルからPythonで叩いてみます。
import openai
# llama-serverが立てたエンドポイントを指定
client = openai.OpenAI(
base_url="http://localhost:8080/v1",
api_key="sk-no-key-required"
)
response = client.chat.completions.create(
model="gpt-3.5-turbo", # 名前は何でも良い
messages=[{"role": "user", "content": "Pythonで素数判定をする関数を書いて。"}]
)
print(response.choices[0].message.content)
なぜこの構成にするのか?
既存のOpenAI SDKをそのまま使えるため、これまでChatGPT APIで作っていた自作ツールを、たった2行(base_urlとapi_key)書き換えるだけで「完全無料・オフライン・プライバシー保護」のローカルLLMツールに差し替えられるからです。
よくあるトラブルと解決法
| エラー内容 | 原因 | 解決策 |
|---|---|---|
CUDA error: out of memory | GPUのVRAM不足 | -ngl の値を小さくして、CPUに分担させる。 |
make: command not found | ビルドツール未導入 | build-essential(Linux)やXcode(Mac)を入れる。 |
illegal instruction | CPUの命令セット不一致 | AVX/AVX2の設定を確認し、適切なフラグでビルドし直す。 |
| 推論がめちゃくちゃ遅い | GPUが使われていない | 起動ログに BLAS = 1 が出ているか確認。0ならCPU推論になっている。 |
次のステップ
ここまでできれば、あなたは「自分のマシンでLLMを飼い慣らす」第一歩を踏み出しました。 次に挑戦すべきは以下の3点です。
- RAG(検索拡張生成)との組み合わせ: 自分のPDFや社内ドキュメントを読み込ませて、ローカルLLMに回答させるシステム。これをローカルで完結させれば、機密情報の漏洩リスクはゼロです。
- モデルの使い分け: 日本語に特化した「Llama-3-Elyza」や、コード生成に強い「DeepSeek-Coder」など、用途に合わせてGGUFファイルを入れ替えて試してみてください。
- パラメータチューニング:
temp(温度)やtop_pの設定で、AIの「創造性」と「正確性」がどう変わるかを体感すること。
私がSIer時代に苦労した「インフラの制約」は、今や1枚のGPUカードで解決できる時代になりました。 まずは小さなモデルからで構いません。自分の手元でAIが思考を始める瞬間を、ぜひ体験してください。
よくある質問
Q1: ノートPC(GPUなし)でも動きますか?
動きますが、速度は期待しないでください。 llama.cppはCPU推論も得意ですが、8Bクラスのモデルでも「1秒間に1〜2文字」程度になることが多いです。 MacBookのM1以降であれば、GPU(Metal)が効くので非常に快適です。
Q2: 量子化すると、どれくらいバカになりますか?
4bit(Q4_K_M)程度であれば、人間が体感できるほどの劣化はほぼありません。 しかし、2bitまで落とすと、文章が支離滅裂になったり、ループしたりする現象が目立ち始めます。 実用性とサイズのバランスは、4bitから5bit(Q5_K_M)がスイートスポットです。
Q3: 複数のGPUを持っている場合、並列化できますか?
はい、可能です。 ビルド時にCUDAを有効にしていれば、llama.cppは自動的に複数のGPUを認識し、レイヤーを分割してロードしてくれます。 私が4090を2枚使っているのも、この機能で70Bクラスの巨大なモデルを高速に動かすためです。
📦 この記事に関連する商品(楽天メインで価格確認)
RTX 4060 Ti 16GBVRAM 16GBで8B〜14Bモデルの量子化版をフルロードでき、入門に最適
※アフィリエイトリンクを含みます





