SuperAPI AI 工具集

llama-cpp

智能体与模型

查看项目

更新于 10-16 02:22

技能介绍

llama.cpp 在本技能中被定位为辅助推理引擎(secondary inference engine),提供对 llama.cpp 的直接访问,用于更快的推理、LoRA 适配器加载以及在 Apple Silicon 上的基准测试。Ollama 仍是 RLAMA 与一般用途的首选,llama.cpp 则作为进阶工具使用。

【前置条件】 通过 Homebrew 安装:brew install llama.cpp。涉及的二进制文件包括:llama-cli、llama-server、llama-embedding、llama-quantize。

【快速参考:运行推理】 为避免重复模型文件,可先用脚本将一个 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> 或带选项: 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 系统):

默认:Qwen3.5-9B,思考模式,32K 上下文

~/.claude/skills/llama-cpp/scripts/llama_serve_qwen35_9b.sh

全精度 F16(约 17.9 GB,零量化损失)

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

非思考模式,更短上下文

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 # 默认 qwen3.5:35b-a3b 9B Q4 约占用 6.6 GB(余量充足);F16 约占用 17.9 GB(在 36GB 上可配 32K 上下文)。非对称 KV 缓存(q8_0 键 + q4_0 值)相比 FP16 缓存可节省约 60% 的 KV 内存。

【F16 全精度模式】 为获得最高质量(零量化损失),可下载并服务 BF16 GGUF:

下载一次(约 17.9 GB)

huggingface-cli download unsloth/Qwen3.5-9B-GGUF "Qwen3.5-9B-BF16.gguf" --local-dir ~/models

服务 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(默认)为 6.6 GB、约 38 tok/s、质量约 99.5%、最大上下文 262K;BF16(F16)为 17.9 GB、约 8-12 tok/s、质量 100%(参考)、约 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;LoRA 适配器测试、tok/s 基准测试、最大推理速度(快 10-20%)、自定义服务器配置、Kothar GGUF 转换则建议使用 llama.cpp。

【架构】 Ollama(主,端口 11434)负责 RLAMA RAG 查询、模型管理(pull/list)、一般聊天、嵌入(nomic-embed-text);llama.cpp(辅,端口 8081)负责 LoRA 适配器热加载、基准测试、自定义服务器配置、Kothar GGUF 转换。两者共享同一批 GGUF 模型文件(~/.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 ] 形式出现在 stdout(通过 --show-timings,默认开启);将 stderr 重定向到文件而不是变量。