聊天窗口点下发送,模型还没有吐出第一个字,这段等待就是首词元延迟最想描述的体验。英文常写成 TTFT。它只量开口之前,不负责说明整篇答案多久写完,也不能代表后面每个 Token 是否流畅。

我把 NVIDIA 的指标与压测参数说明、vLLM 基准文档对了一遍。两套工具都使用 TTFT,却提醒读者先看测量起点。客户端从发出请求开始计时,服务端可能从请求进入调度器才计时,差出来的正是网络、网关或前置处理。

第一个输出之前发生了几件事

有些接口会先发一个空事件或只含角色信息的流式片段。NVIDIA AIPerf 会忽略没有内容的初始响应,因为它还没有给用户任何可见输出。比较服务时,应先统一什么算第一个 Token。

请求先在队列里等可用计算资源。轮到它以后,服务会分词,处理全部输入,并为各层建立 KV 缓存。模型完成采样,首个流式片段再经过服务端和网络到达客户端。NVIDIA 的定义通常把排队、预填充和网络都算进 TTFT,具体工具对分词与空响应还有各自处理。

输入越长,预填充工作通常越多。NVIDIA 的基准指南因此要求按真实业务准备输入长度和输出长度分布。摘要任务可能输入很长、输出很短,代码生成常有较长输出。两者即使总 Token 接近,首词元和后续生成的压力也不同。

第一个 Token 到达以后,另一项指标开始起作用。ITL 记录连续输出之间的间隔,TPOT 则按每个请求计算首词元之后的平均单 Token 时间。NVIDIA 给出的 TPOT 公式会从端到端时间里减去 TTFT,再除以后续输出 Token 数。首字来得快,后面每个字停很久,用户依旧会觉得卡。

平均值会藏起排队的人

并发增加时,GPU 可以把更多请求放在一起算,系统总吞吐往往上升。请求超过服务能力以后,队列拉长,单个用户的 TTFT 也会升高。只展示每秒输出 Token 数,很容易把更多人正在等待这件事漏掉。

vLLM 的服务基准会同时报告均值、中位数和 P99。P99 接近最慢的一小批请求,更容易发现长输入插队、缓存不足或突发流量造成的尾部等待。它还提醒,重复使用相同提示词可能命中前缀缓存,让第二轮测试显得异常快。需要公平比较时,应重启缓存、改变随机种子,或者明确把缓存命中算作业务的一部分。

不同服务的 TTFT 要在相同网络位置、输入分布、并发和流式协议下比较。结果表应把测量点和百分位写清,再配上 ITL、端到端延迟与成功率。用户等到第一个输出的时间很具体,测法也得同样具体,否则一个漂亮数字很难指导扩容或调度。

参考资料