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

この記事で作るもの

この記事を読むと、Llama 3 8Bなどの最新モデルを自分のPCで高速に動かし、Pythonから制御する環境が完成します。 単に「動いた」で終わらせず、量子化による精度と速度のトレードオフを理解し、業務アプリに組み込める構成を目指します。

  • Pythonの基本的な読み書きができること

  • ターミナル(コマンドプロンプトやPowerShell)に抵抗がないこと

  • Windows/Mac/Linuxを搭載したPC

  • NVIDIA製GPU(VRAM 8GB以上推奨)または Apple Silicon搭載Mac

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

ローカルLLMを始める際、もっとも重要なのは「VRAM(ビデオメモリ)」の容量です。 結論から言うと、80億パラメータ(8B)のモデルを実用的な速度で動かすなら、VRAMは8GB以上を推奨します。 RTX 4060 Ti 16GB版は、安価ながらVRAMが多く、この分野では「コスパ最強の入門ボード」です。

Macの場合、ユニファイドメモリをAIが共有できるため、メモリ16GB以上のモデルならLlama-3-8Bを軽快に動かせます。 逆に、VRAM 4GB以下の古いGPUや、メモリ8GBのMacでは、動作はしますがレスポンスが1秒間に1〜2文字程度になり、ストレスが溜まります。 このガイドで紹介する「GGUF」と「llama.cpp」を使えば、モデルを圧縮してVRAM消費を半分以下に抑えられます。

クラウドAPI(GPT-4など)を使えば月額$20や従量課金が発生しますが、この記事の方法は一度機材を揃えれば電気代以外は完全に無料です。 プライバシーが重要なデータを扱うなら、ローカル環境は唯一の選択肢になります。

なぜこの方法を選ぶのか

ローカルでLLMを動かす方法はいくつかありますが、私は「llama.cpp」一択だと考えています。 Python標準の「Transformers」ライブラリは、VRAMが1MBでも足りないとエラーを吐いて止まります。 一方、llama.cppはC++で書かれており、VRAMが足りない分をメインメモリ(RAM)に逃がして動かし続ける「オフロード」機能が極めて優秀です。

また、「GGUF」というファイル形式は、量子化(モデルの軽量化)の管理が非常に楽です。 昔の「GPTQ」や「AWQ」は特定のライブラリやGPU世代に依存することが多かったのですが、GGUFはCPU、GPU(NVIDIA/AMD/Apple)を問わず動作します。 「どんな環境でも、とにかく動く」という安定性が、実務では何よりの価値になります。

Step 1: 環境を整える

まずは、llama.cppを自分のPCでコンパイル(ビルド)します。 「ビルド」と聞くと難しそうですが、最近はコマンド数行で終わります。

Mac(Apple Silicon)の場合

Xcode Command Line Toolsをインストールしている前提で進めます。

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

Macの場合は、これだけで「Metal」というApple独自のGPU加速が有効になります。 ビルドが終わると、ディレクトリ内に llama-cli という実行ファイルが生成されます。

Windows(NVIDIA GPU)の場合

Windowsでは、CUDAを有効にしてビルドする必要があります。 事前に「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 を忘れると、CPUだけで処理することになり、動作が10倍以上遅くなります。

⚠️ 落とし穴: Windowsで cmake が見つからない場合は、Visual Studioの「C++によるデスクトップ開発」ワークロードが入っているか確認してください。 また、パス(環境変数)が通っていないとビルドに失敗します。 環境構築で詰まったら、一旦WSL2(Ubuntu)上で構築するのも一つの手ですが、GPUのパススルー設定が初心者には少しハードルが高いかもしれません。

Step 2: モデルのダウンロードと量子化の選択

次に、動かすための「心臓」となるモデルファイルを用意します。 今回は、Metaが公開している「Llama-3-8B-Instruct」を量子化したものを使います。

Hugging Faceで「Bartowski/Meta-Llama-3-8B-Instruct-GGUF」のような、有志が量子化済みのファイルを配布しているリポジトリを探すのが一番早いです。 自力で量子化する手間を省けます。

どの量子化タイプを選ぶべきか

ファイル名に「Q4_K_M」や「Q8_0」と書いてありますが、私は以下の基準で選んでいます。

  • Q4_K_M (4-bit): 私の推奨です。精度低下はわずか1〜2%ですが、ファイルサイズは元の半分(約5GB)になります。VRAM 8GBのカードで余裕を持って動きます。
  • Q8_0 (8-bit): ほぼ無劣化ですが、ファイルサイズは倍になります。VRAM 12GB以上あるならこちら。
  • IQ2_M / Q2_K: 2bitまで落とすと、明らかに回答が「バカ」になります。よほどメモリが足りない時以外は避けましょう。

まずは Meta-Llama-3-8B-Instruct-Q4_K_M.gguf をダウンロードして、llama.cpp/models フォルダに置いてください。

Step 3: 動かしてみる

ターミナルから、まずはコマンドラインで動作確認を行います。

# Macの場合
./llama-cli -m models/Meta-Llama-3-8B-Instruct-Q4_K_M.gguf -p "You are a helpful assistant. AIについての短い詩を書いてください。" -n 128 -ngl 99

# Windowsの場合
.\build\bin\Release\llama-cli.exe -m models/Meta-Llama-3-8B-Instruct-Q4_K_M.gguf -p "You are a helpful assistant. AIについての短い詩を書いてください。" -n 128 -ngl 99

