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

この記事で作るもの

自分のPC内にllama.cppを用いたLLM推論環境を構築し、OpenAI互換のAPIサーバーを立ち上げます。 Pythonの基礎知識があれば、外部の有料APIに1円も払うことなく、プライバシーが完全に守られた状態のAIチャットや自動化スクリプトを動かせるようになります。 ハードウェアの制約で諦めていた巨大なモデル(70Bクラス)を、量子化技術によって家庭用PCで動かす具体的な手順を網羅しました。

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

ローカルLLMを動かす上で、最も重要なのはGPUの「VRAM(ビデオメモリ)」容量です。 結論から言うと、最低でもVRAM 8GB、快適に動かすなら12GB以上、大規模モデルを狙うなら16GB〜24GBが推奨ラインになります。 私が運用しているRTX 4090(24GB)であれば、70Bクラスのモデルを4bit量子化(GGUF形式)することで、実用的な速度で動作可能です。

Macユーザーであれば、Apple Silicon(M1/M2/M3/M4)を搭載しており、メモリ(ユニファイドメモリ)が16GB以上あれば十分に戦えます。 Macの強みはVRAMという概念がなく、メインメモリの多くをGPUに割り当てられる点で、32GBや64GB積んだMac StudioなどはローカルLLM機として非常に優秀です。

もしGPUがない場合でも、llama.cppはCPU推論が非常に高速なため、16GB以上のRAMがあれば動作自体は可能です。 ただし、生成速度は「1秒間に1〜3文字」程度になる覚悟が必要です。 初期費用以外にランニングコストは電気代のみで、API利用料のような従量課金は一切発生しません。

なぜこの方法を選ぶのか

ローカルLLMを動かす手段には、OllamaやLM Studioなど、より簡単なGUIツールも存在します。 しかし、あえてllama.cppを直接触る理由は「圧倒的な自由度」と「軽量さ」にあります。

Ollamaは内部でllama.cppを動かしていますが、細かいパラメータ(Context Windowの調整や、KVキャッシュの設定など)をいじるには限界があります。 また、最新のモデルが公開された際、GGUF形式であれば数時間後にはHugging Faceにアップロードされますが、Ollamaのライブラリに登録されるまでにはタイムラグが生じることが多いです。 実務で「特定の業務に特化したマイナーなモデル」を使いたい場合、llama.cppを直接叩けるスキルは必須と言えます。

さらに、llama.cppはC++で書かれており、依存関係が非常に少ないのもメリットです。 Pythonの仮想環境が壊れて動かなくなるようなトラブルに悩まされることもありません。 「仕事で使う」のであれば、ブラックボックス化されたツールよりも、中身が見えるllama.cppを選ぶのが正解だと私は確信しています。

Step 1: 環境を整える

まずはllama.cppをビルド(自分のPCで動く形式に変換)します。 今回は、最も汎用性が高い「ビルド済みバイナリを使わない方法」を解説します。 自分でビルドすることで、お使いのGPU(CUDA)の性能を100%引き出すことができるからです。

Windows (NVIDIA GPU使用) の場合

  1. Visual Studio 2022をインストールし、「C++ によるデスクトップ開発」にチェックを入れます。
  2. CUDA Toolkit(12.x推奨)をインストールします。
# リポジトリのクローン
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp

# ビルド用ディレクトリの作成
mkdir build
cd build

# CMakeでビルド設定。CUDAを有効化するのがポイントです。
cmake .. -DGGML_CUDA=ON

# ビルド実行(PCのスペックによりますが5分程度で終わります)
cmake --build . --config Release

Mac (Apple Silicon) の場合

Xcode Command Line Toolsが入っていれば、非常に簡単です。

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

※Macの場合、デフォルトでMetal(GPU加速)が有効になるため、追加のフラグは不要です。

⚠️ 落とし穴: Windowsユーザーで「CUDAをインストールしたのにCPUでしか動かない」という相談をよく受けます。 これは、ビルド時に-DGGML_CUDA=ONを忘れているか、ビルド前にシステム環境変数にCUDAのパスが通っていないことが原因です。 cmakeの出力ログを読み、CUDA not foundと出ていないか必ず確認してください。

Step 2: 基本の設定

次に、動かしたいモデル(脳にあたる部分)をダウンロードします。 llama.cppで動かすには「GGUF」という形式である必要があります。 Hugging Faceで「モデル名 GGUF」と検索すると、Bartowski氏やMaziyarPanahi氏といった有名なコントリビューターが変換済みモデルを公開しています。

今回は、日本語能力が高く軽量な「Llama-3.1-8B-Instruct」を例にします。 量子化サイズは「Q4_K_M」を選んでください。 これは、精度をほぼ落とさずにファイルサイズを約半分(5GB程度)に抑えた、実用上のスイートスポットです。

# llama.cppディレクトリ内にmodelsフォルダを作成
mkdir models

# Hugging FaceからGGUFファイルをダウンロード(例としてcurlを使用)
# 実際にはブラウザでダウンロードしてmodels/に置くのが確実です
curl -L https://huggingface.co/bartowski/Meta-Llama-3.1-8B-Instruct-GGUF/resolve/main/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf -o models/llama-3.1-8b.gguf

量子化の選び方で迷ったら、以下の基準で判断してください。

  • Q2 / Q3: 精度が目に見えて落ちる。メモリが極端に少ない場合のみ。
  • Q4_K_M: おすすめ。速度、サイズ、精度のバランスが最強。
  • Q8_0: ほぼ元モデルと同じ精度だが、サイズが巨大。VRAMに余裕があるならこれ。

Step 3: 動かしてみる

まずは、CLI(コマンドライン)で最小限の動作確認を行います。 ここでの成功が、サーバー化への第一歩です。

