[控场AI]
· 5 分钟阅读· 2,878 字

RTX 3090 vs L40S实测:批处理大小如何颠覆性能与成本

RTX 3090 vs L40S实测:批处理大小如何颠覆性能与成本

3090与L40S的推理性能对比随批处理大小反转,成本优劣取决于并发模式。

本文通过在vast.ai上使用相同vLLM脚本对RTX 3090和L40S进行实测,发现两者性能对比完全取决于并发请求数:batch 1时3090略快(1.03-1.09倍),batch 128时7B AWQ模型下3090仅为L40S的0.46倍。成本方面,低批量时3090每token成本约为L40S一半,但高批量下L40S在AWQ模型上反超。作者指出小批量瓶颈在显存带宽,大批量则释放L40S算力优势;量化模型使计算瓶颈更早出现。此外,同型号不同卡性能可能有差异,GPU空闲时间会大幅推高实际成本。选型应基于典型并发和实际利用率,而非单卡跑分。

为什么没有单一的“谁更快”答案

“3090和L40S哪个快?”——如果你期待一个简单的倍数,这篇实测会让你失望。作者在vast.ai租用的机器上,用相同的vLLM 0.27.1脚本、相同的模型(Qwen2.5 1.5B和7B,含AWQ量化)、128个输出token、开启CUDA graphs,分别测试了batch 1、8、32、128下的吞吐,每个设置重复3次取中位数。结果很明确:性能对比完全取决于并发请求数。

rss source: A 3090 vs an L40S: 1.09x at batch 1, 0.46x at batch 128

在batch 1时,3090大约是L40S的1.03~1.09倍;到了batch 128,7B AWQ模型下3090只有L40S的0.46倍。这背后的逻辑是:小批量时瓶颈在显存带宽(3090为936 GB/s,L40S为864 GB/s),两者半斤八两;大批量时计算密度上升,L40S的算力优势被完全释放。

vLLM 是一个开源的高吞吐量 LLM 推理与服务引擎,其核心创新是 PagedAttention——将 KV 缓存分页管理,像操作系统管理虚拟内存一样减少显存碎片,从而支持更大的批处理。vLLM 支持连续批处理(continuous batching),即动态将新请求插入正在运行的批次,显著提升 GPU 利用率。文中提到的 CUDA graphs 是一种将内核启动序列录制为图并一次性提交的技术,可减少 CPU 启动开销,尤其有利于小 batch 低延迟场景。而 AWQ(Activation-aware Weight Quantization) 是一种 4-bit 权重量化方法,通过保护对激活值影响大的权重通道来保持精度,大幅降低显存占用,但计算时仍需反量化,可能改变不同硬件下的瓶颈分布。

性能数据:从持平到大幅落后

作者给出了三组模型的详细倍数(3090速度 ÷ L40S速度):

  • 7B fp16:batch 1为1.03x,batch 8为1.04x,batch 32为1.11x,batch 128骤降至0.72x
  • 7B AWQ:batch 1为1.09x,batch 8为1.01x,batch 32为0.71x,batch 128仅0.46x
  • 1.5B fp16:batch 1为1.09x,batch 128为0.70x

你可能没注意到,7B AWQ在batch 32时3090已经明显落后(0.71x),而fp16模型直到batch 128才被反超。这说明量化模型对计算资源的需求变化更敏感——AWQ减少了显存占用,但也让计算成为更突出的瓶颈。作者强调,所有重复测试的波动在3090上不超过0.5%,L40S最差2.6%,因此数据并非噪声。

成本反转:低批量3090便宜一半,高批量L40S更优

按作者实际支付的价格(3090每小时0.414美元,L40S每小时0.826美元),只计算GPU忙碌时间,每百万输出token的成本如下:

模型/批量3090成本L40S成本
7B fp16 batch 1$2.22$4.59
7B fp16 batch 128$0.041$0.059
7B AWQ batch 1$0.77$1.67
7B AWQ batch 128$0.040$0.036

低批量时,3090的成本约为L40S的一半;但在batch 128下,7B AWQ的L40S成本已经低于3090($0.036 vs $0.040)。哪张卡更便宜,取决于你的流量模式,而不是卡本身。如果你的服务以低并发请求为主,3090的性价比极高;如果追求高吞吐,L40S的单位token成本会反超。

显存带宽指 GPU 从显存读取数据的速度,单位 GB/s;算力通常指 FP16/FP32 浮点运算能力,单位 TFLOPS。在自回归推理的解码阶段,每生成一个 token 都需要读取全部模型权重和 KV 缓存,因此当 batch 较小时,计算单元大量闲置,性能受限于显存带宽;随着 batch 增大,每次读取的权重可被多个请求复用,计算密度上升,算力成为瓶颈。3090 的显存带宽(936 GB/s)略高于 L40S(864 GB/s),但 L40S 的 FP16 算力远高于 3090,这就解释了为何小批量时两者接近、大批量时 L40S 反超。量化模型(如 AWQ)减少了权重体积,进一步降低了带宽压力,使计算瓶颈更早出现。

两个容易被忽略的变量

作者特别提醒了两点:

第一,单卡测试不代表所有同型号卡。 他之前测过的另一张3090在相同脚本和驱动下,所有设置都明显更慢。选硬件时最好测两张卡,而不是一张。

第二,所有成本假设GPU始终忙碌。 真实服务器不可能满负载。如果GPU只有30%的时间在处理请求,实际每token成本大约是上述数字的3.3倍。这个空闲占比可能是账单里最大的数字,而很多监控面板根本不显示它。作者提供了一个2分钟的指南,通过读取/metrics来查看自己的空闲占比。

GPU 利用率通常指 GPU 在采样周期内至少有一个内核在执行的时间比例,可通过 nvidia-smi 或推理框架的 /metrics 端点(如 vLLM 暴露的 gpu_cache_usage_perc、num_requests_running 等)间接观察。但需注意,利用率高并不等于计算单元饱和——等待显存的数据搬运也会体现为“忙碌”。因此,评估成本时应区分“GPU 被占用”和“算力被有效利用”。对于按小时计费的云 GPU,空闲时间同样计费,实际每 token 成本 = 标称成本 ÷ 利用率。作者建议通过监控请求队列长度和批次大小来估算真实忙碌比例,从而更准确地比较硬件选型。

对实际选型的启示

这次实测的价值不在于得出“3090比L40S快”或反之,而在于展示了一个被忽略的维度:批处理大小会彻底改变硬件对比的结论。对于个人开发者或小规模服务,低并发场景下3090以一半的成本提供相近的性能;对于需要高吞吐的在线服务,L40S在batch 128时不仅速度更快,AWQ模型下成本也更低。

作者公开了全部192次运行的数据、脚本和机器细节,并承接付费的定制化基准测试。如果你正在选型,不妨先问自己:我的典型并发是多少?GPU的实际利用率有多高?这两个问题的答案,比任何单卡跑分都更能决定你的账单。

#RTX 3090#L40S#vLLM#GPU性能对比#每token成本#批处理大小#LLM推理
分享:

相关推荐