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 から始まったオープンモデルエコシステムの広がりと、今後の展望についてまとめます。