所要時間: 約30分 | 難易度: ★★★☆☆
この記事で作るもの
- Llama 3.1やMistralなどの最新オープンソースLLMを、自分のPC(Windows/Mac)のGPUを活用して高速に動作させるPython実行環境を構築します。
- 量子化技術(GGUF)を使い、本来なら数十GBのVRAMが必要な巨大モデルを、一般的なゲーミングPCやMacBookでサクサク動かせるようにします。
- 最終的に、PythonからローカルLLMを呼び出し、チャット形式で応答を返すスクリプトを完成させます。
📦 この記事に関連する商品(楽天メインで価格確認)
RTX 4060 Ti 16GBVRAM 16GBを安価に確保でき、Llama 3.1 8Bを余裕で全レイヤーGPUに乗せられる
※アフィリエイトリンクを含みます
先に確認するスペック・料金
ローカルLLMを動かす上で、最も重要なのは「VRAM(ビデオメモリ)」の容量です。 結論から言うと、NVIDIA製GPUならVRAM 8GB以上、Macならユニファイドメモリ 16GB以上が最低ラインになります。 私が検証した結果、VRAM 8GBあれば「Llama-3-8B」の4ビット量子化モデルがレスポンス0.1秒レベルで快適に動作します。
もしVRAMが4GB以下、あるいは内蔵グラフィックスのみのPCを使っている場合は、推論速度が10倍以上遅くなることを覚悟してください。 その場合はRTX 3060 12GB版(中古で3.5万円前後)や、RTX 4060 Ti 16GB版を導入するのが、AIエンジニアへの最短ルートです。 クラウドAPI(OpenAIなど)を使えばハードウェア代はかかりませんが、プライバシー重視の案件や、1日に数万回プロンプトを投げるような検証作業では、ローカル環境が圧倒的に安上がりになります。
なぜこの方法を選ぶのか
ローカルLLMを動かす手段は「Ollama」「LM Studio」「vLLM」など複数あります。 その中で、なぜ「llama.cpp」と「GGUF」を学ぶべきなのか。 理由は、カスタマイズ性の高さとリソース効率の良さにあります。
Ollamaは内部でllama.cppを使っていますが、ブラックボックス化されている部分が多く、特定のGPUパラメータを微調整して限界まで速度を引き出すには向きません。 また、GGUF形式は「1つのファイルにモデルデータとテンソル情報を完結させている」ため、管理が非常に楽です。 SIer時代に苦労した「依存ライブラリのバージョン競合でモデルが動かない」という悪夢を、このエコシステムは完全に払拭してくれました。
Step 1: 環境を整える
まずは、llama.cppを動かすためのビルド環境を作ります。 Windowsユーザーは「WSL2」を、Macユーザーは「Homebrew」が入っている前提で進めます。
# リポジトリのクローン
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
# ビルド(Mac / Apple Siliconの場合)
make -j
# ビルド(Windows + NVIDIA GPUの場合)
# cmakeを使ってCUDAを有効化します
mkdir build
cd build
cmake .. -GGPU_CUDACC=ON
cmake --build . --config Release
cmake .. -GGPU_CUDACC=ON を指定するのは、CPUではなくGPUの演算コア(CUDA)を強制的に使うためです。
これを忘れると、どんなに高いGPUを積んでいても、計算がCPUに回ってしまい、1文字出すのに数秒かかる「死ぬほど遅いチャット」になってしまいます。
⚠️ 落とし穴:
Windowsでビルドする際、NVIDIA CUDA Toolkitがインストールされていないとエラーが出ます。
必ず事前に公式サイトからCUDA Toolkit(12.x系推奨)を入れ、nvcc --version が通ることを確認してください。
私は初めて構築した時、CUDAのパスが通っておらず、3時間ほど「なぜかCPUしか動かない」と頭を抱えた経験があります。
Step 2: 量子化モデル(GGUF)の入手
モデル本体をHugging Faceからダウンロードします。 今回は日本語能力に定評のある「Llama-3.1-8B-Instruct」をターゲットにします。
- Hugging Faceで「Llama-3.1-8B-Instruct GGUF」と検索します。
- 「bartowski」氏や「MaziyarPanahi」氏が公開している量子化済みリポジトリを探します。
Llama-3.1-8B-Instruct-Q4_K_M.ggufというファイルを探してダウンロードしてください。
ここで「Q4_K_M」などの記号が出てきますが、これは「4ビット量子化」を意味します。 本来16ビットで表現されるデータを4ビットに圧縮することで、モデルのサイズを1/4(約5GB)に減らしています。 私の実機検証では、8ビット(Q8_0)と4ビット(Q4_K_M)で回答精度に体感的な差はほぼありませんでしたが、速度は4ビットの方が圧倒的に速いです。 仕事で使うなら、精度と速度のバランスが最も良いQ4_K_MかQ5_K_Mを選ぶのが鉄板です。
Step 3: 動かしてみる
ダウンロードしたモデルファイルを、llama.cpp/models ディレクトリに配置します。
まずはコマンドラインから、正しくGPUが認識されているかテストしましょう。
# llama.cppのディレクトリで実行
./llama-cli -m models/Llama-3.1-8B-Instruct-Q4_K_M.gguf \
-n 512 \
-p "あなたは優秀なアシスタントです。富士山の高さは?" \
-ngl 99
ここで最も重要な引数は -ngl 99 (Number of GPU Layers)です。
これは「モデルの層のうち、いくつをGPUにオフロードするか」という設定です。
8Bクラスのモデルなら「99」を指定しておけば、全レイヤーがVRAMに乗り、爆速で回答が返ってきます。
期待される出力
富士山の高さは3,776メートルです。これは日本で最も高い山であり、ユネスコの世界遺産にも登録されています。
llama_print_timings: eval time = 120.45 ms / 25 tokens (207.55 tokens/s)
「tokens/s」という数字に注目してください。
秒間50トークン以上出ていれば、人間が読むスピードを遥かに超えています。
もしここが 2~3 tokens/s しか出ていない場合は、-ngl の設定が効いていないか、GPUドライバに問題があります。
Step 4: Pythonから制御して実用レベルにする
コマンドラインで動くだけでは業務に使えません。
Pythonからライブラリ llama-cpp-python を通じて呼び出せるようにします。
# ライブラリのインストール(GPU対応版)
# Windowsの場合
# $env:CMAKE_ARGS="-DGGML_CUDA=on"
# pip install llama-cpp-python
import os
from llama_cpp import Llama
# モデルのパスを指定
model_path = "./models/Llama-3.1-8B-Instruct-Q4_K_M.gguf"
# モデルの初期化
# n_gpu_layers=-1 は「全レイヤーをGPUに載せる」という指定。
# これが最もパフォーマンスが出ます。
llm = Llama(
model_path=model_path,
n_gpu_layers=-1,
n_ctx=2048, # 文脈ウィンドウのサイズ
)
# 推論実行
def ask_ai(prompt):
output = llm(
f"<|begin_of_text|><|start_header_id|>user<|end_header_id|>\n\n{prompt}<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n",
max_tokens=512,
stop=["<|eot_id|>"],
echo=False
)
return output["choices"][0]["text"]
# テスト実行
if __name__ == "__main__":
question = "PythonでCSVを読み込むコードを書いて"
print(f"質問: {question}")
response = ask_ai(question)
print(f"回答:\n{response}")
このコードのポイントは n_gpu_layers=-1 です。
昔のバージョンではレイヤー数を手動で計算していましたが、現在は -1 と書くだけで自動的にGPUを最大活用してくれます。
また、Llama-3.1 などのモデルには特有のプロンプトテンプレート(<|start_header_id|>など)があります。
これを正しく設定しないと、モデルが「自分がAIであること」を忘れ、支離滅裂な回答を始めるので注意してください。
よくあるトラブルと解決法
| エラー内容 | 原因 | 解決策 |
|---|---|---|
Address already in use | 以前のプロセスがGPUを掴んだまま | fuser -v /dev/nvidia* でプロセスを特定してkillする |
| 回答が途中で切れる | max_tokens が不足している | パラメータの max_tokens を 1024 以上に増やす |
CUDA error: out of memory | VRAM容量に対してモデルが大きすぎる | 量子化ビット数を下げる(Q4→Q2)か、モデルサイズを下げる(8B→3B) |
次のステップ
ここまでできれば、あなたのPCの中に「誰にも内容を覗かれない知能」が宿ったことになります。 次のステップとしては、以下の3つをおすすめします。
- RAG(検索拡張生成)の構築:
自分のPDFファイルや社内ドキュメントを読み込ませ、それに基づいて回答するシステムを作ってみてください。
LangChainと組み合わせるのが一般的です。 - APIサーバー化:
llama-cpp-python[server]を使うと、OpenAI APIと互換性のあるローカルサーバーを立てられます。これにより、既存のアプリの向き先をlocalhostに変えるだけで、ChatGPTを自作AIに置き換えられます。 - より大きなモデルへの挑戦: もしVRAMを24GB(RTX 3090/4090)持っているなら、70Bクラスのモデルを動かしてみてください。推論の「賢さ」の次元が変わります。
ローカルLLMの世界は、一度足を踏み入れると「クラウドAPIの従量課金」が馬鹿らしくなるほどの自由度があります。 ぜひ自分の手で、この「プライベートな知能」を使い倒してみてください。
よくある質問
Q1: メモリは多ければ多いほど良いのでしょうか?
はい。ただし「メモリの量」だけでなく「帯域幅」が重要です。 MacBookの「Max」モデルが速いのは、メモリの通り道が非常に広いからです。 Windowsなら、VRAMの容量がモデルサイズ(GGUFファイルサイズ)を上回っていることが、高速動作の絶対条件です。
Q2: 実行中にPCがファンを回して唸りますが大丈夫ですか?
正常です。LLMの推論はGPUに高い負荷をかけます。 RTX 4090だと消費電力が400Wを超えることもあります。 長時間の運用を考えるなら、排熱のしっかりしたデスクトップPCか、電力効率の良いApple Silicon Macが向いています。
Q3: 日本語が不自然なモデルがあるのはなぜですか?
多くのモデルは英語データで主に学習されているからです。 日本語で使いたい場合は、今回紹介したLlama 3.1 Instructや、Qwen、Gemma 2など、多言語対応を謳っているモデルを選択するのが正解です。


