推理指标:TTFT、TPOT、ITL、Goodput 与 P99


文档摘要

推理指标:TTFT、TPOT、ITL、Goodput 与 P99 本节摘要:四个指标决定一个推理部署是否在正常工作。TTFT 是 prefill 加队列加网络;TPOT(等价于 ITL)是每个 token 内存受限的 decode 成本;端到端延迟等于 TTFT 加 TPOT 乘输出长度;吞吐是全集群每秒 token 数。但对产品而言真正重要的是 goodput——同时满足所有 SLO 的请求占比。高吞吐低 goodput 意味着你在处理永远赶不到用户手里的 token。Llama-3.1-8B-Instruct 在 2026 年 TRT-LLM 上的参考数字:均值 TTFT 162 ms、均值 TPOT 7.33 ms、均值 E2E 1093 ms。

推理指标:TTFT、TPOT、ITL、Goodput 与 P99

本节摘要:四个指标决定一个推理部署是否在正常工作。TTFT 是 prefill 加队列加网络;TPOT(等价于 ITL)是每个 token 内存受限的 decode 成本;端到端延迟等于 TTFT 加 TPOT 乘输出长度;吞吐是全集群每秒 token 数。但对产品而言真正重要的是 goodput——同时满足所有 SLO 的请求占比。高吞吐低 goodput 意味着你在处理永远赶不到用户手里的 token。Llama-3.1-8B-Instruct 在 2026 年 TRT-LLM 上的参考数字:均值 TTFT 162 ms、均值 TPOT 7.33 ms、均值 E2E 1093 ms。永远报 P50/P90/P99,绝不只报均值。还要当心测量陷阱:GenAI-Perf 把 TTFT 排除在 ITL 之外,LLMPerf 把它算进去——同一次运行,两个工具的 TPOT 对不上。

对应原课程:Phase 17 · Lesson 08 · 08-inference-metrics-goodput(原英文 phases/17-infrastructure-and-production/08-inference-metrics-goodput/docs/en.md)。

学习目标

阅读完本节,你应当能够:

  1. 精确定义 TTFT、TPOT、ITL、E2E、吞吐、goodput,并说出各自度量的成分。
  2. 解释为什么均值是 LLM 服务错误的统计量,以及如何读 P50/P90/P99。
  3. 构造一个 SLO 多约束(如 TTFT<500 ms 且 TPOT<15 ms 且 E2E<2 s),并据此算 goodput。
  4. 说出两个在同一次运行上 TPOT 对不上的基准工具,并解释原因。

一、问题与直觉

「我们吞吐 15000 token/秒。」然后呢?如果 40% 的请求端到端超过 2 秒,用户早跑了。吞吐单独不能告诉你产品是否工作。

推理有多条延迟轴,每条失败方式不同。Prefill 是计算受限、随提示长度增长;decode 是内存受限、随批次大小增长;队列延迟是运维问题;网络是物理距离问题。你需要为每条配独立指标,需要百分位,还需要一个单一合成指标告诉你「用户拿到他想要的了吗」——那就是 goodput。

二、核心概念

TTFT —— 首 token 时间

TTFT = queue_time + network_request + prefill_time

长提示时 prefill 主导。在 Llama-3.3-70B FP8 + H100 上,32k 提示纯 prefill 约 800 ms。队列时间是负载下调度器行为;网络请求是包含 TLS 的线路时间。TTFT 是用户看到任何流式返回前所经历的延迟。

TPOT / ITL —— token 间延迟

一个量,多个名字。TPOT(time per output token)、ITL(inter-token latency)、每 token decode 延迟——都是一回事。它是首 token 之后,连续流式 token 之间的间隔。

TPOT = (decode_forward_time + scheduler_overhead) / tokens_produced

同一 Llama-3.3-70B H100 栈、开分块 prefill 时,TPOT 均值约 7 ms。不开分块 prefill 时,相邻序列长 prefill 期间 TPOT 可飙到 50 ms。盯 P99,不是均值

E2E 延迟

E2E = TTFT + TPOT * output_tokens + network_response

长输出(>500 token)时 E2E 由 TPOT 主导;短输出长提示时由 TTFT 主导。要报按输出长度分桶的 E2E。

吞吐

throughput = total_output_tokens / elapsed_time

聚合指标,告诉你集群效率,不告诉你单请求健康。

