第1章:压测指标详解

做vLLM性能压测,说白了就是搞清楚你的模型服务到底能扛多大压力。我刚开始接触这玩意儿时,也踩过不少坑——比如盯着一个指标猛调,结果上线后用户骂声一片。后来才明白,压测指标不是孤立的数字,它们是一张网

今天我就把这六个核心指标掰开揉碎了讲。每个指标我都会结合自己的实战经验,告诉你它到底在说什么、怎么测、以及避坑指南。

1.1 吞吐量(Tokens/s)

吞吐量,就是模型每秒能吐出多少个token。这是最直观的性能指标,也是老板最爱看的数字。

计算公式很简单:

吞吐量 = 总生成token数 / 总耗时(秒)

举个例子:你压测了100个请求,每个请求平均生成200个token,总共花了50秒。那吞吐量就是:

(100 × 200) / 50 = 400 tokens/s

我个人习惯把吞吐量分成两种场景来看:

  • 单请求吞吐:一个请求独占GPU时的速度。这能反映模型本身的推理能力。
  • 并发吞吐:多个请求同时跑时的总速度。这才是生产环境关心的。

避坑指南:我曾经遇到过一个案例,单请求吞吐能到500 tokens/s,但并发一上来直接掉到100。原因是显存带宽成了瓶颈。所以别只看单请求数据,那会骗人。

1.2 首Token延迟(TTFT)

TTFT(Time to First Token),从用户发出请求到收到第一个token的时间。这决定了用户的第一印象

你想想看,用户点了个按钮,等了两秒才看到第一个字,他大概率会关掉页面。我做过一个线上分析,TTFT超过1.5秒,用户流失率直接翻倍。

TTFT主要受这几个因素影响:

  • 预填充阶段耗时:模型处理输入prompt的时间
  • 调度延迟:请求在队列里排队的时间
  • 网络传输:数据在客户端和服务端之间来回的时间

我的经验:在vLLM中,TTFT可以通过设置--max-num-batched-tokens来优化。但别调太大,否则显存会爆。我一般建议从512开始试,逐步往上加。

1.3 Token间延迟(ITL)

ITL(Inter-Token Latency),也就是生成每个token的平均时间。它反映了模型生成阶段的流畅度

计算公式:

ITL = (总生成时间 - TTFT) / (总token数 - 1)

为什么减1?因为第一个token已经算在TTFT里了。

ITL这个指标,说白了就是看模型生成文本时卡不卡。我见过一个项目,TTFT只有200ms,但ITL高达100ms,用户反馈说「打字像在挤牙膏」。后来发现是KV Cache的显存分配策略有问题。

ITL范围 用户体验 建议
< 20ms 流畅,像真人对话 优秀,无需优化
20-50ms 轻微延迟,可接受 可以关注,但非必须
50-100ms 明显卡顿,用户会抱怨 需要优化
> 100ms 无法忍受 必须立即处理

1.4 端到端延迟

端到端延迟,从用户发出请求到收到完整回复的总时间。这是用户真正感知到的延迟。

它等于:

端到端延迟 = TTFT + (总token数 - 1) × ITL + 网络延迟

嗯,这里要注意:端到端延迟和吞吐量往往是跷跷板关系。你追求高吞吐,就得让GPU同时处理更多请求,但每个请求的等待时间就会变长。

我曾经踩过的坑:为了把吞吐量从300提到500,我把batch size调大了两倍。结果端到端延迟从2秒飙到了8秒。用户直接投诉到老板那里。后来我学乖了,压测时一定同时盯着这两个指标。

1.5 并发数

并发数,就是系统同时处理的请求数量。它决定了你的服务能撑住多少用户

并发数不是越高越好。每个并发请求都会占用显存和计算资源。vLLM的调度器会把这些请求打包成batch一起处理。

我一般这样评估并发能力:

  • 理论上限:显存大小 / 每个请求的显存占用
  • 实际上限:在保证SLA(比如TTFT < 1s)的前提下,能支持的最大并发

举个例子,一张A100 80G显卡,如果每个请求占2G显存,理论并发是40。但实际跑起来,可能并发到20时TTFT就已经超标了。

1.6 QPS(每秒查询数)

QPS(Queries Per Second),每秒能处理多少个完整的请求。这是业务视角最关心的指标。

QPS和吞吐量的关系:

QPS = 吞吐量 / 每个请求的平均token数

比如你的吞吐量是400 tokens/s,每个请求平均生成200个token,那QPS就是2。

我个人习惯把QPS和并发数结合起来看:

  • 低并发高QPS:说明每个请求处理得快,适合实时对话场景
  • 高并发低QPS:说明系统在排队,适合离线批量处理

一个小技巧:压测时可以用--num-prompts参数控制请求数量,用--request-rate控制发送速率。这样就能模拟不同QPS下的系统表现。

知识体系总览

下面这张图,我把六个指标的关系画出来了。你看一眼就能明白它们是怎么互相影响的:

vLLM压测指标关系图 vLLM 服务 吞吐量 Tokens/s 首Token延迟 TTFT Token间延迟 ITL 端到端延迟 并发数 QPS 影响 影响 组成 决定 六个指标互相影响,压测时要综合评估 吞吐量 = QPS × 平均token数 端到端延迟 = TTFT + (token数-1) × ITL

这张图你看懂了吗?核心逻辑是:并发数决定了你能同时处理多少请求,这直接影响吞吐量和QPS;而TTFT和ITL共同决定了端到端延迟。压测时,你得在这几个指标之间找到平衡点。

总结一下我的压测习惯:先定好SLA(比如TTFT < 1s,ITL < 30ms),然后逐步增加并发数,直到某个指标超标为止。这时候记录下来的数据,就是你的服务能力上限。


专注资料整理