llama-bench 性能测试与解读指南

llama-benchllama.cpp 自带的基准测试工具,用于评估大语言模型(LLM)在特定硬件环境下的推理性能。通过它,我们可以量化硬件的算力边界、显存带宽瓶颈以及并发处理能力。

一、 快速上手命令

在终端进入 llama.cpp 编译目录,运行以下命令(以 3090 显卡测试 4B 模型为例):

Bash

# -m: 模型路径
# -ngl: 卸载到 GPU 的层数(99 表示全卸载)
# -b: 指定测试的 batch 大小,模拟不同并发压力
llama-bench -m ./models/qwen3-4b.gguf -ngl 99 -b 1,2,4,8,16,32

二、 核心测试指标:PP 与 TG

测试结果中最重要的两个指标是 pp512tg128,它们代表了模型工作的两个核心阶段。

1. pp512 (Prompt Processing) —— “理解速度”

  • 含义:模型处理输入(Prompt)的速度。
  • 场景:你按下回车后,系统处理你那段话的速度。
  • 决定因素GPU 算力 (TFLOPS)
  • 用户体验:决定了首字延迟 (TTFT)。数值越高,第一个字蹦出来的越快。

2. tg128 (Token Generation) —— “说话速度”

  • 含义:模型生成输出(Decoding)的速度。
  • 场景:模型一个字一个字往外蹦的过程。
  • 决定因素显存带宽 (Memory Bandwidth)
  • 用户体验:决定了打字机速度。数值越高,生成的文字流越丝滑。

三、 结果解读示例(以 RTX 3090 为例)

假设你得到的测试结果如下:

n_batchtestt/s (每秒 Token)
1pp512176.74
1tg128184.80
16pp5121789.20
16tg128183.71

深度逻辑拆解:

  1. 为什么 pp512n_batch 暴涨?
    • 计算密集型特性:处理 Prompt 时,GPU 可以利用矩阵乘法的并行性,一次性并行计算多个 Token。
    • 结论:硬件在处理长文本或多用户同时发起请求时,有极强的并行潜力。上例中 16 并发比单并发快了 10 倍。
  2. 为什么 tg128 始终在 184 左右纹丝不动?
    • 访存密集型特性:生成每个 Token 都需要把整个模型从显存里“读”一遍。GPU 搬运模型权重的物理速度(显存带宽)是固定的。
    • 结论显存带宽是生成的硬瓶颈。 无论是一次生一个人的话,还是同时生 16 个人的话,GPU 总共每秒只能产出约 184 个 Token。

四、 并发量与用户体验的计算公式

基于 llama-bench 的数据,我们可以推算真实业务中的用户体验:

单用户感知速度 = 总吞吐量 (Total TG t/s) ÷ 并发请求数

  • 1 人使用时:用户看到的速度是 184 t/s(秒出全文)。
  • 16 人同时使用时:每人看到的速度是
    • 注:由于 11.5 t/s 仍快于人类平均阅读速度(约 5-10 t/s),因此 16 并发在此硬件下是“流畅”的。

五、 测试结论总结

  1. 寻找硬件极限:通过 -b 参数不断加大数值,直到 pp512 的增长趋于平缓,那个点就是你 GPU 的算力峰值。
  2. 显存带宽验证:如果 tg128 随 batch 增加而保持不变,说明你的显存带宽已满载,增加并发会按比例降低单用户速度。
  3. 部署建议
    • 追求极速响应:限制并发,让单个用户独占带宽。
    • 追求高吞吐(省钱):增加并发,只要单用户速度不低于 5-8 t/s,用户就不会感到明显的卡顿。