llama.cpp 的定位
llama.cpp 用 C/C++ 实现推理,对 CPU 与消费级显卡友好,权重用 GGUF 单文件格式。它的配套工具分工明确:llama-cli 做命令行交互,llama-server 提供 OpenAI 兼容的 HTTP 服务,llama-quantize 把高精度权重量化到指定档位,llama-bench 做吞吐基线。它是边缘设备、桌面机与显存受限场景最常用的方案。
基本信息
| 权重格式 | GGUF 单文件,内含多种量化档位 |
|---|---|
| 服务端口 | llama-server 默认监听 8080 |
| GPU 卸载 | -ngl 指定放到 GPU 的层数 |
| 构建方式 | CMake 构建,按后端开关决定是否启用 CUDA 等 |
| 对话模板 | 由 GGUF 内嵌模板或启动参数指定,模板错会导致输出异常 |
编译与启动服务
编译与启动服务
# 拉源码并按 CUDA 后端构建(纯 CPU 去掉 -DGGML_CUDA=ON)
git clone https://github.com/ggml-org/llama.cpp
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -j
# 启动 HTTP 服务:-ngl 99 表示尽量把全部层放到 GPU
./build/bin/llama-server -m /data/models/qwen2.5-7b-q4_k_m.gguf \
-c 8192 -ngl 99 --host 0.0.0.0 --port 8080
# 验证接口
curl http://127.0.0.1:8080/v1/models关键参数
| 参数 | 作用 |
|---|---|
| -m | GGUF 权重文件路径,必填 |
| -c | 上下文长度,直接决定 KV 显存占用 |
| -ngl | 放到 GPU 的层数,显存不够时往下调 |
| -t | CPU 线程数,纯 CPU 推理时影响明显 |
| --host / --port | 监听地址与端口,默认只对本机开放 |
| -fa | 启用 FlashAttention(按版本与硬件支持情况) |
典型使用场景
- 没有数据中心显卡时的推理方案:CPU 加内存也能跑通 7B 级模型
- 显存受限的桌面机:把部分层放 GPU、其余留 CPU,用速度换可用性
- 边缘与端侧设备:量化到 4 位甚至 3 位后部署到内存受限的机器
- 把 Hugging Face 权重转成 GGUF,再交给 Ollama 或本地工具加载
- 做量化档位对比:同一模型不同档位在同一台机器上跑基准,量化收益一目了然
-ngl 超过模型实际层数不会报错:确认真实层数要看 llama-server 启动日志里打印的层数与卸载信息。
二进制名称随版本演进:早期的 main 已改为 llama-cli,量化脚本也从 convert.py 演进到 convert_hf_to_gguf.py,照抄旧教程会找不到文件。
上下文与并发一起吃显存:-c 调大后 KV 占用线性增长,显存不够时先把层数从 GPU 收回,再考虑缩短上下文。