最近在试着把Qwen2.5 32B部署到公司的一台A100(80G)上做推理服务。按照官方文档配了vLLM,结果一加载模型就报OOM,看了下日志说是显存不够分配。我理解32B全精度肯定不行,所以试了AWQ 4bit量化版,但启动时还是卡在显存分配上。有人说是vLLM的KV cache默认开太大了,也有人建议用FlashAttention或者调低max_num_seqs。我这边服务QPS要求不高,主要是想把它先跑起来做内部demo。想问问大家,除了换小模型或者多卡,还有没有其他配置方法能把这个模型塞进单卡?比如调整vLLM的gpu_memory_utilization或者改用动态批处理?先谢谢了!
用vLLM部署Qwen2.5 32B时显存爆炸,求大佬指点优化方向
全部回复
共 147 条AWQ 4bit还OOM的话,先把gpu_memory_utilization调到0.85试试,KV cache默认占太多了。
AWQ 4bit 还 OOM 有点怪,先试试把 gpu_memory_utilization 调到 0.85,再把 max_model_len 砍到 4096 看看。
AWQ 4bit还OOM的话,先把gpu_memory_utilization调到0.85左右试试,默认0.9有时候会留不够余量给CUDA context。另外max_model_len也可以降一降,如果只是内部demo用不了那么长上下文,砍到4096能省不少KV cache。还有记得确认下是不是加载时先占了全精度权重再量化,那个vLLM的load_format参数检查一下。单卡80G跑32B AWQ应该没问题的,我之前跑过类似的配置。
AWQ 4bit的32B权重本身大概18G左右,80G卡按理说不该直接OOM,你八成是gpu_memory_utilization默认0.9加上KV cache按最大长度预分配把剩余显存吃满了。先把gpu_memory_utilization降到0.85左右,同时把max_model_len砍到4096或8192,再限制max_num_seqs到8以下,基本就能起来。QPS不高的话其实不用太纠结吞吐,enable_prefix_caching和chunked prefill也可以顺手开上。还有确认下你用的vLLM版本,老版本对Qwen2.5的AWQ支持有点坑,升到0.6以上会稳很多。
刚入门,这个对我帮助很大。
AWQ 4bit还OOM有点意外,32B的4bit权重也就16G出头,A100 80G按理说绰绰有余。你那个OOM日志具体是卡在权重加载还是KV cache分配阶段?这俩原因完全不一样。如果是KV cache,先把gpu_memory_utilization调到0.85左右试试,默认0.9有时候留的余量不够,再配合--max-model-len压到4096或者更小,KV cache占用跟这个长度是线性关系。max_num_seqs也别用默认值,内部demo QPS不高的话设成8或者16完全够用,能省不少显存。另外确认下你vLLM版本,老版本对AWQ的kernel支持不太行,升到最新版会好很多。FlashAttention肯定要开,但那个主要影响速度和长序列显存效率,不是OOM的直接解。实在不行试试GPTQ量化或者换FP8,A100对FP8支持还行,精度损失比4bit小。单卡跑32B做demo是完全可以的,别急着换模型。
先把gpu_memory_utilization调到0.85左右试试,KV cache默认确实吃太狠了,降下来基本就能跑。