内容提要
NVIDIA 发布开源 AI 推理压测工具 AIPerf,用于测量 P99 尾延迟。文章指出平均值会掩盖慢请求,应关注 TTFT、ITL 和分位数。通过 Python 示例展示 P99 能暴露 4.2 秒的延迟尾巴,并介绍 AIPerf 的安装与压测命令,提醒避免只测并发 1、只看平均值等误区,强调优化 P99 才能决定用户体验。
延伸解读
为什么平均值会骗人:从P99看用户体验
文章用班级平均身高类比,指出平均值无法反映最慢的1%请求。在AI推理中,即使平均延迟仅1秒,P99可能高达4.2秒,导致用户频繁遭遇卡顿。因此,仅看平均值会掩盖长尾问题,优化P99才能减少超时重试和用户流失。
TTFT与ITL:拆解大模型响应速度
文章将大模型响应拆分为TTFT(首Token时间)和ITL(Token间延迟),分别对应“多久开始说”和“说话是否顺”。餐厅类比中,TTFT像第一道菜上桌时间,ITL像后续菜是否连续。这两个指标比总延迟更能定位卡顿环节,但需注意GPU批处理会令请求间相互影响。
压测工具AIPerf:设计目标与使用前提
AIPerf是NVIDIA开源的多进程压测工具,用ZeroMQ协调,避免Python GIL成为客户端瓶颈。它支持多种端点和流量回放,但安装后需对兼容聊天端点执行命令。文章提醒,该命令未在无GPU环境实测,结果不能直接当作自身硬件表现,且需同时监控压测机与服务端。
避开五个常见压测误区
文章列出五个误区:只测并发1、只看平均值、不开流式却报告TTFT/ITL、允许模型提前停止却要求固定输出长度、压测器自身成为瓶颈。这些做法会得到失真结果。正确做法包括记录样本数、请求长度、并发等,并交替运行多轮、预热缓存,保存原始数据以便复查。
Q&A
为什么AI推理的平均延迟看起来很快,用户却还是觉得卡?
因为平均值会掩盖慢请求。例如一组请求平均1秒完成,但最慢的1%可能达到5秒,用户会频繁遇到卡顿。平均值像全班平均身高,无法告诉你最高的人有多高;P99则能告诉你最慢的1%请求处在什么位置。
TTFT和ITL分别是什么?它们对用户体验有什么影响?
TTFT是Time to First Token,即请求发出到首个Token到达的时间,决定“多久开始说”;ITL是Inter-Token Latency,即相邻Token之间的间隔,决定“说话是否顺”。TTFT影响用户等待感,ITL影响生成流畅度。
P99尾延迟具体指什么?为什么它比平均值更能反映问题?
P99是样本延迟分布的第99百分位:约99%的观测不超过它,约1%更慢。它不是最慢值,也不是固定某条请求。平均值会稀释少量极慢请求,而P99能直接暴露如4.2秒的延迟尾巴,帮助发现用户实际遇到的卡顿。
AIPerf是什么?它有什么主要特点?
AIPerf是NVIDIA发布的开源AI推理压测工具,采用Apache 2.0许可,是GenAI-Perf的后继者。它使用多进程工作器发压、独立服务处理记录,并用ZeroMQ协调,避免Python全局解释器锁让客户端先成为瓶颈。支持15类以上端点、公开数据集和生产流量回放。
使用AIPerf进行压测时,常见的误区有哪些?
常见误区包括:只测并发1,看不到排队;只看平均值,极慢请求被稀释;不开流式却报告TTFT和ITL;要求输出128个Token却允许提前停止,吞吐结果漂移。此外,压测器本身可能成为瓶颈,需同时监控压测机与服务端。
如何用Python快速理解分位数和尾延迟?
可以运行一个纯Python脚本,定义percentile函数计算分位数。例如对一组延迟数据,计算P50、P90、P99和平均值。示例中P50为510毫秒,P90为900毫秒,P99为4200毫秒,平均914毫秒,显示平均值未揭示最慢请求,而P99暴露了4.2秒尾巴。
AIPerf适合哪些场景?不适合哪些场景?
适合比较模型服务版本、容量规划、缓存策略、并发上限和回归发布。不适合用一次合成测试宣称某模型更聪明或某云永远更快。线上请求多样,静态测试只能建立基线,不能代表用户体验。