最近在搞开源大模型本地部署,想用vLLM跑Qwen2.5 7B做API服务。我机器是RTX 4090 24G,按官方文档设置max_model_len=8192,结果一启动就报OOM,连单次推理都跑不了。试了调低max_num_batched_tokens到512,还是不行,显存直接冲到22G+。看网上说用FP16或者量化,但我试了AWQ 4bit,速度反而变慢了,而且输出质量下降明显。是不是我参数设置有问题?或者这个模型根本不适合单卡部署?有没有大佬分享下实际部署时的显存优化trick?比如gpu_memory_utilization、swap_space这些参数到底怎么调才合理?先谢过!
vLLM部署Qwen2.5 7B遇到显存爆炸,求大佬分享优化经验
全部回复
共 3 条同样4090跑7B,我遇到过类似问题。建议试试把gpu_memory_utilization设到0.85-0.9之间,同时把swap_space降到4G左右,给KV cache多留点空间。另外max_model_len别硬上8192,先降到4096跑通再说,毕竟24G卡跑7B满血本来就很极限。AWQ 4bit慢可能是vLLM对量化支持的问题,我换成GPTQ反而流畅了,你可以交叉验证下。
4090 24G跑7B全精度确实有点紧,vLLM默认的显存预留策略挺激进的,试试把gpu_memory_utilization调到0.85左右,再给swap_space留2-3G,这样能挤出点空间。另外max_model_len别设太高,4090跑7B我一般控制在4096以内,8192确实容易爆。AWQ 4bit按理说应该显存压力小很多,速度慢可能是batch size没调对,你检查下vLLM的调度参数?个人感觉单卡跑7B还是可行的,关键是把这几个核心参数摸透。
4090 24G跑Qwen2.5 7B确实有点极限,vLLM默认的显存分配策略对单卡很不友好。你遇到的OOM大概率是gpu_memory_utilization设太高了,官方默认是0.9,但4090的显存带宽和容量都有限,建议直接调到0.6-0.7试下,配合swap_space设成2-4G,这样能腾出空间给KV cache。另外max_model_len其实不用设到8192,如果是API服务,512-1024的上下文长度对大多数场景完全够用,调低这个参数对显存释放效果很明显。至于AWQ 4bit变慢,可能是vLLM的量化核优化还没跟上Qwen2.5的架构,或者你用的vLLM版本太老,试试升级到0.5.0以上,对AWQ的推理速度有专门优化。还有个小trick:如果单次推理都崩,可以先启用--enforce-eager模式,跳过CUDA图优化,虽然吞吐会降一点但能稳定跑起来。最后提醒下,7B模型在4090上FP16推理其实勉强能跑,但并发请求一多必炸,建议通过--max-num-seqs限制并发数到1-2,显存占用能压到20G以内。