mcpField
L
llama-cpp

llama-cpp

github.com/tdimino开发4145 次安装1 周前更新
代码仓库

关于 llama-cpp

这款技能通过脚本将 llama.cpp 用作辅助推理引擎,支持运行模型、启动 API 服务、加载 LoRA 适配器及与 Ollama 对比基准测试。面向需要在 Apple Silicon 上配置推理和模型开发流程的用户。

主要功能

  1. 01用 llama-cli 运行 GGUF 模型
  2. 02启动兼容 OpenAI 的 API 服务
  3. 03热加载 LoRA 适配器
  4. 04与 Ollama 对比推理基准
  5. 05将 LoRA 适配器转换为 GGUF
  6. 06解析 Ollama 模型对应的 GGUF 文件

适用场景

  1. 01在基础模型上测试 LoRA 适配器
  2. 02比较 llama.cpp 与 Ollama 的推理速度
  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 - 次级推理引擎

直接使用 llama.cpp,可在 Apple Silicon 上实现更快的推理、加载 LoRA 适配器并进行基准测试。Ollama 仍是 RLAMA 和一般用途的首选;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 服务

为 Qwen3.5 模型提供专用服务,支持非对称 KV 缓存、jinja 模板和思考模式。

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(适用于 64+ GB 系统):

~/.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 上下文运行)。与 FP16 缓存相比,非对称 KV 缓存(q8_0 键 + q4_0 值)可节省约 60% 的 KV 内存。

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/)

子进程最佳实践(Build 8180+)

从脚本或子进程调用 llama-cli 时:

  • 务必使用 --single-turn——生成一条响应后退出(避免交互式聊天模式挂起)
  • 务必使用 --simple-io——禁用会淹没重定向输出的 ANSI 加载动画
  • 务必使用 --no-display-prompt——禁用提示词回显
  • 使用 --n-gpu-layers all,而不是旧版 -ngl 999
  • 使用 --flash-attn on(不要只写 --flash-attn)——现在该选项需要参数
  • 计时统计信息会以 [ Prompt: X t/s | Generation: Y t/s ] 的形式显示在标准输出中(通过 --show-timings,默认:开启)
  • 将标准错误重定向到文件,而非变量——加载动画输出可能导致 bash 变量溢出

评论

支持 Markdown