所要時間: 約40分 | 難易度: ★★★☆☆

この記事で作るもの

この記事では、自分のPCのリソースを最大限に活用して、最新のLLM(Llama 3.1やMistralなど)と超高速にチャットできるOpenAI互換のAPIサーバーを構築します。 Pythonの重いライブラリを入れず、C++ベースの軽量な「llama.cpp」を使うことで、古いGPUやメモリの少ないMacでも実用レベルの速度を出せるようになります。

前提知識として、ターミナル(コマンドプロンプト)の基本的な操作と、Pythonがインストールされている環境が必要です。

先に確認するスペック・料金

ローカルLLMを動かす上で、最も重要なのは「VRAM(ビデオメモリ)」と「メインメモリ」の容量です。 結論から言うと、7Bクラス(70億パラメータ)のモデルを動かすなら、最低でも8GBのメモリ(VRAMまたはRAM)が必要です。 8GBあれば、今回紹介する「GGUF量子化」を使うことで、モデルを4bit程度に圧縮してメモリ内に収めることができます。

NVIDIAのGPU(RTX 3060 12GB以上推奨)があれば、処理をGPUにオフロードして爆速で動かせます。 一方、Apple Silicon搭載のMac(M1/M2/M3)であれば、ユニファイドメモリをフル活用できるため、16GB以上のモデルでも非常にスムーズに動作します。 「自分のPCはスペック不足かも」と思っている方でも、llama.cppならCPUだけで動かす選択肢もあるため、まずは試してみる価値があります。

なぜこの方法を選ぶのか

ローカルでLLMを動かす手法は、他に「Ollama」や「LM Studio」といったGUIツールも存在します。 しかし、あえて「llama.cpp」を直接使う理由は、カスタマイズ性とデプロイの柔軟性が圧倒的だからです。

llama.cppはC++で書かれており、依存関係がほとんどありません。 サーバーとして起動すればOpenAIのAPIと同じ形式でリクエストを受け付けられるため、既存のCursorやCline、自作のPythonスクリプトから「接続先URLを変えるだけ」でローカルモデルに切り替えられます。 仕事で使うシステムに組み込むなら、ブラックボックス化されたGUIツールよりも、パラメータを細かく制御できるllama.cppがベストな選択肢になります。

Step 1: 環境を整える

まずは、llama.cppを自分のPCで動かせるようにビルド(コンパイル)します。 あらかじめビルドされたバイナリをダウンロードする方法もありますが、自分のPCのCPU/GPU命令に最適化させるために、ソースからビルドすることを強く推奨します。

Mac(Apple Silicon)の場合

ターミナルを開き、以下のコマンドを順に実行してください。

# リポジトリをクローン
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp

# ビルド(Metalを有効にしてGPUをフル活用する)
make -j

Windowsの場合

git bashやPowerShellではなく、Developer PowerShell for VS 2022などを使ってビルドします。

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
mkdir build
cd build

# CUDA(NVIDIA GPU)を使う設定でビルド
cmake .. -DGGML_CUDA=ON
cmake --build . --config Release

makeやcmakeは、ソースコードを自分のPCで動く「実行ファイル」に変換する作業です。 特にMacならMetal、WindowsならCUDAを有効にしないと、GPUが使われずCPU処理になり、レスポンスが10倍以上遅くなるので注意してください。

⚠️ 落とし穴: Windowsユーザーで「cmakeなんて入っていない」というエラーが出る場合は、Visual Studioのインストーラーから「C++によるデスクトップ開発」にチェックを入れてインストールしてください。 これを忘れると、一生ビルドが通りません。

Step 2: 量子化モデル(GGUF)を手に入れる

LLMの元のデータは非常に巨大で、そのままでは一般のPCメモリに収まりません。 そこで、データの精度を少しだけ落として軽量化する「量子化」という技術を使います。 今回は、すでに量子化された「GGUF」という形式のファイルをHugging Faceからダウンロードします。

私が実務でよく使うのは、Bartowski氏やMaziyarPanahi氏が公開しているプリコンパイル済みのモデルです。

  1. Hugging Face にアクセス。
  2. Llama-3.1-8B-Instruct-GGUF などのモデルを探す。
  3. 「Files and versions」タブから、Q4_K_M.gguf というファイル名のものをダウンロードする。

Q4_K_Mは、精度とサイズのバランスが最も良い「4bit量子化」の設定です。 8Bモデルなら、このファイル一つで約5GB程度の容量になります。

# llama.cppディレクトリ内に models フォルダを作って保存
mkdir models
mv ~/Downloads/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf ./models/

Step 3: 動かしてみる

準備が整ったので、まずはコマンドラインから直接モデルを動かしてみましょう。

# llama.cppのディレクトリで実行
./llama-cli -m models/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf \
  -p "You are a helpful assistant. 日本語で答えてください。" \
  -cnv \
  --n-gpu-layers 99

