所要時間: 約40分 | 難易度: ★★★☆☆
この記事で作るもの
- llama.cpp v1.0をソースからビルドし、自前PCで「OpenAI互換APIサーバー」を立ち上げます。
- Pythonからそのサーバーを呼び出し、ローカルLLM(Llama 3.1 8B等)をChatGPTと同じ感覚で操作するスクリプトを完成させます。
- 外部APIに1円も払わず、プライバシーを完全に守った状態でのAI開発環境を手に入れます。
📦 この記事に関連する商品(楽天メインで価格確認)
RTX 4060 Ti 16GBVRAM 16GBでローカルLLM入門に現実的。Llama 3.1 8Bが余裕で全レイヤー乗ります。
※アフィリエイトリンクを含みます
前提知識
- 基本的なターミナル操作(cd, git, make等)ができること。
- Pythonの基礎(pipでのライブラリインストール)を理解していること。
必要なもの
- OS: Linux, macOS, または Windows (WSL2推奨)
- ハードウェア: 最低でも8GB以上のメモリ。GPU(NVIDIA製)があると劇的に速くなります。
先に確認するスペック・料金
ローカルLLMを動かす上で、最も重要なのは「VRAM(ビデオメモリ)」の容量です。 llama.cpp v1.0はCPUだけでも動作しますが、実用的な速度(1秒間に10トークン以上)を求めるなら、モデルのファイルサイズ以上のVRAMを積んだGPUが必須となります。
具体的には、Llama 3.1 8B(4ビット量子化版)を動かすなら、約5GB〜6GBのVRAMを消費します。 VRAM 8GBのRTX 3060/4060があれば快適ですが、VRAM 16GB以上あると将来的に大きなモデルも扱えます。 Macユーザーの場合、メモリがCPUとGPUで共有される「ユニファイドメモリ」なので、最低でも16GB、できれば24GB以上のモデルを選んでください。
もしGPUがない場合は、CPUの性能に依存します。 最新のIntel Core i7/i9やAMD Ryzen 7/9であれば、小規模なモデルなら「待てる」速度で動きます。 今回の手順では、お使いの環境に合わせて「GPUを使う設定」と「CPUのみで動かす設定」の両方を解説します。
なぜこの方法を選ぶのか
ローカルLLMを動かすツールには、他にも「Ollama」や「LM Studio」があります。 これらはワンクリックで動くため非常に便利ですが、中身がブラックボックス化されており、特定のライブラリと組み合わせる際に細かい調整が効かないことがあります。
llama.cpp v1.0を選ぶ最大の理由は、その「軽量さ」と「透明性」です。 C++で書かれた最小限のバイナリで動作するため、オーバーヘッドがほとんどありません。 さらに、v1.0になったことで長年懸念されていた破壊的な仕様変更が落ち着き、本番環境のバックエンドとして組み込める安定性を手に入れました。 開発者として「仕組みを理解して制御したい」のであれば、llama.cppを直接叩くのがベストな選択です。
Step 1: 環境を整える
まずはllama.cppをダウンロードし、自分のPCに最適化されたバイナリを作成(ビルド)します。
# リポジトリのクローン
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
# ビルド(環境に合わせて選択)
# A: NVIDIA GPU (CUDA) を使っている場合
# CUDAツールキットがインストールされている必要があります。
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -j
# B: Mac (Apple Silicon) を使っている場合
# Metalを有効にしてビルドします。
cmake -B build -DGGML_METAL=ON
cmake --build build --config Release -j
# C: GPUがない場合 (CPUのみ)
cmake -B build
cmake --build build --config Release -j
各コマンドの解説です。
git cloneで最新のソースコードを取得します。
cmakeのオプションにあるGGML_CUDAやGGML_METALは、グラフィックボードの計算能力を引き出すためのスイッチです。
これらを忘れると、全ての計算をCPUで行うことになり、動作が10倍以上遅くなる可能性があります。
⚠️ 落とし穴: Windowsユーザーは、ビルドツール(Visual StudioのC++ビルド環境)が入っていないとエラーになります。 設定が面倒な場合は、GitHubの「Releases」からビルド済みのzipファイルをダウンロードして展開する方法もありますが、自分のPCの命令セット(AVX2等)に最適化されないため、速度が数%低下することがあります。
Step 2: モデルの準備
LLMを動かすには「重みファイル(モデル)」が必要です。 llama.cppは「GGUF」という形式のファイルを読み込みます。
今回は、Metaが公開している高性能なモデル「Llama-3.1-8B-Instruct」の量子化版を使用します。 量子化とは、モデルの精度をわずかに犠牲にして、メモリ消費量を1/4程度まで軽量化する技術です。
# huggingface-hubライブラリをインストールしてモデルをダウンロード
pip install huggingface_hub
# 1つ目の引数がリポジトリ名、2つ目がファイル名です。
# Q4_K_M(4ビット量子化)は、精度と速度のバランスが最も良い設定です。
huggingface-cli download lmstudio-community/Meta-Llama-3.1-8B-Instruct-GGUF Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf --local-dir . --local-dir-use-symlinks False
なぜ「Q4_K_M」なのか。 本来、モデルは16ビット(FP16)で保存されていますが、それだと8Bモデルで約16GBのメモリを消費します。 4ビット(Q4)に圧縮することで、メモリ消費を約5GBに抑えつつ、回答の質をほぼ維持できます。 私の検証では、実務レベルのタスクにおいてQ4とFP16の差を感じることはほとんどありませんでした。
Step 3: 動かしてみる
いよいよサーバーを起動します。
llama.cpp v1.0では、llama-serverという実行ファイルを使って、OpenAIのAPIと互換性のあるサーバーを立てられます。
# サーバーの起動
./build/bin/llama-server \
-m Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf \
-c 2048 \
-ngl 99 \
--port 8080
オプションの解説です。
-mは使用するモデルファイル。
-c 2048はコンテキストサイズ(一度に扱えるトークン数)を指定します。
-ngl 99は重要です。GPUにオフロードするレイヤー数を指定します。
「99」と大きな数値を入れることで、全ての計算をGPUで行うように強制しています(モデルのレイヤー数は通常32〜80程度なので、99を指定すれば全て収まります)。
期待される出力
サーバーが立ち上がると、ログの最後に以下のような表示が出ます。
HTTP server listening: http://127.0.0.1:8080
これで、あなたのPCは「自分専用のChatGPTサーバー」になりました。
Step 4: 実用レベルにする
サーバーが立ったので、今度はPythonからこのサーバーを呼び出してみます。
標準のopenaiライブラリがそのまま使えるのが、llama.cpp v1.0の強力な点です。
import os
from openai import OpenAI
# ローカルサーバーのアドレスを指定
# base_urlにローカルのアドレスを入れることで、通信先をChatGPTから自前サーバーへ切り替えます
client = OpenAI(
base_url="http://localhost:8080/v1",
api_key="no-key-required" # ローカルなのでキーは不要ですが、ライブラリの仕様上何か入れる必要があります
)
def ask_local_llm(prompt):
try:
response = client.chat.completions.create(
model="local-model", # サーバー側で読み込んでいるモデルが使われるため、名前は何でもOK
messages=[
{"role": "system", "content": "あなたは優秀なエンジニアです。簡潔に回答してください。"},
{"role": "user", "content": prompt}
],
temperature=0.7 # 0.7は「適度な創造性」を保つための標準的な値です
)
return response.choices[0].message.content
except Exception as e:
return f"エラーが発生しました: {e}"
# 実行
if __name__ == "__main__":
question = "Pythonで高速なWebAPIを作るならどのフレームワークがおすすめ?"
answer = ask_local_llm(question)
print(f"AIの回答:\n{answer}")
このスクリプトを使えば、既存のChatGPT向けに書かれたコードのbase_urlを書き換えるだけで、一瞬でローカルLLMへ移行できます。
実務では、ここからさらに「RAG(外部知識参照)」を追加したり、機密情報を含む社内ドキュメントの要約に使ったりすることが可能です。
クラウドへデータを送らないため、セキュリティポリシーが厳しい企業でもAIを導入できるのが強みです。
よくあるトラブルと解決法
| エラー内容 | 原因 | 解決策 |
|---|---|---|
error loading model | GGUFファイルが破損しているか、メモリ不足 | ファイルの再ダウンロード、またはより小さいモデル(Q2等)を試す |
CUDA error | ドライバとllama.cppのバージョン不一致 | 最新のNVIDIAドライバをインストールし、ビルドをやり直す |
Slow response | CPUだけで動いている | -ngl 99がついているか、ビルド時にGPUオプションを有効にしたか確認 |
次のステップ
この記事で、ローカルLLMを動かす「土台」が完成しました。 ここからさらにレベルアップするためのアイデアをいくつか提案します。
- RAG(検索拡張生成)の実装:
langchainやLlamaIndexと組み合わせることで、自分のPDFファイルやメモ帳の内容をもとに回答するAIを作ることができます。ローカル環境なら大量の文書をインデックス化してもコストがかかりません。 - モデルの微調整(Fine-tuning): さらに上級者向けですが、LoRAなどの手法を使って、特定の専門用語を完璧に理解させるカスタマイズに挑戦するのも面白いでしょう。
- 複数モデルの使い分け: 軽量なLlama 3.1 8Bはチャットや要約に使い、推論が必要な難しい課題にはGemma 2 27Bを動かすなど、タスクに応じてモデルを切り替える構成を作ってみてください。
ローカルLLMの世界は日々進化していますが、その中心にあるのは常にllama.cppです。 今回のv1.0リリースで、ようやく「おもちゃ」から「道具」へと進化したと感じています。
よくある質問
Q1: 8GBのVRAMでも動きますか?
はい、Llama 3.1 8B(Q4量子化版)であれば、8GBのVRAMで余裕を持って動作します。残りのVRAMで他のブラウザやエディタを動かすことも可能です。ただし、13B以上のモデルを動かそうとすると急激に重くなるため、その場合はさらに高い量子化(Q2_Kなど)を選ぶ必要があります。
Q2: OpenAI互換APIにするメリットは何ですか?
最大のメリットは、世界中で公開されているChatGPT用のライブラリやツール(Cursor, Aider, Open WebUIなど)を、設定変更だけでそのまま流用できる点です。特定のツールに縛られず、常に最新のAIツール群をローカル環境で試せるようになります。
Q3: llama-serverをバックグラウンドで動かし続けるには?
Linux/Macであれば、nohupコマンドを使うか、screenやtmuxの中で起動するのが一般的です。恒久的にサーバーとして運用したい場合は、systemd(Linux)のサービスとして登録することで、PC起動時に自動でLLMサーバーを立ち上げることができます。





