首页/AI/大模型部署与运维速查/llama.cpp 与 GGUF 生态
部署形态与选型43 条

llama.cpp 与 GGUF 生态

llama.cpp 对 CPU 与消费级 GPU 友好,用 GGUF 量化格式在单机跑模型;配套 llama-cli(交互)、llama-server(HTTP 服务)、llama-quantize(量化)等工具。

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

关键参数

参数作用
-mGGUF 权重文件路径,必填
-c上下文长度,直接决定 KV 显存占用
-ngl放到 GPU 的层数,显存不够时往下调
-tCPU 线程数,纯 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 收回,再考虑缩短上下文。

易错点

  • 整个权重都塞进 GPU 却显存不足:报错常出现在加载阶段,先把 -ngl 调小让部分层留在 CPU 即可启动
  • 按旧教程执行命令:二进制与脚本名在版本间变化,脚本升级后需要回归验证
  • 忽略对话模板:模板与模型不匹配时输出会出现角色标记错乱或答非所问
  • 在没有 CUDA 环境的机器上带 GPU 开关构建:构建失败或运行时找不到设备,先确认工具链再决定构建选项
  • 把 llama-server 暴露到公网:默认没有鉴权与配额,必须由网关或反向代理收口

数据来源与参考

  • llama.cpp GitHub 仓库文档(github.com/ggml-org/llama.cpp)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