各設定の意味は以下の通りです。

  • -m: モデルファイルのパス。
  • -p: システムプロンプト。AIの役割を指定。
  • -cnv: 対話モード(Conversation)。チャット形式でやり取りできる。
  • --n-gpu-layers 99: すべての計算層をGPUに丸投げする設定。VRAMが足りない場合はこの数字を下げますが、最近の8Bモデルなら4090でもM2 Macでも全部載ります。

期待される出力

User: こんにちは、自己紹介してください。
Llama: こんにちは!私はMetaによってトレーニングされたAIアシスタントです。
プログラミングや文章作成、翻訳などのお手伝いができます。

もしここで文字化けしたり、極端に生成が遅い(1秒間に1文字以下)場合は、GPUが正しく認識されていません。 ビルド時のログを見直して、CUDAやMetalの文字があるか確認してください。

Step 4: 実用レベルにする(サーバーモード)

CLIで動かすだけでは不便です。 llama.cppの真骨頂は、軽量な「サーバーモード」にあります。 これを起動しておけば、外部ツールからAPI経由で呼び出せるようになります。

./llama-server -m models/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf \
  --port 8080 \
  --n-gpu-layers 99 \
  --api-key your_secret_key

これで、http://localhost:8080 でOpenAI互換のAPIが立ち上がりました。 次に、Pythonからこのローカルサーバーを叩くコードを書いてみましょう。

import openai

# ローカルで立ち上げたllama-serverを指定
client = openai.OpenAI(
    base_url="http://localhost:8080/v1",
    api_key="your_secret_key" # サーバー側で指定したもの
)

response = client.chat.completions.create(
    model="local-model", # サーバー側では何を指定しても動く
    messages=[
        {"role": "system", "content": "あなたはプロのエンジニアです。"},
        {"role": "user", "content": "Pythonで高速な素数判定プログラムを書いて。"}
    ]
)

print(response.choices[0].message.content)

この方法の利点は、クラウドのAPI(GPT-4など)を使っているコードの base_url を書き換えるだけで、一瞬で「完全オフライン・無料・プライバシー保護」な環境に切り替えられる点です。 私は機密性の高いドキュメントの要約や、大量のテストデータの生成をローカルで行う際にこの構成を多用しています。

よくあるトラブルと解決法

エラー内容原因解決策
error loading modelファイルが壊れている、またはパスが違うダウンロードを再試行し、パスをフルパスで指定してみる
out of memoryVRAMが足りない--n-gpu-layers の値を減らす(例: 20)
command not found: make開発ツールが入っていないMacなら xcode-select --install を実行
生成速度が異様に遅いCPUだけで計算しているビルド時に GGML_CUDA=ON などを忘れていないか確認

次のステップ

llama.cppをサーバーとして動かせるようになったら、次は「Cursor」や「Continue」といったエディタ拡張機能と連携させてみてください。 設定画面のAPI URLを http://localhost:8080/v1 に書き換えるだけで、自分のPCで動くAIがコードを書いてくれるようになります。

また、余裕があれば「RAG(検索拡張生成)」の実験に進むのも面白いです。 ローカルLLMなら、数万件のプライベート文書を読み込ませても外部にデータが漏れる心配がありません。 llama.cppにはPythonバインディング(llama-cpp-python)も存在するので、LangChainと組み合わせて独自のローカルAIエージェントを作ってみるのも良いでしょう。

よくある質問

Q1: Q4_K_MとかQ8_0とか、量子化の種類が多すぎてどれを選べばいいですか?

実用上は Q4_K_M または Q5_K_M が最強です。4bit(Q4)以下に落とすと急激に頭が悪くなりますが、4bitから8bit(Q8)に上げても、精度の向上は微々たるものです。メモリを節約して、その分長いコンテキスト(入力文字数)を確保する方が実務では有利です。

Q2: 複数のGPU(RTX 4090 2枚など)を持っている場合、どうすればいいですか?

llama.cppはデフォルトでマルチGPUに対応しています。ビルド時にCUDAを有効にしていれば、特に設定しなくてもVRAMを合算して使ってくれます。もし特定のGPUだけ使いたい場合は、環境変数 CUDA_VISIBLE_DEVICES で制御可能です。

Q3: Pythonライブラリの llama-cpp-python とは何が違うんですか?

本家 llama.cpp はC++の実行ファイル、Python版はそのラッパー(包み紙)です。速度はどちらも優秀ですが、この記事のように llama-server を直接使う方が、更新速度が速く、依存関係のトラブル(インストール失敗)も少ないので、個人的には本家を直接使うのが一番安定すると感じています。

📦 この記事に関連する商品(楽天メインで価格確認)

RTX 4060 Ti 16GB

VRAM 16GBでローカルLLM入門に現実的。8Bモデルなら余裕で全レイヤー載ります

楽天で価格を見る Amazonでも確認

※アフィリエイトリンクを含みます


あわせて読みたい