最近在搞本地知识库,把Qwen2.5-7B用vLLM部署到单卡A100(40G)上,batch_size设了8,max_model_len调成4096,结果一跑起来显存直接干到38G+,稍微多几个并发请求就OOM。我看官方文档说7B模型int8只需要十几G,但我用默认的--dtype auto加载,好像还是fp16?另外gpu_memory_utilization我设了0.9,是不是太高了?有没有老哥分享下生产环境的参数组合?或者是我vLLM版本(0.6.3)太老的问题?提前谢谢了,刚接触推理优化,好多概念还在摸索中。
vLLM部署Qwen2.5-7B遇到显存爆炸,是代码问题还是我配置不对?
全部回复
共 112 条显存爆掉多半不是vLLM的锅,40G卡跑7B的fp16权重也就15G左右,真正吃显存的是KV cache。你把max_model_len拉到4096再乘batch_size 8,光KV缓存就能占十几G,加上激活值轻松破35G。想省显存可以把gpu_memory_utilization降到0.85,同时用--quantization awq或者gptq加载int4权重,比fp16省一半还多。另外0.6.3确实有点旧了,新版本对KV cache的管理和chunked prefill优化明显更好,建议升到0.6.6以上再试试。
max_model_len 4096 加 batch 8,KV cache 就吃掉一大半,先降到 2048 试试。
max_model_len 4096加上batch 8的KV cache本来就吃显存,gpu_memory_utilization 0.9也太贪了,先降到0.85试试。
gpu_memory_utilization 0.9 确实偏高了,降到 0.85 试试,另外 dtype 显式指定 float16 别用 auto。
0.9的gpu_memory_utilization确实太激进了,降到0.85试试,给系统留点余量。
A100跑7B用fp16,权重就占15G左右,加上KV cache和激活,38G不奇怪。试试加--quantization awq或者换int8量化版模型。
0.6.3对Qwen2.5支持确实一般,升到0.8以上会好很多,另外显存吃紧先把gpu_memory_utilization降到0.85试试。
--dtype auto在vLLM里其实基本就是fp16,除非模型config里写了别的,所以7B的权重就占14G左右了,加上KV cache才是大头。你4096的max_model_len配上batch 8,KV cache算下来差不多要十几G,再加激活值和CUDA graph那点开销,38G其实不算离谱。想省显存可以试试--quantization awq或者直接换GPTQ的int4权重,那个才是真省,默认加载的fp16别指望十几G。gpu_memory_utilization 0.9不算高,但它是预分配,启动时就把90%显存锁住了,剩那点余量根本扛不住波动,可以先降到0.85试试。真要跑并发的话,把max_model_len压到2048、batch降下来,或者开--enable-chunked-prefill会舒服很多。0.6.3确实有点旧了,新版在KV cache管理和调度上优化不少,有空升一下。
auto 默认就是 fp16,7B 权重就占 15G 左右,你 max_model_len 4096 再加 batch 8,KV cache 才是吃显存的大头,38G 不奇怪。想省显存试试 --quantization awq 或者 gptq 的 int4 权重,光靠调 gpu_memory_utilization 治标不治本。另外 vLLM 0.6.3 有点旧了,新版对 KV cache 和 chunked prefill 优化不少,建议升一下再压测看看。
7B模型fp16权重本身就占14G左右,KV cache才是大头。你max_model_len 4096配batch 8,光KV缓存就要吃掉不少,gpu_memory_utilization 0.9基本等于把卡榨干,并发一上来肯定OOM。想省显存可以试试量化到int8或者fp8,或者把max_model_len往下压,batch别死磕8,vLLM的continuous batching本来就能动态调。0.6.3确实有点旧了,新版本对显存调度优化不少,建议升一下再测。
gpu_memory_utilization 0.9确实偏高了,它算的是总显存比例,光权重加KV cache预分配就快吃满了,建议降到0.85左右留点余量。dtype auto默认确实是fp16,想省显存得显式加--quantization awq或者用gptq的量化权重,int8那条路走smoothquant也行。max_model_len 4096配batch 8,KV cache本身就占不少,可以试试调小batch或开enable_prefix_caching。0.6.3版本有点旧了,升到0.7.x对显存管理优化挺明显的。
auto默认就是fp16,想省显存得手动加--quantization awq或gptq,不然40G卡7B确实吃紧。