五十二:推理评估方式¶
来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247484685&idx=1&sn=97565e6b8e8288a67dc85759beaad5d8&chksm=f01eb674c7693f62c2b8cd2b05b73edaa2fc6f559a2be88cf57cae932f11eab40ac3ad3997de#rd
1. 学习范围¶
本日主题是大模型推理评估。 本日覆盖: - 推理服务评估的目标。
-
TTFT、TPOT、ITL、E2E latency、吞吐、并发。
-
Prefill/Decode 与指标的关系。
-
P50/P95/P99 长尾延迟。
-
成本、显存、GPU 利用率和 KV cache 指标。
-
质量评估、安全评估和稳定性评估。
-
压测方法、负载建模和线上观测。
2. 推理评估的目标¶
推理评估不是只测模型回答好不好,而是评估模型服务在真实负载下是否满足用户体验、成本和可靠性要求。 核心问题: - 首 token 是否足够快。
-
后续 token 是否稳定。
-
并发上来后是否退化。
-
GPU 是否有效利用。
-
KV cache 是否成为瓶颈。
-
单位成本是否可接受。
-
质量是否因优化下降。
-
长尾延迟是否符合 SLO。
3. 指标分类¶
推理指标可分为: - 延迟指标:TTFT、TPOT、ITL、E2E latency。
-
吞吐指标:tokens/s、requests/s。
-
资源指标:GPU utilization、memory usage、KV cache usage。
-
成本指标:cost/request、cost/1K tokens。
-
质量指标:准确率、幻觉率、格式遵循率。
-
稳定性指标:错误率、超时率、OOM、P99 latency。
4. TTFT,首字延迟¶
TTFT, Time To First Token, 表示从请求到第一个 token 输出的时间。 组成:
TTFT 对交互式体验很关键。用户通常对“迟迟没有开始输出”非常敏感。5. TPOT¶
TPOT, Time Per Output Token, 表示生成阶段平均每个输出 token 的时间。
TPOT 越低,流式输出越快。它主要反映 Decode 阶段效率。6. ITL¶
ITL, Inter-Token Latency, 表示相邻输出 token 之间的时间间隔。 TPOT 是平均值,ITL 更关注逐 token 抖动。流式场景下,ITL 抖动会让用户感到输出卡顿。
7. E2E Latency¶
E2E latency 是端到端延迟,从请求发出到完整响应结束。
对于非流式 API,E2E latency 是用户最直观的等待时间。对于流式 API,TTFT 和 ITL 同样重要。8. Token Throughput, 吞吐¶
Token throughput 表示单位时间生成 token 数,常见单位是 tokens/s。 可分为: - Prefill tokens/s:处理 prompt token 的吞吐。
-
Decode tokens/s:生成 output token 的吞吐。
-
Total tokens/s:输入输出合计吞吐。
不同统计口径必须说明清楚。
9. Request Throughput¶
Request throughput 表示单位时间完成请求数,常见单位是 requests/s。 它受请求长度分布影响很大。短请求下 requests/s 高,长输出请求下 requests/s 可能低但 tokens/s 不一定低。
10. 并发¶
并发指系统同时处理的活跃请求数。并发提升会增加 batch 效率,也会增加排队时间、KV cache 显存和长尾延迟。 评估时要画出:
找到系统饱和点。11. P50/P95/P99¶
平均延迟容易掩盖长尾。推理服务必须关注分位数: - P50:典型用户体验。
-
P95:大多数用户体验。
-
P99:长尾和稳定性。
线上 SLO 通常更关注 P95/P99,而不是平均值。
12. Prefill 指标¶
Prefill 指标包括: - prefill time。
-
prompt tokens/s。
-
queue time before prefill。
-
batch prefill size。
-
prompt length distribution。
-
prefix cache hit rate。
Prefill 指标主要解释 TTFT。
13. Decode 指标¶
Decode 指标包括: - TPOT。
-
ITL。
-
decode tokens/s。
-
active sequences。
-
decode batch size。
-
KV cache bandwidth。
-
tokens generated per request。
Decode 指标主要解释流式输出速度和总生成时间。
14. KV cache 指标¶
KV cache 指标包括: - used blocks。
-
free blocks。
-
fragmentation。
-
cache hit rate。
-
prefix cache hit rate。
-
eviction count。
-
OOM count。
-
per-request cache length。
KV 指标能解释为什么 GPU 仍有算力但无法接纳更多请求。
15. GPU 利用率¶
GPU utilization 包括算力利用率、显存占用、显存带宽、SM occupancy 和 kernel 时间分布。 注意:GPU utilization 高不一定代表服务好。可能 TTFT 很差、P99 很差或用户排队严重。
16. 成本指标¶
成本指标包括: - cost/request。
-
cost/input token。
-
cost/output token。
-
GPU hours。
-
utilization-adjusted cost。
-
cost per successful task。
最终业务更关心“完成一个有效任务花多少钱”,而不只是硬件吞吐。
17. 质量指标¶
推理优化可能影响质量。例如量化、KV cache 量化、speculative decoding、截断上下文、滑动窗口都可能改变输出。 质量指标: - 准确率。
-
幻觉率。
-
格式遵循率。
-
代码通过率。
-
检索引用正确率。
-
用户满意度。
性能优化不能牺牲不可接受的质量。
18. 稳定性指标¶
稳定性指标包括: - error rate。
-
timeout rate。
-
OOM rate。
-
retry rate。
-
cancelled requests。
-
degraded responses。
-
server restarts。
高吞吐但错误率高的系统不可用。
19. 负载建模¶
压测必须模拟真实负载: - prompt length distribution。
-
output length distribution。
-
arrival rate。
-
concurrency。
-
streaming / non-streaming。
-
不同任务类型。
-
长短请求混合。
-
burst traffic。
只用固定长度请求压测会误导结论。
20. 压测方法¶
典型压测流程:
1. 固定模型、硬件和推理参数
2. 构造请求长度分布
3. 逐步提高 QPS 或并发
4. 记录 TTFT、TPOT、P95/P99、吞吐、显存和错误率
5. 找到饱和点和退化点
6. 比较不同框架或配置
21. SLO 与容量规划¶
SLO 是服务目标,例如:
容量规划要根据 SLO 反推需要多少 GPU、允许多少并发、最大上下文和最大输出长度。22. 常见误区¶
常见误区: - 只看平均延迟。
-
混淆 tokens/s 和 requests/s。
-
不区分 input tokens 和 output tokens。
-
用不真实的固定长度压测。
-
忽略 queue time。
-
忽略 P99。
-
忽略质量变化。
-
忽略成本和错误率。
23. 核心总结¶
推理评估要同时看用户体验、系统吞吐、成本、质量和稳定性。TTFT 主要反映排队和 Prefill,TPOT/ITL 主要反映 Decode,吞吐反映整体处理能力,P95/P99 反映长尾稳定性。 面试表达时应突出: - 推理评估必须分阶段、分指标。
-
不同负载长度会改变瓶颈。
-
性能优化必须和质量、安全、成本一起评估。
24. 参考资料¶
-
LLM inference solution and metrics: https://zeux.io/2024/03/15/llm-inference-sol/
-
Main stages of auto-regressive decoding: https://aiexpjourney.substack.com/p/main-stages-of-auto-regressive-decoding
-
Hugging Face KV cache documentation: https://huggingface.co/docs/transformers/main/en/kv_cache
-
vLLM documentation: https://docs.vllm.ai/
预览时标签不可点<div class="