首页/AI/大模型部署与运维速查/TTFT:首 token 延迟拆解

TTFT:首 token 延迟拆解

TTFT = 排队时间 + 输入 prefill + 首个解码步:输入越长 prefill 越重,队列越深等待越久;它是交互体验的首要指标,也很容易被排队拖垮。

TTFT 是什么

TTFT(Time To First Token,首 token 延迟)指从请求发出到第一个输出 token 返回的时间,拆开是:排队等待 + 输入 prefill + 首个解码步。它是交互体验的第一指标,用户先感知到的是「多久开始出字」。TTFT 很容易被排队拖垮:队列一深,模型再快也救不回来,因此它常常不是模型问题而是容量问题。

基本信息

定义请求发出到第一个输出 token 到达的时间
组成排队等待 + prefill(与输入长度相关)+ 首个解码步
典型指标形态分位数(P50/P95/P99),很少用平均值
观测位置引擎侧 TTFT 直方图 + 网关侧首块到达时间
权限要求读引擎指标通常无需特权,抓取端点需网络可达

典型使用场景

  • 交互产品体验指标:与点击后的可感知停顿直接对应,是前端与产品最关心的那个数
  • 排查「用起来很慢」的投诉:先看 TTFT 落在模型侧还是排队侧,定位方向完全不同
  • 定并发上限:用 TTFT 的 SLO 反推可接受的排队深度,再折算实例数
  • 上线前后对比:模型或参数一改,TTFT 的变化最能说明问题
  • 区分长输入与短输入的体验差异:长文档问答的 TTFT 天然更高,需要单独设目标

拆解与观测

拆解与观测
# 引擎侧:TTFT 直方图(指标名随版本微调,先看实际输出)
curl -s http://127.0.0.1:8000/metrics | grep -i time_to_first_token

# 排队是否超标:等待请求数与运行中请求数一起看
curl -s http://127.0.0.1:8000/metrics | grep -E 'num_requests_waiting|num_requests_running'

# 网关侧:记录请求到达与首个数据块时间,流式场景可直接测出 TTFT
# 排查顺序:看队列 → 看输入长度分布 → 再看模型侧算子与硬件状态

TTFT 偏高的定位表

组成项判断依据对应动作
排队等待等待请求数上涨、运行数接近饱和扩容或限流,先解决容量
prefill输入长度明显变长、命中率下降启用前缀缓存、控制输入长度
首个解码步批很小仍然慢、伴随降频检查功耗温度与算子配置
流式场景里 TTFT 就是用户看到第一个字的时间;非流式场景用户看不到首 token,但 TTFT 仍计入总响应时间,所以它同样影响端到端指标。
瞬时 TTFT 波动很大:请求稀疏时快、高峰时慢,判断是否需要动作要用较长窗口的分位数而非单次采样。

易错点

  • 把 TTFT 只当成模型速度问题:排队占比常常更大,先扩并发或限流,再谈模型侧优化
  • 用平均值汇报 TTFT:长尾请求被抹平,用户实际体感与报表长期脱节
  • 压测时不带真实输入长度分布:短输入跑出的漂亮数字,遇到长文档请求立刻失效
  • 只看引擎指标不看网关侧时间:中间的排队与连接建立开销被漏掉,责任层判断出错

数据来源与参考

  • vLLM 官方文档:Production Metrics(docs.vllm.ai)
  • NVIDIA 开发者博客:LLM 推理延迟(developer.nvidia.com/blog)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