跑本地模型的人最后都会问:我这硬件到底能跑多快?llama.cpp 自带的 llama-bench 就是用来回答这个问题的。它能给出精确的 tokens/秒,帮你把硬件利用率压榨到极限。
核心指标就两个:提示词处理速度(PP) 和 文本生成速度(TG)。PP 决定长文档喂入的效率,TG 直接影响对话流畅感。
准备与基础跑分
先编译出 llama-bench:
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make llama-bench
有了 GGUF 模型后,直接跑默认测试:
./llama-bench -m models/7B/ggml-model-q4_0.gguf
输出是 Markdown 表格,默认测试提示词处理 512 tokens、文本生成 128 tokens。下面是 RTX 4080 上的典型结果:
| model | size | params | backend | ngl | test | t/s |
|---|---|---|---|---|---|---|
| llama 7B mostly Q4_0 | 3.56GiB | 6.74B | CUDA | 99 | pp512 | 2368.80±93.24 |
| llama 7B mostly Q4_0 | 3.56GiB | 6.74B | CUDA | 99 | tg128 | 131.42±0.59 |
t/s 列即 tokens/秒,±后面是多次运行的标准差。
测试模式可以组合:单独测提示处理(-p 1024 -n 0)、单独测生成(-p 0 -n 256),或者模拟真实对话用 -pg 512,128。我习惯先用默认跑一遍摸底,再按自己的典型用例定制参数。
调参三板斧
GPU 层数:最立竿见影的优化
-ngl 控制卸载到 GPU 的层数。如果显存放得下,直接设为 99 一次性卸载所有层。对比一下 7B 模型在 RTX 4080 上的效果:
./llama-bench -m models/7B/ggml-model-q4_0.gguf -ngl 10,20,30,35
| ngl | pp512 t/s | tg128 t/s |
|---|---|---|
| 10 | 373.36±2.25 | 13.45±0.93 |
| 35 | 2400.01±7.72 | 131.66±0.49 |
从 13 涨到 131 t/s,接近 10 倍提升。所以有 GPU 时,-ngl 99 几乎是我的首选,除非显存不够。
线程数:别贪多
CPU 推理靠多线程,但线程数超过物理核心后,上下文切换反而拖慢速度。在 8 核 CPU 上,可以试试这几个值:
./llama-bench -t 4,8,16,32 -p 64 -n 16

