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

この記事で作るもの

この記事では、llama.cppとGGUF形式のモデルを組み合わせて、手元のPC(Windows/Mac)でLlama 3 8Bなどの最新AIを爆速で動かすPythonスクリプトを構築します。 クラウド経由のAPI(OpenAI等)を一切使わず、完全にオフラインで動作し、1秒間に50トークン以上の速度でレスポンスを返す環境を、あなたのPCの中に作り上げることがゴールです。

  • 前提知識: Pythonの基本的な読み書きができること、ターミナル(またはコマンドプロンプト)の操作に抵抗がないこと。
  • 必要なもの: 8GB以上のメモリを搭載したPC(Mac M1/M2/M3、またはNVIDIA製GPU搭載のWindows)、Python 3.10以上の環境。

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

ローカルLLMを動かす上で、CPUよりも重要なのが「VRAM(ビデオメモリ)」の容量です。 結論から言うと、VRAMが8GBあれば「Llama 3 8B」クラスのモデルを快適に動かせますが、VRAM 4GB以下だとCPU動作がメインになり、レスポンス速度は5分の1以下に低下します。

Macユーザーの場合、ユニファイドメモリがVRAMとして機能するため、メモリ16GB以上のモデルを強く推奨します。 メモリ8GBのMacBook Airでも動きますが、OSやブラウザがメモリを食い潰していると、モデルのロードすら失敗する「落とし穴」があります。

WindowsユーザーでGPUをこれから買うなら、RTX 4060 Ti 16GB版が、コストパフォーマンスとVRAM容量のバランスにおいて現状の「正解」です。 RTX 4090を2枚挿している私の環境では、ほぼ全てのオープンソースモデルが瞬時に動きますが、まずは手持ちの機材で試してから、不足を感じたらハードウェアに投資するのが賢い選択です。 API料金は0円ですが、初期投資(GPU代)と微々たる電気代が唯一のコストです。

なぜこの方法を選ぶのか

ローカルでLLMを動かす手段は、最近だと「Ollama」や「LM Studio」など、GUIでポチポチするだけの便利なツールも増えています。 しかし、私が業務でAIを組み込む際にこれらを使わず、あえて「llama.cpp」を直接触る理由は、圧倒的な「カスタマイズ性」と「リソース効率」にあります。

llama.cppはC++で書かれた非常に軽量なライブラリで、依存関係がほとんどありません。 サーバーサイドに組み込む際や、特定のGPU命令を最適化したい時、llama.cppならビルドオプション一つで性能を極限まで引き出せます。 また、GGUF(GPT-Generated Unified Format)という量子化フォーマットを使うことで、本来なら30GB以上のメモリを必要とするモデルを、精度をほぼ落とさずに5GB程度まで圧縮して動かせるのも大きな利点です。

Step 1: 環境を整える

まずはllama.cppをビルドするためのツールチェーンをインストールします。 Pythonだけで動かしたい場合も、内部でC++のコンパイルが行われるため、このステップを飛ばすと後で必ず詰まります。

Mac(Apple Silicon)の場合

# Xcode Command Line Toolsのインストール(未導入なら)
xcode-select --install

# Homebrewでビルドツールを導入
brew install cmake

Windows(NVIDIA GPU)の場合

  1. CUDA Toolkit をインストールしてください(バージョン12.x推奨)。
  2. Visual Studio 2022 をインストールし、「C++ によるデスクトップ開発」にチェックを入れてください。

⚠️ 落とし穴: WindowsでCUDAをインストールした直後は、一度再起動しないと環境パスが通らず、GPUを認識してくれません。 「ビルドは通ったのに、なぜかCPUでしか動かない」という現象の8割は、CUDAのパスが通っていないことが原因です。

Step 2: ライブラリとモデルの準備

次に、Pythonからllama.cppを叩くためのライブラリをインストールし、動かしたいモデル(GGUFファイル)をダウンロードします。

# GPU(CUDA)支援を有効にしてインストールする場合(Windows/NVIDIA)
$env:CMAKE_ARGS="-DGGML_CUDA=on"
pip install llama-cpp-python

# Mac(Metal)支援を有効にしてインストールする場合
CMAKE_ARGS="-DGGML_METAL=on" pip install llama-cpp-python

なぜ CMAKE_ARGS を指定するのか。 これを指定せずに pip install すると、CPU専用のライブラリがインストールされてしまいます。 ローカルLLMの真価はGPUでの爆速処理にありますから、このフラグは必須です。

次に、Hugging Faceからモデルを落としてきます。 今回は、日本語能力と性能のバランスが良い「Llama-3-8B-Instruct-v0.1-GGUF」を使います。

  1. Hugging Faceの該当ページへ飛ぶ。
  2. Meta-Llama-3-8B-Instruct-Q4_K_M.gguf をダウンロードする。

なぜ Q4_K_M を選ぶのか。 量子化には複数のレベル(Q2, Q4, Q8など)がありますが、Q4は「メモリ消費を半分以下に抑えつつ、精度低下が知覚できないレベル」に留まっている、実務上のスイートスポットだからです。

Step 3: 動かしてみる

ダウンロードしたモデルを配置し、最小限のコードで実行確認をします。 モデルファイル(.gguf)は、スクリプトと同じディレクトリの models/ フォルダに入れている想定です。

import os
from llama_cpp import Llama

# モデルのパスを指定
model_path = "./models/Meta-Llama-3-8B-Instruct-Q4_K_M.gguf"