# Windows (build/bin/Release/llama-cli.exe)
# Mac (./llama-cli)

./llama-cli -m models/llama-3.1-8b.gguf \
  -p "あなたは優秀なエンジニアです。Pythonで素数を判定する関数を書いてください。" \
  -n 512 \
  -ngl 99

各フラグの意味を解説します。

  • -m: モデルファイルのパス。
  • -p: プロンプト(指示内容)。
  • -n: 生成する最大トークン数。
  • -ngl: 「GPUに何レイヤー載せるか」の設定。99と指定すれば全レイヤーをGPUに載せ、爆速になります。VRAMが足りない場合はこの数字を下げます。

期待される出力

def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

このように、コードが返ってくれば成功です。 もし「1秒間に1文字」のような速度であれば、-nglが効いておらずCPU推論になっている可能性があります。 ログに CUDA [0] detectedMetal detected と出ているかを確認してください。

Step 4: 実用レベルにする

単体で動かすだけでは不便なので、これをOpenAI互換のAPIサーバーとして立ち上げます。 これにより、CursorやDify、あるいは自作のPythonアプリから「ChatGPTの代わりに自分のPC」を呼び出せるようになります。

サーバーの起動

./llama-server -m models/llama-3.1-8b.gguf \
  --port 8080 \
  --ctx-size 8192 \
  --ngl 99

--ctx-size は文脈(記憶)の長さです。8192(8k)程度あれば、長めのドキュメントを読み込ませるRAGの実装にも耐えられます。

Pythonから呼び出すスクリプト

次に、別のターミナルを開いて以下のPythonコードを実行してみてください。 openaiライブラリをそのまま使えるのが、llama.cppサーバーの素晴らしい点です。

import openai

# OpenAIライブラリを使用するが、接続先をローカルに変更する
client = openai.OpenAI(
    base_url="http://localhost:8080/v1", # llama-serverのURL
    api_key="sk-no-key-required"         # ローカルなので何でも良い
)

def ask_local_ai(prompt):
    try:
        response = client.chat.completions.create(
            model="gpt-3.5-turbo", # 実際にはllama-serverが動かすモデルが使われる
            messages=[
                {"role": "system", "content": "あなたは技術解説に長けたブログライターです。"},
                {"role": "user", "content": prompt}
            ],
            temperature=0.7
        )
        return response.choices[0].message.content
    except Exception as e:
        return f"エラーが発生しました: {str(e)}"

if __name__ == "__main__":
    result = ask_local_ai("llama.cppを使うメリットを3つ、箇条書きで教えてください。")
    print(result)

この構成の強みは、プログラム側を一切変えずに「本物のOpenAI API」と「ローカルLLM」をスイッチできることです。 開発中はローカルで無料で回し、本番投入時だけクラウドAPIを使うといった運用が現実的になります。

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

エラー内容原因解決策
out of memoryVRAM不足-ngl の値を下げる(例: 20にする)か、より小さい量子化モデル(Q3など)を使う。
llama-cli: command not foundパスが通っていないビルドしたバイナリの場所を確認。Macならカレントディレクトリ、Windowsなら build/bin/Release 内にある。
生成内容が文字化けするモデルの日本語能力不足日本語学習済みモデル(Llama-3-Swallowなど)のGGUF版を使用する。
推論が極端に遅いCPU推論になっている-ngl 99 を指定し、ビルド時にCUDA/Metalが有効になっているかログを再確認。

次のステップ

llama.cppでAPIサーバーが立てられるようになったら、次は「モデルの入れ替え」に挑戦してください。 最近では「Qwen2.5」や「Gemma 2」といったモデルが、小規模ながらGPT-4に匹敵する性能を見せています。 これらもGGUF形式で公開されているため、今回の手順のモデルファイル名を変えるだけでそのまま使えます。

さらに、この記事で立てたAPIサーバーを「Dify」や「LibreChat」といったOSSのチャットUIと連携させるのがおすすめです。 そうなれば、自分専用の、誰にも見られない、完全に無料のAIアシスタント環境が完成します。 機密情報を扱う業務でAIを使いたいなら、この「ローカル完結」という選択肢以外にはあり得ません。

ローカルLLMの世界は日進月歩です。 毎日Hugging Faceのトレンドをチェックし、新しいGGUFを試す習慣をつけるだけで、AIエンジニアとしての視座は格段に高まります。

よくある質問

Q1: 4bit量子化(Q4_K_M)で精度はどのくらい落ちますか?

体感できるほどの低下はほぼありません。 Perplexity(言語モデルの正確性指標)の測定結果でも、16bit版と4bit版の差はごく僅かであることが証明されています。 むしろ、量子化によってメモリ消費を60%以上削減し、推論速度を2倍以上に高めるメリットの方が、実務上は遥かに大きいです。

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

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

Q3: Pythonパッケージの「llama-cpp-python」とは何が違うのですか?

llama-cpp-python は今回紹介したllama.cppをPythonから直接扱えるようにしたラッパーです。 Pythonスクリプト内にLLMを組み込みたい場合は便利ですが、純粋な推論サーバーを立てるなら、本家llama.cppの方がパフォーマンスが高く、アップデートも速いためおすすめです。


1. X投稿用ツイート本文 (TWEET_TEXT) 2. アフィリエイト商品情報 (AFFILIATE_CONTEXT)

3. SNS拡散用ハッシュタグ (HASHTAGS) 4. SEOタグ (SEO_TAGS) 5. URLスラッグ (SLUG)

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

RTX 4060 Ti 16GB

VRAM 16GBでLlama-3の8Bを余裕で動かせ、コスパ良くローカルLLMを始めるのに最適

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

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


あわせて読みたい