Skip to content

llama.cpp 推理框架深度使用

llama.cpp 是一个轻量级的大语言模型推理框架,纯 C/C++ 实现,无外部依赖,支持 CPU、GPU 和 Apple Silicon 推理,是本地部署和边缘推理的首选方案。

llama.cpp推理框架

核心特性

  • 纯 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.9

GGUF 量化格式

GGUF 是 llama.cpp 使用的模型格式,支持多种量化级别:

量化类型位宽模型大小 (7B)质量损失推荐场景
Q8_08-bit~7.5GB极小质量优先
Q5_K_M5-bit~4.8GB均衡选择
Q4_K_M4-bit~4.1GB通用推荐
Q3_K_M3-bit~3.3GB较大显存紧张
Q2_K2-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:批处理大小,默认 512
  • n_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。

相关资源

最近更新