llama-cpp について
llama-cppは、llama.cppでLLM推論を行うためのスキルです。CPUのみの環境、Apple Silicon、AMD/Intel GPU、エッジ環境での利用を想定し、CLIやサーバーモード、ハードウェアアクセラレーション、GGUF量子化を扱います。
主な機能
- 01CPUと各種GPUでの推論
- 02コマンドラインとサーバーモード
- 03GGUF量子化フォーマット
- 04バッチ処理と制約付き生成
- 05コンテキスト長の設定
活用シーン
- 01CPUのみのマシンでモデルを実行
- 02Apple Siliconへのデプロイ
- 03AMDまたはIntel GPUでの推論
- 04エッジデバイス向け推論の設定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ kalarislabs/ research-agent-skills --skill llama-cppインストール後、Claude Code で/llama-cppを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/optimization.mdquantization.mdserver.md詳細
llama.cpp
依存関係を最小限に抑え、CPU および NVIDIA 以外のハードウェア向けに最適化された、純粋な C/C++ LLM 推論です。
llama.cpp を使用する場合
次の場合は llama.cpp を使用してください:
- CPU のみのマシンで実行する場合
- Apple Silicon(M1/M2/M3/M4)にデプロイする場合
- AMD または Intel GPU(CUDA なし)を使用する場合
- エッジ環境にデプロイする場合(Raspberry Pi、組み込みシステム)
- Docker/Python を使わずにシンプルにデプロイする必要がある場合
次の場合は代わりに TensorRT-LLM を使用してください:
- NVIDIA GPU(A100/H100)を使用している場合
- 最大スループット(100K+ tok/s)が必要な場合
- CUDA を使用するデータセンターで実行する場合
次の場合は代わりに vLLM を使用してください:
- NVIDIA GPU を使用している場合
- Python を優先した API が必要な場合
- PagedAttention を使用する場合
クイックスタート
インストール
# macOS/Linux
brew install llama.cpp
# Or build from source
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make
# With Metal (Apple Silicon)
make LLAMA_METAL=1
# With CUDA (NVIDIA)
make LLAMA_CUDA=1
# With ROCm (AMD)
make LLAMA_HIP=1
モデルをダウンロード
# Download from HuggingFace (GGUF format)
huggingface-cli download \
TheBloke/Llama-2-7B-Chat-GGUF \
llama-2-7b-chat.Q4_K_M.gguf \
--local-dir models/
# Or convert from HuggingFace
python convert_hf_to_gguf.py models/llama-2-7b-chat/
推論を実行
# Simple chat
./llama-cli \
-m models/llama-2-7b-chat.Q4_K_M.gguf \
-p "Explain quantum computing" \
-n 256 # Max tokens
# Interactive chat
./llama-cli \
-m models/llama-2-7b-chat.Q4_K_M.gguf \
--interactive
サーバーモード
# Start OpenAI-compatible server
./llama-server \
-m models/llama-2-7b-chat.Q4_K_M.gguf \
--host 0.0.0.0 \
--port 8080 \
-ngl 32 # Offload 32 layers to GPU
# Client request
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama-2-7b-chat",
"messages": [{"role": "user", "content": "Hello!"}],
"temperature": 0.7,
"max_tokens": 100
}'
量子化形式
GGUF 形式の概要
| 形式 | ビット数 | サイズ(7B) | 速度 | 品質 | 用途 |
|---|---|---|---|---|---|
| Q4_K_M | 4.5 | 4.1 GB | 高速 | 良好 | 推奨されるデフォルト |
| Q4_K_S | 4.3 | 3.9 GB | より高速 | 低め | 速度が重要な場合 |
| Q5_K_M | 5.5 | 4.8 GB | 中程度 | より良好 | 品質が重要な場合 |
| Q6_K | 6.5 | 5.5 GB | 低速 | 最高 | 最高品質 |
| Q8_0 | 8.0 | 7.0 GB | 低速 | 非常に良好 | 劣化を最小限に抑える場合 |
| Q2_K | 2.5 | 2.7 GB | 最速 | 低い | テストのみ |
量子化方式の選択
# General use (balanced)
Q4_K_M # 4-bit, medium quality
# Maximum speed (more degradation)
Q2_K or Q3_K_M
# Maximum quality (slower)
Q6_K or Q8_0
# Very large models (70B, 405B)
Q3_K_M or Q4_K_S # Lower bits to fit in memory
ハードウェアアクセラレーション
Apple Silicon(Metal)
# Build with Metal
make LLAMA_METAL=1
# Run with GPU acceleration (automatic)
./llama-cli -m model.gguf -ngl 999 # Offload all layers
# Performance: M3 Max 40-60 tokens/sec (Llama 2-7B Q4_K_M)
NVIDIA GPU(CUDA)
# Build with CUDA
make LLAMA_CUDA=1
# Offload layers to GPU
./llama-cli -m model.gguf -ngl 35 # Offload 35/40 layers
# Hybrid CPU+GPU for large models
./llama-cli -m llama-70b.Q4_K_M.gguf -ngl 20 # GPU: 20 layers, CPU: rest
AMD GPU(ROCm)
# Build with ROCm
make LLAMA_HIP=1
# Run with AMD GPU
./llama-cli -m model.gguf -ngl 999
よくあるパターン
バッチ処理
# Process multiple prompts from file
cat prompts.txt | ./llama-cli \
-m model.gguf \
--batch-size 512 \
-n 100
制約付き生成
# JSON output with grammar
./llama-cli \
-m model.gguf \
-p "Generate a person: " \
--grammar-file grammars/json.gbnf
# Outputs valid JSON only
コンテキストサイズ
# Increase context (default 512)
./llama-cli \
-m model.gguf \
-c 4096 # 4K context window
# Very long context (if model supports)
./llama-cli -m model.gguf -c 32768 # 32K context
パフォーマンスベンチマーク
CPU パフォーマンス(Llama 2-7B Q4_K_M)
| CPU | スレッド数 | 速度 | コスト |
|---|---|---|---|
| Apple M3 Max | 16 | 50 tok/s | $0(ローカル) |
| AMD Ryzen 9 7950X | 32 | 35 tok/s | $0.50/時間 |
| Intel i9-13900K | 32 | 30 tok/s | $0.40/時間 |
| AWS c7i.16xlarge | 64 | 40 tok/s | $2.88/時間 |
GPU アクセラレーション(Llama 2-7B Q4_K_M)
| GPU | 速度 | CPU 比 | コスト |
|---|---|---|---|
| NVIDIA RTX 4090 | 120 tok/s | 3-4× | $0(ローカル) |
| NVIDIA A10 | 80 tok/s | 2-3× | $1.00/時間 |
| AMD MI250 | 70 tok/s | 2× | $2.00/時間 |
| Apple M3 Max(Metal) | 50 tok/s | ~同等 | $0(ローカル) |
対応モデル
LLaMA ファミリー:
- Llama 2(7B、13B、70B)
- Llama 3(8B、70B、405B)
- Code Llama
Mistral ファミリー:
- Mistral 7B
- Mixtral 8x7B、8x22B
その他:
- Falcon、BLOOM、GPT-J
- Phi-3、Gemma、Qwen
- LLaVA(画像)、Whisper(音声)
モデルを探す:https://huggingface.co/models?library=gguf
参考資料
リソース
- GitHub:https://github.com/ggerganov/llama.cpp
- モデル:https://huggingface.co/models?library=gguf
- Discord:https://discord.gg/llama-cpp
エージェントの運用手順
- 環境を確認します。 ハードウェア、フレームワークとサーバーのバージョン、モデル形式、想定負荷を確認します。
- 入力を明確にします。 データまたはユーザーから、形式、識別子、パラメーターを確認します。結果に影響する値は推測せず、質問してください。
- まず小規模に実行します。 スケールアップする前に、単一のリクエストを処理または記録するか、エンドツーエンドで実行します。
- 上記の手順と参考資料に従って、タスク全体を実行します。
- 結果を検証します。 レイテンシー、スループット、出力の正確性を参照データと比較して測定し、リソース使用量とコストを確認します。
- 報告します。 実行した内容(バージョン、コマンド、パラメーター)、確認した内容、未解決の点を伝えます。
| こうなった場合 | 対応方法 |
|---|---|
| サーバーの起動に失敗するか、OOM が発生する | モデルサイズとメモリーの関係、量子化と並列処理の設定を確認します。 |
| インストール済みバージョンに、これらの手順にある関数、フラグ、エンドポイントがない | インストール済みバージョンのドキュメント(help()、--help、公式ドキュメント)を確認して適宜対応し、ユーザーに伝えます。API を決して捏造しないでください。 |
| 必須の入力、識別子、パラメーターが曖昧である | ユーザーに質問するか、実行前に前提を明示します。 |
誠実性に関するルール
- 結果、パラメーター、識別子、引用、統計を決して捏造しないでください。実行または検証できないことがある場合は、率直に伝えます。
- サービスや認証情報を公開しないでください。プロビジョニングの前にクラウドのコストを確認します。
- ここに記載されているバージョン固有の詳細は古くなっている可能性があるため、インストール済みバージョンの公式ドキュメントで確認します。
- 費用が発生する操作、共有 GPU やクラウドのクォータを消費する操作、個人データや患者データを扱う操作、取り消せない操作の前には、ユーザーに確認します。
関連スキル
gguf-quantization:効率的な CPU/GPU 推論のための GGUF 形式と llama.cpp の量子化。tensorrt-llm:NVIDIA TensorRT を使用して LLM 推論を最適化し、スループットを最大化してレイテンシーを最小化します。gptq:AutoGPTQ と transformers を使用し、グループ単位の量子化(デフォルトのグループサイズは 128)で LLM を 4 ビット(3 ビットにも)に量子化します。
コメント
Markdown 対応