vllm模型对比性能有哪些,常见问题和做法

模型与算力

给部署工程师讲清 vLLM 对比性能该看哪些指标、怎么测、哪些结果不能直接比,附一份可执行的对比顺序。

你手上有个要上线的模型服务,同事说 vLLM 快,另一个说换成别家框架差不多,但谁也拿不出同口径的数字。问题通常不在框架,而在比的不是同一个东西:输入长度不同、并发不同、量化不同、输出长度设定不同,比出来的数没有意义。这篇把 vLLM 性能对比该量什么、按什么顺序量、哪些情况下结论不成立讲清楚,照着走一遍就能拿到自己环境下的基线。

你手上有个模型服务要上线,同事说 vLLM 快,另一个说换别的框架差不多,但谁也拿不出同口径的数字。问题往往不在框架本身,而在比的不是同一个东西:输入长度不同、并发不同、量化档位不同、输出长度设定不同,比出来的数就没有可比性。这篇文章讲清楚 vLLM 性能对比该量什么、按什么顺序量、哪些情况下结论不成立,照着走一遍,就能拿到自己环境下的基线。

先说清定位:这篇是给部署工程师看的操作思路,不给你现成的排名数字。各家公开的性能数字都绑定了特定卡型、特定数据集和特定参数,只能当方向参考。你自己那台机器上的真实表现,必须自己压出来;具体卡型对应的参考数据,到 站内速度测试工具页(/tools/speed-test) 核对当时的数字。

先定指标:vLLM 对比性能到底比哪几项

对比性能最忌讳只报一个数。至少要同时记四类指标:吞吐(每秒总 token 数)看的是单位成本,单请求输出速度、首 token 延迟、并发上限看的是用户体验。只报吞吐,服务可能一上并发就卡死;只报延迟,成本可能翻倍。四类一起记,结论才立得住。

指标衡量什么必须一起记录的口径
吞吐(总 token/秒)相同成本下的服务容量输入长度、输出长度、并发数、卡数
单请求输出速度单个用户感知的生成快慢量化精度、是否开前缀缓存
首 token 延迟用户点击到看到第一个字的等待输入长度、批大小
并发上限与显存峰值一张卡能撑多少路请求最大序列长度、KV 缓存配置

口径比指标本身更重要。同一组指标,换了输入长度、并发数、量化档位、张量并行卡数或者前缀缓存开关,就是另一个数,不能放在一起比。显存峰值要单独记,它决定同一张卡能塞多少并发,也决定压测会不会中途 OOM。业务侧的间接指标,比如超时率、排队等待、单请求成本,放在压测之后单独补测,别混进框架对比里,否则分不清是框架的问题还是业务配置的问题。

压测怎么做才可比:固定变量与取样方法

  1. 固定基础变量把模型、权重版本、量化档位、卡型、驱动和推理参数固定下来,只留一个要对比的变量,一次只动一处。动了两处,结果就说不清是谁造成的。
  2. 按真实分布取输入长度翻业务日志,取输入长度的真实分布,至少各跑一档短输入和一档长输入。只测单一长度,线上长尾一上来表现就会不一样。
  3. 阶梯加压找拐点并发从 1 开始逐级往上加,记录吞吐曲线和延迟曲线,找出吞吐不再涨、延迟开始明显抬升的那个点。别只报一个最大并发数,那个数通常已经不可用了。
  4. 预热后多轮取样每档先跑若干请求预热,再开始计数,至少跑多轮取稳定值。单轮数字波动很大,不要拿它下结论。

和谁比、比哪些维度:框架之间的对比维度清单

  • 同卡同模型比框架:vLLM 和其他推理框架在同一机型、同一权重上的差异才有参考价值,换卡换模型之后的数只代表那一组配置
  • 比特性支持而不只比速度:多卡并行、前缀缓存、连续批处理、多模态输入、结构化输出,你业务要用的特性不支持,速度再高也得换方案
  • 比运维成本:启动耗时、显存碎片、崩溃恢复、参数项多少,这些不进吞吐数字里,但天天影响值班的人
  • 比扩展性:从单卡到多卡、单机到多机,性能是不是随资源近似放大,只看单机数看不出上限

还要提醒一句:这几项里,很多结论只在特定场景下成立。比如你的请求都是短问答,那长文档下的吞吐对比就跟你没关系;你的业务并发一直很低,那高并发拐点就只是参考。先想清楚自己的流量形态,再决定哪几项值得花时间测。

结论什么时候不成立:四类常见误读

常见做法为什么结论不成立正确做法
直接引用公开性能数字卡型、数据集、驱动版本都和你不同只当方向参考,自己复测基线
压测客户端和服务同机客户端抢资源,量到的是客户端上限客户端独立部署,先做客户端压测
用短输入高并发的数推广到全场景长输入场景下表现完全不同按任务形态分开测,分别记录
升级前后混用旧数据版本变化会造成明显落差升级或换卡后重新测基线

还有一种情况容易被忽略:多卡场景里,只调小并行度或者只加卡数,都可能让数字变差或者不变。这时候别急着认定框架不行,先确认模型切分方式和通信开销是否匹配你的硬件拓扑。具体到某张卡、某个模型版本的参考表现,到 站内模型资料页(/models) 对照当时的记录。

落地排查顺序:从上不了线到调得动

  1. 先跑通单请求确认首 token 延迟和输出速度在可接受区间。这一步不过,就别急着压并发,否则只会把配置问题放大。
  2. 按业务峰值并发压测先找吞吐拐点,再确认延迟是否还在你承诺的范围内。两者都满足,才能算这一档达标。
  3. 显存吃紧就逐项回调回头看量化档位、最大序列长度、并发缓存配置,一次放开一项,验证到哪个配置开始 OOM 或者延迟失控。
  4. 多卡补测扩展性测线性度和通信开销,必要时对比不同的并行切分方式,确认加卡是不是真的加性能。
  5. 存一张基线表把上面所有指标、口径和配置记录下来存档,升级框架或换卡后照着同一张表复测。没有基线,下次对比又得从头吵。
性能数字本身没有意义,有意义的是同一口径、同一硬件、同一流量形态下,你自己跑出来的那组对照。
下一步想先看看自己这张卡上跑出来的基础速度,再去对比框架差异,可以到站内速度测试工具直接跑一轮,把结果存下来当基线。

常见问题

vLLM 对比性能主要看吞吐还是延迟?

看你的业务形态。批量离线任务看每秒总 token,因为它直接决定单位成本;在线对话看首 token 延迟和单请求输出速度,用户感知的是这两项。两个都要测,只报一个数容易误导自己。

同一个模型,vLLM 和别人测出来的数字差很多,正常吗?

正常,先核对口径:输入输出长度、并发数、量化档位、卡型、张量并行数是否一致。如果这些都对齐还差很多,再看驱动、CUDA 版本、是否开了前缀缓存。对齐口径前不要下谁更快的结论。

只跑一次压测就下结论可以吗?

不建议。推理服务受显存分配、缓存预热、机器负载影响,单轮波动可能很大。至少预热后跑多轮取稳定区间,并记录下当时的配置,否则过几天复现不出来,也没法判断是版本变了还是环境变了。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。