llama.cpp部署
轻量级本地LLM推理框架
概述
llama.cpp是一个用C++编写的高效LLM推理框架,最初为LLaMA模型设计,现已支持多种开源模型。 以其轻量、跨平台、CPU推理能力著称,是本地部署LLM的首选方案之一。
核心优势:纯C++实现、CPU推理、内存效率高、支持多种量化。
核心特性
CPU推理
高度优化的CPU推理,AVX/AVX2/ARM NEON指令集加速。
GPU加速
支持CUDA、Metal、Vulkan等GPU后端。
量化支持
多种量化方案:Q4_0, Q4_K_M, Q5_K_M, Q8_0等。
跨平台
Linux、macOS、Windows、Android、iOS。
安装与编译
# 克隆仓库 git clone https://github.com/ggerganov/llama.cpp cd llama.cpp # 编译(CPU版本) make # 编译(CUDA版本) make LLAMA_CUDA=1 # 编译(Metal - macOS) make LLAMA_METAL=1 # 安装Python绑定 pip install llama-cpp-python
模型转换
# 将Hugging Face模型转换为GGUF格式 python convert-hf-to-gguf.py /path/to/model \ --outfile model-f16.gguf \ --outtype f16 # 量化模型 ./llama-quantize model-f16.gguf model-q4_k_m.gguf Q4_K_M # 量化类型说明 # Q4_0: 最小体积,精度较低 # Q4_K_M: 推荐,平衡精度和大小 # Q5_K_M: 更高精度,稍大 # Q8_0: 最高精度,最大体积
命令行使用
# 基本推理 ./llama-cli -m model-q4_k_m.gguf -p "Hello, how are you?" # 交互模式 ./llama-cli -m model-q4_k_m.gguf -i # 聊天模式 ./llama-cli -m model-q4_k_m.gguf \ -p "You are a helpful assistant." \ -cnv # 指定GPU层数(部分GPU卸载) ./llama-cli -m model-q4_k_m.gguf \ -p "Hello" \ -ngl 32 # 将32层卸载到GPU # 服务模式(兼容OpenAI API) ./llama-server -m model-q4_k_m.gguf \ --host 0.0.0.0 \ --port 8080
Python API
from llama_cpp import Llama
# 加载模型
llm = Llama(
model_path="./model-q4_k_m.gguf",
n_ctx=2048, # 上下文长度
n_gpu_layers=32, # GPU层数
verbose=False
)
# 生成文本
output = llm(
"Q: What is machine learning? A:",
max_tokens=128,
stop=["Q:", "\n"],
echo=True
)
print(output['choices'][0]['text'])
# 聊天补全
response = llm.create_chat_completion(
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
]
)
print(response['choices'][0]['message']['content'])量化方案对比
| 量化类型 | 7B模型大小 | 速度 | 推荐场景 |
|---|---|---|---|
| F16 | 14GB | 基准 | 最高精度 |
| Q8_0 | 7.5GB | 快 | 高精度需求 |
| Q5_K_M | 5.3GB | 较快 | 平衡选择 |
| Q4_K_M | 4.4GB | 快 | 推荐 |
| Q4_0 | 3.9GB | 最快 | 资源受限 |
性能优化参数
| 参数 | 说明 | 推荐值 |
|---|---|---|
| -ngl / n_gpu_layers | 卸载到GPU的层数 | 全部或尽可能多 |
| -b / n_batch | 批处理大小 | 512 |
| -t / n_threads | CPU线程数 | 物理核心数 |
| -c / n_ctx | 上下文长度 | 根据需求 |
| -mlock | 锁定内存,避免交换 | 推荐启用 |
与Ollama对比
| 特性 | llama.cpp | Ollama |
|---|---|---|
| 易用性 | 命令行为主 | 开箱即用 |
| 模型管理 | 手动 | 自动下载 |
| 底层技术 | 原生 | 基于llama.cpp |
| 自定义程度 | 高 | 中等 |
最佳实践
- 推荐使用Q4_K_M或Q5_K_M量化
- GPU推理时设置ngl为全部层数
- CPU推理使用-mlock避免内存交换
- 服务部署使用llama-server
- 长上下文注意内存占用
参考资料
- llama.cpp GitHub Repository
- llama-cpp-python Documentation
- GGUF Format Specification
----