パラメータの解説

  • -m: モデルファイルのパス。
  • -p: プロンプト(指示)。
  • -n: 生成する最大トークン数。
  • -ngl 99: 「GPUに何レイヤーオフロードするか」の数値。99を指定すれば、モデルの全層をGPUに載せようとします。これが 0 だとCPUだけで動くので注意してください。

期待される出力

(詩の内容が数秒で生成される)
llama_print_timings:        load time =     523.12 ms
llama_print_timings:      sample time =      12.45 ms /    56 runs   (    0.22 ms per token,  4497.99 tokens per second)
llama_print_timings: prompt eval time =     145.67 ms /    18 tokens (    8.09 ms per token,   123.57 tokens per second)
llama_print_timings:        eval time =    1245.89 ms /    55 runs   (   22.65 ms per token,    44.15 tokens per second)

末尾の eval time が生成速度です。44 tokens per second 程度出ていれば、人間が読むスピードを遥かに超えているので大成功です。

Step 4: 実用レベルにする(Python連携)

コマンドラインで動くだけでは業務に使えません。 llama-cpp-python というライブラリを使い、OpenAI APIと互換性のある形式で呼び出せるようにします。

インストール

ここでもGPU加速を有効にするための環境変数が必要です。

# NVIDIA GPUの場合
$env:CMAKE_ARGS="-DGGML_CUDA=ON"
pip install llama-cpp-python

# Macの場合
CMAKE_ARGS="-DGGML_METAL=on" pip install llama-cpp-python

Pythonスクリプトの作成

import os
from llama_cpp import Llama

# モデルの初期化
# n_gpu_layers=-1 は「全レイヤーをGPUに載せる」という意味
llm = Llama(
    model_path="./models/Meta-Llama-3-8B-Instruct-Q4_K_M.gguf",
    n_gpu_layers=-1,
    n_ctx=2048, # コンテキストウィンドウ(記憶できる長さ)
)

def ask_ai(question: str):
    try:
        response = llm.create_chat_completion(
            messages=[
                {"role": "system", "content": "あなたは優秀なエンジニアです。"},
                {"role": "user", "content": question}
            ],
            temperature=0.7,
        )
        return response["choices"][0]["message"]["content"]
    except Exception as e:
        return f"エラーが発生しました: {str(e)}"

# テスト実行
if __name__ == "__main__":
    query = "Pythonでllama.cppを使うメリットを3行で教えて"
    result = ask_ai(query)
    print(result)

このコードの肝は n_gpu_layers=-1 です。 これを指定しないと、せっかくのGPUが使われずCPUで処理されてしまいます。 また、n_ctx はモデルが一度に扱えるトークン数です。 Llama 3は最大8kや128kをサポートしていますが、大きくしすぎるとVRAMを大量に消費するため、最初は2048(約3000文字)程度で試すのが無難です。

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

エラー内容原因解決策
Address already in use以前のプロセスが残っているターミナルを閉じるかプロセスをキルする
CUDA error: out of memoryVRAM不足n_gpu_layers を減らす(例: 20)
生成速度が異様に遅いCPUで動作しているビルド時に GGML_CUDA=ON 等を指定したか再確認
意味不明な文字列が出るプロンプト形式のミスモデル固有のChat Templateを確認する

次のステップ

ここまでで、自分だけの「プライベートGPT」が手に入りました。 次はこれをさらに活用するために、以下の3つに挑戦してみてください。

  1. RAG(検索拡張生成)の構築: 自分の持っているPDFやドキュメントを読み込ませ、それに基づいた回答をさせるシステムです。 LangChain や LlamaIndex と、今回の llama-cpp-python を組み合わせることで実現できます。

  2. サーバー化: llama-cpp-python には、OpenAI互換のWeb APIサーバーを立てる機能が内蔵されています。 python -m llama_cpp.server --model models/... と叩くだけで、CursorやDifyなどの外部ツールから自作サーバーをGPT-4の代わりに指定できるようになります。

  3. より大きなモデルへの挑戦: もしVRAMが24GB以上あるなら、Llama-3-70Bの量子化版を試してください。 8Bとは次元の違う「知能」を体感できるはずです。 私は仕事のコードレビューには、70BクラスのローカルLLMを好んで使っています。

よくある質問

Q1: メモリはどれくらいあれば足りますか?

8Bモデル(4bit量子化)なら、GPUのVRAMが8GBあれば十分です。 PC全体のメインメモリ(RAM)は16GBあればOS含めて安定して動作します。 もし70Bクラスを動かしたいなら、最低でもVRAM 24GB、またはMacならメモリ64GB以上が欲しくなります。

Q2: 量子化すると、どのくらい頭が悪くなりますか?

4bit(Q4_K_M)であれば、体感できるほどの劣化はありません。 ベンチマーク上でも精度低下は数%以内です。 ただし、3bit以下に落とすと、急に文脈を無視したり、同じ言葉を繰り返したりする「崩壊」が始まります。 実務では4bit以上を死守することをお勧めします。

Q3: 日本語はちゃんと喋れますか?

Llama 3は標準でも日本語を話せますが、たまに英語が混ざることがあります。 日本語能力を重視するなら、日本の有名企業(ELYZAやCyberAgentなど)が公開している、日本語で追加学習(ファインチューニング)されたGGUFモデルを探して使ってみてください。 使い方は今回の手順と全く同じです。

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

RTX 4060 Ti 16GB

VRAM 16GBでLlama-3-8Bを無劣化で動かせる、ローカルLLMの入門機として最適

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

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


あわせて読みたい