ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

用 llama-bench 测出本地 LLM 推理的真实速度

用 llama-bench 测出本地 LLM 推理的真实速度 用 llama-bench 测出本地 LLM 推理的真实速度【免费下载链接】llama.cppLLM inference in C/C项目地址: https://gitcode.com/GitHub_Trending/ll/llama.cpp把同一个 7B 模型丢到两台配置一样的机器上一台能跑出 130 t/s另一台只有 40 t/s——你很难说哪台该快因为手测的速度混杂了加载、预热、后台进程等各种干扰。llama.cpp 自带的llama-bench工具就是为这个设计的固定测试流程、自动预热、每轮重复多次专测 LLM 推理速度这一件事。它测两类指标ppPrompt Processing模型读题的速度和 tgText Generation逐字往外吐的速度。两者瓶颈不同调参方向也不同所以分开测才有意义。下面按跑通基线 → 扫参数找拐点 → 结果入库留痕三步来。 确认后端后跑出一组可信基线基线要可信前提是加速后端真的生效了。跑测试前先用--list-devices看一眼 llama-bench 当前看到的设备确认后端是 CUDA 还是只能落在 CPU 上./llama-bench --list-devices再跑一次默认基线默认处理 512 个 prompt token、生成 128 个每个测 5 轮取平均./llama-bench -m models/7B/ggml-model-q4_0.gguf输出是一张 Markdown 表列包括模型、backend、ngl卸载到 GPU 的层数、test 和 t/smodelsizebackendngltestt/sllama 7B mostly Q4_03.56 GiBCUDA-1pp 5122368.80 ± 93.24llama 7B mostly Q4_03.56 GiBCUDA-1tg 128131.42 ± 0.59注意两点一是±后面的标准差数值越小说明这几轮越稳定二是 pp 和 tg 差一个数量级属正常现象——tg 每个 token 都要把整个模型权重过一遍受显存带宽钳制而 pp 是把多个 token 拼成矩阵一次算完吃的是算力。上图就是批量的本质prefill 阶段把 512 个 token 的嵌入拼成大矩阵 A和权重 B 一次乘完GPU 自然吃得很饱。后面要调的-b参数调的就是这块矩阵的切片大小。 扫 -ngl 找拐点tg 从 13 t/s 到 131 t/s默认-ngl -1表示把全部层丢给 GPU但如果你只想把部分层放显存比如留空间给 KV cache就得逐档试。用逗号列出多个值一条命令扫完 4 档./llama-bench -m models/7B/ggml-model-q4_0.gguf -ngl 10,20,30,35卸载层数pp 512 (t/s)tg 128 (t/s)10373.3613.4520472.6521.3630631.8740.0435全部层2400.01131.66两个结论都藏在数字里只要还有一层留在 CPU 上每步推理就要在主机内存和显存之间搬一次权重tg 就被钉在 40 t/s 以下35 层全卸载后pp 从 88134 层时跳到 2400说明最后几层的跨设备搬运代价远比想象中重。纯 CPU 场景换成扫-t线程数./llama-bench -n 0 -n 16 -p 64 -t 1,2,4,8,16,32线程数pp 64 (t/s)tg 16 (t/s)16.174.05832.2916.711633.5215.323259.0016.41pp 随线程线性上涨但 tg 在 8 线程到峰值 16.71 后16 线程反而回落到 15.32——逐字生成是内存带宽型任务线程越多核与核之间抢带宽越厉害线程越多越快只对 pp 成立。 把结果灌进 SQLite每次升级自动对账一次性对比靠表格就够了但要追踪换量化 / 换版本 / 换驱动之后速度是涨是跌得把结果留下来。-o sql会输出带建表语句的 SQL里面包含 CPU 型号、GPU 型号、线程数、批大小等完整配置直接喂给 sqlite3 即可入库./llama-bench -m models/7B/ggml-model-q4_0.gguf -o sql | sqlite3 bench.db以后每次升级 llama.cpp 或换模型跑同一条命令再对比表里avg_ts一列哪个版本引入了性能回退一目了然。llama.cpp 的 CI 就是用-o jsonl这套流程持续记录每次提交的性能数据原理和你本地留痕完全一样。一个小提醒llama-bench的计时不含分词和采样时间所以它测出的 tg 会比客户端实际体感略快一点横向对比没问题别拿它当绝对值。跑完这三步你手上就有了设备 模型 参数组合对应的可复现速度基线。下一步自然是把这份基线带上换量化档位对比体积与速度的取舍或者用-d预填充上下文专门测长对话里生成阶段会不会掉速。【免费下载链接】llama.cppLLM inference in C/C项目地址: https://gitcode.com/GitHub_Trending/ll/llama.cpp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进