Goodput —— 你真正在意的指标

goodput = 同时满足 (TTFT <= a) 且 (TPOT <= b) 且 (E2E <= c) 的请求占比

SLO 是一个多约束。一个请求只有在每条约束都成立时才算「好」。goodput 就是这个占比。高吞吐配 60% goodput 是失败;低吞吐配 99% goodput 才是目标。

2026 年,goodput 是 MLPerf Inference v6.0 提交和 AI 平台内部 SLA 跟踪所用的指标。

为什么均值是错误的统计量

LLM 延迟分布是右偏的。一个 decode 批次里若有个长 prefill 邻居,可能 500 个 token 的 TPOT 约 7 ms,但有 20 个 token 的 TPOT 约 60 ms。均值 TPOT 9 ms,P99 TPOT 65 ms。用户会经常撞上 P99——这就是他们离开的原因。

永远报三元组(P50, P90, P99)。用户体验上,你优化的是 P99。

参考数字 —— Llama-3.1-8B-Instruct、TRT-LLM、2026

  • 均值 TTFT:162 ms
  • 均值 TPOT:7.33 ms
  • 均值 E2E:1093 ms
  • P99 TPOT:依分块 prefill 配置,10~25 ms。

这些是 NVIDIA 公开参考点,会随模型大小(70B 约 3~5 倍)、硬件(H100 vs B200 约 3 倍)、负载而变。

测量陷阱

两个最常用的 2026 基准工具,对同一次运行的 TPOT 对不上:

  • NVIDIA GenAI-Perf:把 TTFT 排除在 ITL 计算外,ITL 从第 2 个 token 起算。
  • LLMPerf:把 TTFT 算进去,ITL 从第 1 个 token 起算。

对一个 TTFT 500 ms、100 输出 token、总 decode 700 ms 的请求,GenAI-Perf 报 ITL = 700/99 = 7.07 ms,LLMPerf 报 ITL = 1200/100 = 12.00 ms工具选择改变数字。永远声明用哪个工具,永远公开定义。

构造 SLO

2026 年一个合理的面向消费者的 70B 聊天模型 SLO:

  • TTFT P99 ≤ 800 ms。
  • TPOT P99 ≤ 25 ms。
  • 输出 <300 token 时 E2E P99 ≤ 3 s。
  • Goodput 目标 ≥ 99%。

企业 SLO 收紧 TTFT(200~400 ms)、放松 E2E。关键是写下来、三条全测、把 goodput 作为单一合成指标跟踪

怎么测

  • 跑真实流量或合理合成(LLMPerf 配 --mean-input-tokens 800 --stddev-input-tokens 300 --mean-output-tokens 150)。
  • 基准运行并发设为峰值 2 倍。
  • 跑 30~50 轮,对合并样本取百分位。
  • 发布时附工具名、工具版本、模型、硬件、并发、提示分布。

三、从零实现:百分位计算器与 goodput 报告器

原课程 code/main.py 是一个玩具 goodput 计算器:生成合成延迟分布、套用 SLO、算 goodput,并展示 GenAI-Perf 与 LLMPerf 在同 trace 上的 TPOT 差异。下面给最小可读骨架。

import random def measure_goodput(samples, slo): """对一批请求样本算 goodput。 samples: [{'ttft':ms, 'tpot':ms, 'e2e':ms, 'output_tokens':n}, ...] slo: {'ttft':a, 'tpot':b, 'e2e':c} 返回: (goodput_ratio, p50_e2e, p90_e2e, p99_e2e) """ good = [s for s in samples if s["ttft"] <= slo["ttft"] and s["tpot"] <= slo["tpot"] and s["e2e"] <= slo["e2e"]] e2e = sorted(s["e2e"] for s in samples) n = len(e2e) pct = lambda p: e2e[min(n - 1, int(n * p))] return (round(len(good) / len(samples), 3), pct(0.5), pct(0.9), pct(0.99)) def tool_trap_demo(ttft_ms, output_tokens, decode_total_ms): """展示 GenAI-Perf 与 LLMPerf 的 TPOT 分歧。""" genai = decode_total_ms / (output_tokens - 1) if output_tokens > 1 else 0 llmperf = (ttft_ms + decode_total_ms) / output_tokens return round(genai, 2), round(llmperf, 2) # 合成 1% 尾部尖峰的分布 random.seed(0) samples = [] for _ in range(1000): ttft = random.gauss(200, 40) tpot = random.gauss(8, 2) + (40 if random.random() < 0.01 else 0) out = random.randint(80, 300) samples.append({"ttft": ttft, "tpot": tpot, "e2e": ttft + tpot * out, "output_tokens": out}) slo = {"ttft": 500, "tpot": 25, "e2e": 3000} print("goodput + E2E P50/P90/P99:", measure_goodput(samples, slo)) print("工具陷阱(GenAI vs LLMPerf):", tool_trap_demo(500, 100, 700)) # 把 SLO 的 TPOT 从 25 收到 15,goodput 会显著下滑——这正是收紧阈值的代价

