Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

7. llama.cppの実践とエコシステム

ビルド手順(CMake / Make)

llama.cpp を利用する最も基本的な方法は、GitHub リポジトリからソースコードをクローンしてビルドすることです。 Windows、macOS、Linux の各 OS で CMake を使って簡単にコンパイルできます。

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

# CMake を使ったビルド(CPU 版の標準構成)
cmake -B build
cmake --build build --config Release

NVIDIA GPU(CUDA)を利用する場合は、CMake のオプションに -DGGML_CUDA=ON を指定します。 macOS(Metal)の場合は、標準で Metal が自動有効化されるため、特別なフラグなしで GPU 加速が有効になります。

GGUFモデルの入手と準備(Hugging Faceからのダウンロード)

推論を実行するには、GGUF 形式に変換・量子化されたモデルファイルが必要です。 AI コミュニティのハブである Hugging Face 上には、様々な開発者(例えば TheBloke 氏や Bartowski 氏、各モデル開発企業)によって事前量子化された .gguf ファイルが大量に公開されています。

例えば、Hugging Face CLI や curl を使ってモデルをダウンロードします。

# 7B または 8B クラスの Q4_K_M モデルをダウンロードする例
curl -L -O https://huggingface.co/bartowski/Meta-Llama-3.1-8B-Instruct-GGUF/resolve/main/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf

自身で PyTorch や Hugging Face 形式のモデルから GGUF を生成したい場合は、llama.cpp リポジトリに含まれる convert_hf_to_gguf.py スクリプトを使用して直接変換・量子化することも可能です。

CLIツール(llama-cli)による対話実行

ビルドが完了すると、build/bin/ 配下に llama-cli(旧名: main)という実行ファイルが生成されます。 このコマンドラインツールを使って、ターミナル上で直接対話を行うことができます。

# 対話(チャット)モードで起動する例
./build/bin/llama-cli \
  -m Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf \
  -p "あなたは親切なAIアシスタントです。" \
  -cnv \
  -ngl 33 \
  -c 4096 \
  --temp 0.7

主要なオプションの意味は以下の通りです:

  • -m <path>: ロードする GGUF モデルファイルのパスを指定します。
  • -cnv: 対話型会話(conversation)モードを有効にします。
  • -ngl <N>: GPU にオフロードするレイヤー数を指定します(全層を GPU に載せる場合は大きな数値、例えば 33 や 99 を指定)。
  • -c <N>: コンテキスト長(文脈メモリ)のトークン数を指定します(例: 4096)。
  • --temp <N>: 生成の多様性・ランダム性(温度パラメータ)を制御します。

ローカルAPIサーバー(llama-server)とOpenAI互換エンドポイント

llama.cpp には、高速な HTTP Web サーバー llama-server(旧名: server)が付属しています。 このサーバーを起動すると、OpenAI の REST API(/v1/chat/completions)と完全互換のエンドポイントがローカル環境に提供されます。

# ローカル API サーバーの起動
./build/bin/llama-server \
  -m Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf \
  --port 8080 \
  -ngl 33 \
  -c 8192

サーバーが起動した状態で、Python の公式 openai クライアントや curl からアクセスできます。

# curl によるテスト呼び出し
curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {"role": "user", "content": "こんにちは!自己紹介してください。"}
    ]
  }'

この互換性により、OpenAI API 向けに作られた既存の Web アプリケーションやエージェントシステムを、コード変更なしで完全ローカルなプライベート環境に差し替えることができます。

Pythonバインディング(llama-cpp-python)によるプログラム連携

Python から llama.cpp の C++ エンジンを直接呼び出したい場合は、公式バインディングライブラリである llama-cpp-python を利用します。

pip install llama-cpp-python

以下は Python スクリプトから GGUF モデルをロードして推論を行う例です:

from llama_cpp import Llama

# モデルのロード(n_gpu_layers=-1 で全層を GPU にオフロード)
llm = Llama(
    model_path="Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf",
    n_ctx=4096,
    n_gpu_layers=-1,
    verbose=False
)

# チャット補完の実行
response = llm.create_chat_completion(
    messages=[
        {"role": "system", "content": "あなたは簡潔に答える技術アシスタントです。"},
        {"role": "user", "content": "llama.cpp の利点を3つ箇条書きで教えてください。"}
    ],
    temperature=0.7,
    max_tokens=256
)

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

このように、llama.cpp は単なる推論バイナリにとどまらず、開発言語やアプリケーションを問わず組み込める柔軟なエコシステムを形成しています。 次章では、LLaMA から始まったオープンモデルエコシステムの広がりと、今後の展望についてまとめます。