Skip to content

LLM 推理性能基准方法:吞吐、TTFT 与成本实测 ​

实验目标 ​

推理引擎(vLLM/TensorRT-LLM 等,见 12 章各篇)装好上线前,"感觉挺快"不够——生产决策需要一套统一、可复现、可对比的推理基准:

  • 不同引擎/量化/并发参数,怎么在同口径下比较?
  • "吞吐高"和"首字快"能不能兼得?指标之间什么关系?
  • 一个请求"到底多快",怎么从引擎自带工具与外部压测两个层面测?

本篇以 vLLM 自带基准工具为主线,逐段拆解推理性能基准方法:指标语义、工具参数、并发建模与成本口径。命令为真实可复现操作;具体数字随模型/硬件而异,方法描述不编造基准。

第一段:先统一指标语言——五个数字 ​

指标含义谁关心
Throughput(吞吐)每秒输出 token 数(tokens/s),或请求数/秒容量规划
TTFT(Time To First Token)首个输出 token 的时延交互体验(聊天/流式)
TPOT(Time Per Output Token)每个输出 token 的间隔流式体验(打字感)
ITL(Inter-Token Latency)TPOT 的实测观测口径流式体验验证
E2E Latency完整请求从发起到结束单请求体验/超时设计

关键关系:并发升高 → 吞吐先升后降(拐点即容量上限),同时 TTFT/TPOT 恶化——"高吞吐"与"快响应"是同一资源下的权衡,基准必须同时报告两者,只报一个等于作弊。

第二段:vLLM 自带基准——命令与参数拆解 ​

vLLM 提供两个工具:benchmark_throughput.py(离线,只管吞吐)与 benchmark_serving.py(在线,带时延与并发建模)。

bash
# 离线吞吐:固定输入/输出长度,纯算引擎上限
python3 benchmark_throughput.py \
  --model /models/Qwen2.5-72B-Instruct \
  --backend vllm --num-prompts 2000 \
  --input-len 512 --output-len 256 \
  --max-num-seqs 128

# 在线服务基准:模拟真实并发请求流
python3 benchmark_serving.py \
  --model /models/Qwen2.5-72B-Instruct \
  --backend vllm --endpoint /v1/completions \
  --num-prompts 500 \
  --request-rate 20 \          # 每秒新请求数(泊松到达)
  --input-len 512 --output-len 256 \
  --percentile-metrics "ttft,tpot,itl,e2e_latency"

参数语义:

参数含义调整要点
--input-len/--output-len请求输入/输出 token 长度对齐真实负载分布;输出长=压力在 decode
--request-rate每秒到达请求数(0=全并发压测)模拟真实到达;调大观察吞吐拐点与时延恶化
--num-prompts总请求数覆盖到稳定态(前几十个请求预热/排队不算数)
--percentile-metrics输出指定指标的分位看 P50/P95/P99,不看均值(长尾决定体验)

工程观察:基准要回答的问题是"我的真实负载在哪一档"——请求长度分布、到达速率、并发峰谷决定参数。拿默认参数测出的数字无法指导容量规划。

第三段:外部压测——引擎自带工具的补充 ​

引擎自带工具测的是"引擎视角",生产环境还需要"客户端视角"(网络、网关、批处理队列都算进去):

bash
# 用通用压测工具(如 locust/wrk/自定义脚本)打真实 API
# 关键:客户端记录 TTFT/TPOT/E2E,而不是只看引擎日志

外部压测补三类盲区:

  1. 网络与网关开销:TTFT 里包含的网络往返、网关排队,引擎日志看不到;
  2. 真实到达模式:突发(burst)与平稳的区别——用泊松/尖峰到达建模而不是匀速;
  3. 端到端超时设计:客户端超时、重试策略对"用户感知时延"的影响。

第四段:成本口径——把性能变成钱 ​

性能指标最终要落到成本决策:

成本口径(每百万 token 输出)≈ 服务成本(GPU 摊销 + 能耗 + 运维) / 吞吐 × 时间
  • GPU 摊销:按服务独占 GPU 数与单价折算(容量规划的直接输入);
  • 吞吐 vs 成本的拐点:并发超过拐点后吞吐不涨时延涨,继续加并发等于烧钱换坏体验——基准找到拐点,容量定在拐点前;
  • 量化/引擎对比:同口径(同模型同硬件)下对比 FP8 量化、不同引擎的吞吐-时延曲线与成本,才能回答"换引擎值不值"。

推理基准检查清单 ​

  • [ ] 指标同时报告吞吐 + TTFT/TPOT 分位(P50/P95/P99),不单报吞吐
  • [ ] 请求长度/到达速率对齐真实负载分布,而非默认参数
  • [ ] 覆盖并发拐点(逐步调高 request-rate 观察吞吐与时延)
  • [ ] 外部压测补充网络/网关/超时视角
  • [ ] 成本口径统一(GPU 摊销 + 吞吐拐点),跨引擎/量化对比同口径
  • [ ] 基准命令与结果存档,扩容/换参后复跑对比

工程启示 ​

  • 指标成对才有意义:吞吐与时延是同一枚硬币的两面,只报一个等于作弊;
  • 负载建模决定决策价值:拿真实分布(长度、到达、并发)建模,基准结果才能指导容量与成本;
  • 基准是可回归的标尺:每次换引擎、换量化、扩 GPU,用同一命令复跑,决策才有依据。

下一篇预告:推理测量就绪后,回到 AI×Science 主战场——下一篇《气象科学大模型落地:从论文架构到业务化预报服务》拆解 AI4S 代表性领域的落地路径。

AI-HPC 智算超算专家 · Contact: openaihpc@gmail.com