想在本地跑大模型但不想装一堆Python依赖和CUDA?llama.cpp是目前最实用的方案——纯C/C++实现的LLM推理引擎,支持CPU推理,量化后在消费级硬件上就能跑。这篇记录从编译安装到实际使用的全过程。
llama.cpp是什么
llama.cpp是Georgi Gerganov开发的LLM推理引擎,核心特点:
- 纯C/C++,无Python依赖,编译后就是一个可执行文件
- 支持CPU推理,不强制要求GPU
- 量化推理,4bit量化后模型体积缩小到原来的1/4,速度快内存省
- 跨平台,Linux/macOS/Windows都能跑
- 支持多种模型,LLaMA、Mistral、ChatGLM、Qwen等主流模型都支持
一句话总结:让大模型在普通电脑上跑起来。
编译安装
基础编译(CPU)
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make -j$(nproc)
编译完成后会得到几个关键可执行文件:
main:基本推理server:HTTP API服务quantize:模型量化工具
启用GPU加速(CUDA)
如果有NVIDIA显卡:
make LLAMA_CUDA=1 -j$(nproc)
需要提前安装CUDA Toolkit。编译后推理速度提升显著——7B模型在RTX 3080上能到50+ tokens/s。
启用Apple Silicon加速
Mac M系列芯片:
make LLAMA_METAL=1 -j$(nproc)
Metal后端在M1/M2上表现不错,7B模型大约能到20-30 tokens/s。
GGUF模型格式
llama.cpp使用GGUF格式的模型文件(之前是GGML,已废弃)。GGUF是一个自描述的二进制格式,包含模型权重和元数据。
获取模型最简单的方式是从HuggingFace下载现成的GGUF文件。TheBloke是最活跃的量化模型发布者,几乎所有热门模型都有他量化的版本。
# 下载示例:Mistral-7B的Q4_K_M量化版
wget https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.1-GGUF/nesolve/main/mistral-7b-instruct-v0.1.Q4_K_M.gguf
量化级别
量化是让大模型在消费级硬件上跑的关键。不同量化级别的对比:
| 量化类型 | 每权重比特数 | 7B模型大小 | 质量损失 | 适用场景 |
|---|---|---|---|---|
| Q2_K | 2.5bit | ~2.7GB | 较大 | 极限压缩 |
| Q3_K_M | 3.5bit | ~3.3GB | 明显 | 内存紧张 |
| Q4_K_M | 4.5bit | ~4.1GB | 较小 | 推荐 |
| Q5_K_M | 5.5bit | ~4.8GB | 很小 | 质量优先 |
| Q6_K | 6.5bit | ~5.5GB | 极小 | 接近原版 |
| Q8_0 | 8bit | ~7.2GB | 几乎无 | 最高质量 |
| F16 | 16bit | ~13.5GB | 无 | 原版精度 |
日常使用推荐 Q4_K_M,它在模型大小、推理速度和输出质量之间取得了最佳平衡。如果内存充裕可以用Q5_K_M。
"K"系列量化(K-quant)是改进的量化方法,对不同层使用不同的量化粒度,比简单的Q4_0效果好不少。
命令行使用
基本对话
./main -m mistral-7b-instruct-v0.1.Q4_K_M.gguf -n 512 --temp 0.7 --repeat-penalty 1.1 -p "[INST] 用Python写一个快速排序 [/INST]"
参数说明:
-m:模型文件路径-n:最大生成token数--temp:温度,越低越确定性--repeat-penalty:重复惩罚-p:提示词
启动HTTP Server
./server -m mistral-7b-instruct-v0.1.Q4_K_M.gguf --host 0.0.0.0 --port 8080 -c 4096 -ngl 35
-ngl 35 表示把35层offload到GPU。启动后可以用OpenAI兼容的API调用:
curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{
"messages": [{"role": "user", "content": "Hello!"}],
"temperature": 0.7,
"max_tokens": 256
}'
这个兼容接口很方便,意味着很多基于OpenAI SDK的应用只需要改一下base_url就能切到本地模型。
Python绑定:llama-cpp-python
如果更习惯Python:
pip install llama-cpp-python
# GPU版本
CMAKE_ARGS="-DLLAMA_CUDA=on" pip install llama-cpp-python
使用:
from llama_cpp import Llama
llm = Llama(
model_path="mistral-7b-instruct-v0.1.Q4_K_M.gguf",
n_ctx=4096, # 上下文长度
n_gpu_layers=35, # GPU加速层数
n_threads=8, # CPU线程数
)
output = llm(
"[INST] 解释什么是RESTful API [/INST]",
max_tokens=512,
temperature=0.7,
stop=["[INST]", "</s>"],
)
print(output["choices"][0]["text"])
也可以用OpenAI兼容模式:
from llama_cpp import Llama
llm = Llama(model_path="model.gguf", chat_format="chatml")
response = llm.create_chat_completion(
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "什么是快速排序?"}
]
)
print(response["choices"][0]["message"]["content"])
性能参考
以下是 7B 模型在不同配置下的典型性能数据(仅供参考,实际表现取决于硬件):
| 配置 | 推理速度 (tokens/s) | 首token延迟 |
|---|---|---|
| CPU only (Q4_K_M) | ~8 | ~2s |
| GPU full offload (Q4_K_M) | ~55 | ~0.3s |
| GPU full offload (Q5_K_M) | ~48 | ~0.3s |
| GPU full offload (Q8_0) | ~32 | ~0.5s |
13B模型在同等规格的显卡上,Q4_K_M量化可以全部放进显存,速度大约30 tokens/s。对于交互式使用完全够用。
实用建议
- 模型选择:从7B模型开始,对话用Mistral-7B-Instruct,中文用ChatGLM3-6B或Qwen-7B-Chat
- 量化选择:日常用Q4_K_M,质量敏感场景用Q5_K_M
- 内存规划:模型文件大小 + 2GB左右的运行开销就是所需内存
- GPU offload:有多少显存就offload多少层,
-ngl慢慢加直到显存快满 - 上下文长度:
-c设太大会占很多内存,按需设置
llama.cpp让"本地跑大模型"变得非常容易。配合量化技术,消费级硬件就能获得不错的体验。对于想在本地做AI应用开发的人来说,这是必备工具。