TPOT 是什么
TPOT(Time Per Output Token)是解码阶段平均每输出一个 token 所需的时间,与生成速率互为倒数。响应时间约等于 TTFT 加上 TPOT 乘以输出 token 数,所以流式场景下 TPOT 就是用户感知的「出字速度」。它主要由显存带宽、批大小与算子效率决定:解码每一步都要把权重与 KV 读一遍,读得越快越省时间。
基本信息
| 定义 | 解码阶段每个输出 token 的平均耗时 |
|---|---|
| 单位 | 毫秒/token 或秒/token,与生成速率互为倒数 |
| 组成关系 | 响应时间 ≈ TTFT + TPOT × 输出 token 数 |
| 主要影响 | 显存带宽、批大小、量化档位、算子实现 |
| 观测 | 引擎侧每 token 延迟指标,建议看分位数 |
典型使用场景
- 估算总响应时间:知道输出长度范围就能推出用户要等多久
- 流式体验调优:出字速度太慢时,先看 TPOT 而不是首字延迟
- 定延迟 SLO:与 TTFT 一起构成两条独立的承诺,分别评估分别设阈值
- 评估量化收益:权重与 KV 读取字节数减半,TPOT 通常随之下降,但要实测确认
- 对比硬件与并行度:同模型换卡或改张量并行度后,看 TPOT 变化判断是否值得
估算与观测
估算与观测
# 估算:输出 512 token、TPOT 为 30ms 时,解码阶段约需 15 秒
# decode 时间 = 512 × 30ms = 15.3s(再叠加 TTFT 才是总时长)
# 观测:每 token 延迟指标(名称随版本微调)
curl -s http://127.0.0.1:8000/metrics | grep -i time_per_output_token
# 生成速率换算:tokens/s ≈ 1 / TPOT,例如 30ms/token ≈ 33 token/s影响 TPOT 的因素
| 因素 | 作用方向 | 注意 |
|---|---|---|
| 权重与 KV 的字节数 | 量化后读取量下降,TPOT 通常改善 | 精度损失需评估 |
| 批大小 | 批越大总吞吐越高,但单请求 TPOT 变差 | 延迟敏感场景要压低并发 |
| 显存带宽 | 硬件代际差异明显 | 同代卡差异主要体现在带宽 |
| 降频与资源抢占 | 时钟被压低或辅进程抢占时变慢 | 结合功耗温度一起看 |
延迟与吞吐是一组折中:把批做大能提高整机吞吐,但会让每个请求的 TPOT 变差,因此吞吐型与延迟型业务应分开定档、分开部署。
TPOT 随批大小与请求构成变化,压测报告要写清并发档位与长度分布,否则数字无法复用。