mcpField
L
llama-cpp

llama-cpp

github.com/tdimino開発4145 回インストール1 週間前に更新
リポジトリ

llama-cpp について

llama.cppを副次的な推論エンジンとして使うためのスキルで、モデル実行、APIサーバー起動、LoRAアダプターの読み込み、Ollamaとのベンチマーク用スクリプトを備えています。Apple Siliconで推論やモデル開発の設定を行うユーザー向けです。

主な機能

  1. 01llama-cliでGGUFモデルを実行
  2. 02OpenAI互換APIサーバーの起動
  3. 03LoRAアダプターの動的読み込み
  4. 04Ollamaとの推論ベンチマーク
  5. 05LoRAアダプターをGGUFに変換
  6. 06OllamaモデルのGGUFファイルを特定

活用シーン

  1. 01ベースモデル上でLoRAアダプターを試す
  2. 02Ollamaとの推論速度を比較
  3. 03設定可能なAPI経由でモデルを提供
  4. 04学習パイプラインのLoRA出力をGGUFに変換

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/tdimino/claude-code-minoan --skill llama-cpp

インストール後、Claude Code で/llama-cppを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

README.md
scripts/
convert_lora_to_gguf.py
convert_to_train_txt.py
eval_local.sh
llama_bench.sh
llama_lora.sh
llama_serve_qwen35_9b.sh
llama_serve_qwen35.sh
llama_serve.sh
ollama_model_path.sh
train_local.sh

詳細

llama.cpp - セカンダリ推論エンジン

Apple Silicon での高速な推論、LoRA アダプターの読み込み、ベンチマークのために llama.cpp に直接アクセスします。RLAMA と一般用途では引き続き Ollama をプライマリとして使用し、llama.cpp は高性能なツールとして活用します。

前提条件

brew install llama.cpp

バイナリ:llama-cli、llama-server、llama-embedding、llama-quantize

クイックリファレンス

Ollama モデルから GGUF パスを解決する

モデルファイルの重複を避けるため、Ollama のモデル名から GGUF の blob パスを解決します。

~/.claude/skills/llama-cpp/scripts/ollama_model_path.sh qwen2.5:7b
推論を実行する
GGUF=$(~/.claude/skills/llama-cpp/scripts/ollama_model_path.sh qwen2.5:7b)
llama-cli -m "$GGUF" -p "Your prompt here" -n 128 --n-gpu-layers all --single-turn --simple-io --no-display-prompt
API サーバーを起動する

OpenAI 互換サーバーを起動します(ポート 8081。Ollama の 11434 を避けます)。

~/.claude/skills/llama-cpp/scripts/llama_serve.sh <model.gguf>

# Or with options:
PORT=8082 CTX=8192 ~/.claude/skills/llama-cpp/scripts/llama_serve.sh <model.gguf>

サーバーをテストします。

curl http://localhost:8081/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"default","messages":[{"role":"user","content":"Hello"}]}'
Qwen3.5 をサーブする

非対称 KV キャッシュ、jinja テンプレート、思考モードに対応する Qwen3.5 モデル専用サーバーです。

9B Dense(24~36GB システムに推奨):

# Default: Qwen3.5-9B, thinking mode, 32K context
~/.claude/skills/llama-cpp/scripts/llama_serve_qwen35_9b.sh

# Full precision F16 (~17.9 GB, zero quantization loss)
~/.claude/skills/llama-cpp/scripts/llama_serve_qwen35_9b.sh ~/models/Qwen3.5-9B-BF16.gguf

# Non-thinking mode, shorter context
THINK=0 CTX=8192 ~/.claude/skills/llama-cpp/scripts/llama_serve_qwen35_9b.sh

35B MoE(64GB 以上のシステム向け):

~/.claude/skills/llama-cpp/scripts/llama_serve_qwen35.sh  # defaults to qwen3.5:35b-a3b

9B Q4 は約 6.6 GB を使用します(十分な余裕があります)。F16 は約 17.9 GB を使用し、36GB のシステムで 32K コンテキストとともに動作します。非対称 KV キャッシュ(q8_0 キー+q4_0 値)を使用すると、FP16 キャッシュと比べて KV メモリを約 60% 削減できます。