💡 goodput 是把「三条 SLO」压成一个数的工具。在 CI/CD 里把部署门禁从「吞吐不低于 X」改成「goodput 不低于 99%」,你就把发布决策对齐到了用户体感,而非机器效率。

四、框架对比:度量工具横向对照

工具 TTFT 计入 ITL? 主要用途 备注
NVIDIA GenAI-Perf 否(从 token 2 起) NVIDIA NIM/TRT-LLM 基准 与 NVIDIA 官方定义对齐
LLMPerf(Ray) 是(从 token 1 起) 跨引擎通用基准 定义偏「用户视角」
MLPerf Inference v6.0 行业 goodput 基准 用 goodput 作主指标
vLLM 内置 benchmark 跟随引擎 引擎自测 与 GenAI-Perf 定义接近

心法:报数字时永远声明工具 + 版本 + 定义。跨工具比较前,先把 ITL 定义对齐,否则你在比两个不同的量。

五、可复用产物

本节产出 outputs/skill-slo-goodput-gate.md(原课程目录)。给定工作负载与 SLO,它产出一个可直接进 CI/CD 的基准配方:

  1. SLO 多约束:TTFT/TPOT/E2E 的 P99 阈值 + goodput 目标。
  2. 基准脚本:LLMPerf 或 GenAI-Perf 命令行,含并发、提示分布、轮次。
  3. 门禁规则:goodput < 目标则阻断部署,吞吐不再单独设门。
  4. 报告模板:P50/P90/P99 三元组 + goodput + 工具版本。

六、练习

  1. 跑通计算器:运行 code/main.py。生成含 1% 尾部尖峰的分布。把 P99 TPOT 阈值从 30 ms 收到 15 ms,goodput 怎么变?

  2. 质疑厂商:某厂商报「Llama 3.3 70B H100 上 15000 tok/s」。在信任前你要问哪三个问题?

  3. 分块 prefill:为什么分块 prefill 保护 P99 TPOT 但不保护均值 TPOT?

  4. 语音助手 SLO:为一个语音助手(首 token 是听到的不是读到的)构造消费者 SLO。哪个指标对用户最可见?

  5. 读文档:读 LLMPerf README 与 GenAI-Perf 文档,找出三个两工具对不上的其他指标。

本节要点回顾

  1. 四个核心指标:TTFT(队列+网络+prefill)、TPOT/ITL(decode 每 token 成本)、E2E(TTFT+TPOT×输出长)、吞吐(集群 token/秒)。
  2. goodput 是产品指标:同时满足所有 SLO 的请求占比,高吞吐低 goodput 是失败。
  3. 均值是错误统计量:LLM 延迟右偏,用户撞 P99,永远报 P50/P90/P99。
  4. P99 是优化目标:用户体验由尾部决定,不是均值。
  5. 测量陷阱:GenAI-Perf 把 TTFT 排除在 ITL 外,LLMPerf 包含——同次运行 TPOT 对不上。
  6. SLO 是多约束:TTFT 且 TPOT 且 E2E,任一违反即失败,合成进 goodput。
  7. 2026 goodput 是行业标准:MLPerf Inference v6.0 与平台内部 SLA 都用它。
  8. 基准要 2x 峰值并发 + 30~50 轮:并附工具、版本、模型、硬件、提示分布。

下一节,我们转向降本主力——量化:看 AWQ、GPTQ、GGUF K-quants、FP8、MXFP4/NVFP4 各自的精度-成本权衡,以及如何在生产里选对一档。


发布者: 作者: Rohit Gupta 转发
评论区 (0)
U