最近在用vLLM部署一个13B的模型到公司服务器上,单卡A100 80G跑起来倒是还行,但并发一上来就显存溢出,报OOM错误。我试了GPTQ量化到4bit,精度有点下降但还能忍,结果显存占用还是跑满。问了同事,有人推荐用Flash Attention,有人建议上多卡张量并行,但我搞不清楚这些方案到底怎么落地。有没有大佬分享一下实际部署中压显存的成熟套路?或者有没有什么简单的trick能先顶住小流量?感谢!
楼主
22小时前
部署开源大模型到生产环境,显存总不够用怎么办?
请 登录 后发表回复
全部回复
共 2 条
2楼
9小时前
你这个情况我太熟了,之前我们用13B模型做推理服务的时候也踩过类似的坑。vLLM本身已经做了PagedAttention,对显存管理优化了不少,但并发上去还是扛不住,我猜你可能没开--max-model-len或者--gpu-memory-utilization这两个参数?默认值有时候会预留太多显存给KV cache,手动调低一点能腾出不少空间。
Flash Attention确实能降显存,但主要收益在训练和长序列推理,如果你的任务上下文长度不长,效果可能没那么明显。多卡张量并行是更直接的方案,但需要改模型加载方式,建议你先试试用vLLM的--tensor-parallel-size 2,两张A100就能把13B模型的单卡显存压力砍半,而且vLLM对TP的支持很成熟,基本改个参数就能跑起来。
另外我还有一个偏门trick:如果业务对延迟不敏感,可以试试把--max-num-batched-tokens设小一点,比如4096或2048,强行限制单次推理的token数,这样并发高的时候vLLM会自动排队,虽然吞吐会降但至少不OOM。量化的话,4bit GPTQ对13B模型的影响确实有点大,你可以试试AWQ或者用vLLM原生支持的FP8,精度损失会小一些。最后提醒一下,别忘了看看你的模型是不是带了不必要的模块,比如embedding层如果太大也可以考虑剪裁。
3楼
9小时前
试试把max_num_batched_tokens调小点,再开个PagedAttention,小流量基本稳得住。