# Llamaクラスの初期化
# n_gpu_layers: GPUにオフロードするレイヤー数。32GB以上のVRAMなら全レイヤー(33程度)を指定
# n_ctx: コンテキストサイズ(記憶できる長さ)。まずは2048程度でテスト
llm = Llama(
    model_path=model_path,
    n_gpu_layers=-1, # -1は全てのレイヤーをGPUに送る設定(Mac/CUDA共通)
    n_ctx=2048,
    verbose=False
)

# 推論の実行
response = llm.create_chat_completion(
    messages=[
        {"role": "system", "content": "あなたは優秀なアシスタントです。"},
        {"role": "user", "content": "ローカルLLMのメリットを3つ教えてください。"}
    ]
)

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

期待される出力

ローカルLLMの主なメリットは以下の3点です。

1. **プライバシーとセキュリティ**: データが外部サーバーに送信されないため、機密情報を扱う業務でも安心して利用できます。
2. **コストの定額化**: API使用料が発生しないため、長時間の推論や大量のテストを行っても追加費用がかかりません。
3. **オフライン動作**: インターネット接続が不安定な環境や、完全に遮断された環境でもAIを活用することが可能です。

結果の読み方ですが、n_gpu_layers=-1 に注目してください。 これがないと、どんなに高いGPUを積んでいてもCPUで計算が行われ、レスポンスまで数十秒待たされることになります。 正常に動作していれば、私のM2 Max MacBook Proでは、この回答は1秒足らずで生成されます。

Step 4: 実用レベルにする

単発の回答だけでなく、チャット履歴を保持し、ストリーミング出力(文字がパラパラ出てくる表示)に対応した実用的なクラスを作ってみましょう。 実務で使うなら、レスポンスを待つ時間はユーザー体験を損なうため、ストリーミングは必須です。

import sys
from llama_cpp import Llama

class LocalAI:
    def __init__(self, model_path):
        self.llm = Llama(
            model_path=model_path,
            n_gpu_layers=-1,
            n_ctx=4096,
            seed=42 # 再現性を確保するために固定
        )
        self.history = [{"role": "system", "content": "誠実で簡潔に回答するAIです。"}]

    def chat(self, prompt):
        self.history.append({"role": "user", "content": prompt})

        # ストリーミングを有効にして生成
        stream = self.llm.create_chat_completion(
            messages=self.history,
            stream=True
        )

        full_response = ""
        print("AI: ", end="", flush=True)

        for chunk in stream:
            delta = chunk["choices"][0]["delta"]
            if "content" in delta:
                content = delta["content"]
                print(content, end="", flush=True)
                full_response += content

        print("\n")
        self.history.append({"role": "assistant", "content": full_response})

# 実行
model_file = "./models/Meta-Llama-3-8B-Instruct-Q4_K_M.gguf"
ai = LocalAI(model_file)

while True:
    user_input = input("You: ")
    if user_input.lower() in ["exit", "quit"]:
        break
    ai.chat(user_input)

このコードでは create_chat_completionstream=True を使っています。 これにより、AIが全ての文章を書き終えるのを待つ必要がなくなり、生成されたそばから文字が表示されるようになります。 この「体感速度」の向上こそが、ローカルLLMを実運用に耐えうるものにする鍵です。

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

エラー内容原因解決策
ValidationError: ... n_gpu_layersライブラリがCPU版としてインストールされているCMAKE_ARGS を指定して再インストールしてください
out of memory (GPU)VRAM容量に対してモデルが大きすぎる、または n_ctx が大きすぎる量子化ビット数を下げる(Q4→Q2)か、n_ctx を512まで下げてみてください
生成される日本語がおかしいモデルのプロンプト形式(Chat Template)が合っていないLlama 3なら `<

次のステップ

ここまでで、あなたのPC上でLLMを動かすための最小かつ最強の基盤が整いました。 次に挑戦すべきは「RAG(検索拡張生成)」の構築です。 今回作った LocalAI クラスに、自分のPDFや過去のメモから情報を検索して回答させる機能を追加してみてください。 外部APIにデータを投げたくない社内文書の解析などは、まさにこのローカル環境が真価を発揮する場面です。

また、さらに速度を追求するなら「vLLM」や、より軽量な「Gemma 2 2B」のようなモデルを試すのも面白いでしょう。 RTX 4090を積んでいるなら、Llama 3 70BクラスをQ4量子化で動かすことにも挑戦してみてください。 世界が変わるはずです。

よくある質問

Q1: メモリが8GBしかないPCでも動きますか?

動きますが、モデル選びが重要です。 Llama 3 8BのQ4量子化は約5GBのメモリを消費するため、OSと合わせてギリギリです。 1つ下のサイズである「Gemma 2 2B」や「Phi-3 mini」を選べば、8GBメモリでもサクサク動きます。

Q2: GPUがない普通のノートPC(Intel/AMD)だと遅いですか?

正直に言うと、CPUのみでの推論は「実用としては厳しい」レベルです。 1秒間に2〜3文字程度の生成速度になるため、文章の要約をバックグラウンドで走らせるような用途なら使えますが、チャット用途ではストレスが溜まるでしょう。

Q3: 商用利用は可能ですか?

llama.cpp自体はMITライセンスですが、モデル(Llama 3等)のライセンスはMeta社が定めたものに従います。 Llama 3の場合、月間アクティブユーザー数が7億人を超えない限り、基本的には無料で商用利用可能です。 各モデルのライセンスを必ず個別に確認してください。

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

RTX 4060 Ti 16GB

VRAM 16GBでLlama 3 8Bクラスを余裕で動かせる、ローカルLLMの最適解

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

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


あわせて読みたい