F16(フル精度)モード

最高品質(量子化による損失なし)を実現するには、BF16 GGUF をダウンロードしてサーブします。

# Download once (~17.9 GB)
huggingface-cli download unsloth/Qwen3.5-9B-GGUF "Qwen3.5-9B-BF16.gguf" --local-dir ~/models

# Serve F16
~/.claude/skills/llama-cpp/scripts/llama_serve_qwen35_9b.sh ~/models/Qwen3.5-9B-BF16.gguf

M4 Max 36GB での F16 と Q4 の比較:

Q4_K_M(デフォルト)BF16(F16)
サイズ6.6 GB17.9 GB
速度約 38 tok/s約 8~12 tok/s
品質約 99.5%100%(基準)
最大コンテキスト262K約 32K(快適に使用可能)
ベンチマーク(llama.cpp と Ollama の比較)
~/.claude/skills/llama-cpp/scripts/llama_bench.sh qwen2.5:7b

両エンジンのプロンプト処理と生成の tok/s を並べて報告します。

LoRA アダプターによる推論

ベース GGUF モデルに LoRA アダプターを動的に読み込みます(マージ不要)。

~/.claude/skills/llama-cpp/scripts/llama_lora.sh <base.gguf> <lora.gguf> "Your prompt"

これは Ollama に対する大きな利点です。モデルを再構築せずに LoRA アダプターをホットスワップできます。

Kothar LoRA を GGUF に変換する

Kothar トレーニングパイプラインの HuggingFace LoRA アダプターを、マージ済みの GGUF モデルに変換します。

python3 ~/.claude/skills/llama-cpp/scripts/convert_lora_to_gguf.py \
  --base NousResearch/Hermes-2-Mistral-7B-DPO \
  --lora <path-or-hf-id> \
  --output kothar-q4_k_m.gguf \
  --quantize q4_k_m

llama.cpp と Ollama の使い分け

タスク使用するもの
RLAMA クエリOllama(ネイティブ統合)
手早くモデルとチャットするOllama(ollama run)
LoRA アダプターのテストllama.cpp(llama_lora.sh)
tok/s のベンチマークllama.cpp(llama_bench.sh)
推論速度の最大化llama.cpp(10~20% 高速)
カスタムサーバー設定llama.cpp(llama_serve.sh)
埋め込みの生成どちらでも可(Ollama の方が簡単、llama-embedding の方が制御性に優れる)
Kothar GGUF 変換llama.cpp(convert_lora_to_gguf.py)

アーキテクチャ

Ollama (primary, port 11434)          llama.cpp (secondary, port 8081)
├── RLAMA RAG queries                 ├── LoRA adapter hot-loading
├── Model management (pull/list)      ├── Benchmarking
├── General chat                      ├── Custom server configs
└── Embeddings (nomic-embed-text)     └── Kothar GGUF conversion

Both share the same GGUF model files (~/.ollama/models/blobs/)

サブプロセスのベストプラクティス(ビルド 8180 以降)

スクリプトやサブプロセスから llama-cli を呼び出す場合:

  • 必ず --single-turn を使用します — 1 回応答を生成して終了します(対話チャットモードでハングするのを防ぎます)。
  • 必ず --simple-io を使用します — リダイレクトされた出力を大量に埋め尽くす ANSI スピナーを抑制します。
  • 必ず --no-display-prompt を使用します — プロンプトのエコーを抑制します。
  • 従来の -ngl 999 ではなく --n-gpu-layers all を使用します。
  • 引数なしの --flash-attn ではなく --flash-attn on を使用します — 現在は引数が必要です。
  • タイミング統計は stdout に [ Prompt: X t/s | Generation: Y t/s ] と表示されます(--show-timings 経由。デフォルト:オン)。
  • stderr は変数ではなくファイルにリダイレクトします — スピナーの出力が bash の変数の上限を超える可能性があります。

コメント