llama.cpp 推理框架深度使用
llama.cpp 是一个轻量级的大语言模型推理框架,纯 C/C++ 实现,无外部依赖,支持 CPU、GPU 和 Apple Silicon 推理,是本地部署和边缘推理的首选方案。
核心特性
- 纯 C/C++ 实现:零依赖,编译简单
- 多后端支持:CPU (AVX2/AVX-512)、CUDA、Metal、Vulkan、OpenCL
- 量化格式:GGML/GGUF 格式,支持 Q2_K 到 Q8_0 多种量化
- LoRA 支持:运行时加载 LoRA 适配器
- 多模态:支持 LLaVA 等视觉语言模型
bash
# 编译 CUDA 版本
make LLAMA_CUDA=1 -j$(nproc)
# 编译 Metal (macOS) 版本
make LLAMA_METAL=1 -j$(nproc)
# 命令行推理
./llama-cli \
-m models/llama-2-7b.Q4_K_M.gguf \
-p "解释什么是 Transformer" \
-n 256 \
--temp 0.7 \
--top-p 0.9GGUF 量化格式
GGUF 是 llama.cpp 使用的模型格式,支持多种量化级别:
| 量化类型 | 位宽 | 模型大小 (7B) | 质量损失 | 推荐场景 |
|---|---|---|---|---|
| Q8_0 | 8-bit | ~7.5GB | 极小 | 质量优先 |
| Q5_K_M | 5-bit | ~4.8GB | 小 | 均衡选择 |
| Q4_K_M | 4-bit | ~4.1GB | 中 | 通用推荐 |
| Q3_K_M | 3-bit | ~3.3GB | 较大 | 显存紧张 |
| Q2_K | 2-bit | ~2.7GB | 大 | 极端压缩 |
python
# Python 绑定使用
from llama_cpp import Llama
llm = Llama(
model_path="models/llama-2-7b.Q4_K_M.gguf",
n_ctx=4096,
n_gpu_layers=32, # GPU 加速层数
n_threads=8,
)
output = llm.create_chat_completion(
messages=[
{"role": "user", "content": "用 Python 实现快速排序"}
],
max_tokens=512,
temperature=0.7,
)
print(output["choices"][0]["message"]["content"])性能调优
关键性能参数:
n_gpu_layers:卸载到 GPU 的层数,全部卸载性能最优n_ctx:上下文窗口大小,影响显存占用n_batch:批处理大小,默认 512n_threads:CPU 线程数,建议设为物理核心数
GPU 卸载策略
对于 7B 模型,Q4_K_M 量化约需 4.1GB 显存。8GB 显存的 GPU 可以完全卸载;4GB 显存则需部分卸载,将 n_gpu_layers 设为 16-20。
服务器模式
llama.cpp 内置 HTTP 服务器,兼容 OpenAI API:
bash
# 启动服务器
./llama-server \
-m models/llama-2-7b.Q4_K_M.gguf \
--host 0.0.0.0 \
--port 8080 \
-c 4096 \
-ngl 32 \
--parallel 4 # 并行请求数并行限制
CPU 推理模式下并行能力有限。--parallel 参数控制同时处理的请求数,过大会导致延迟急剧上升。建议 CPU 模式设为 1-2,GPU 模式可设为 4-8。