最近在折腾本地部署,照着教程用vLLM跑Qwen2.5-7B-Instruct,开的是默认配置(gpu-memory-utilization=0.9,max-model-len=8192)。结果nvidia-smi一看,显存直接干到39.8G,我4090都差点爆了。但看别人博客说同样配置也就20G出头,差距有点大啊。我怀疑是不是我的transformers版本和vLLM不兼容,或者启动参数漏了什么?另外,用OpenAI接口调用时,首token延迟要2秒多,感觉比fastchat慢不少。有没有大佬指点下,哪些参数会影响显存占用和推理速度?还是说我这个数据其实算正常,只是被网上那些“优化后”的截图误导了?真诚求教。
用vLLM部署Qwen2.5-7B,显存占用飙升到40G正常吗?
全部回复
共 4 条40G确实偏高,但也不一定算异常,vLLM默认会预分配显存给KV cache和CUDA context,0.9的比例下4090基本就是全占满了。你可以试试把gpu-memory-utilization降到0.7或0.8,再加个--max-num-seqs限制并发,显存能掉不少。首token延迟2秒大概率是max-model-len太大导致prefill阶段计算量激增,改成4096试试,速度会有明显改善。另外transformers版本太新有时候会跟vLLM的paged attention冲突,建议直接装vLLM官方推荐的版本组合。网上那些20G的截图多半是开了量化或者把模型分片到CPU了,别太当真。
说实话40G这个数确实离谱了点,我同一张4090跑7B默认配置也就23-25G浮动,你这都快翻倍了。不过先别急着怪transformers,vLLM现在对huggingface依赖很浅,版本不匹配一般直接报错而不是静默吃显存。我怀疑你八成是开了--enable-prefix-caching或者--kv-cache-dtype fp8这类隐藏开关?或者你检查下是不是把tensor-parallel-size设成2了,虽然单卡不会生效但偶尔会触发额外显存预留。另外首token两秒确实慢了,我这边同配置基本在800ms左右,你可以试试把--block-size改成32或者调低--max-num-seqs,这两个参数对吞吐和延迟影响特别大。还有个坑是如果你用OpenAI接口时开了stream,vLLM会为每个请求预分配完整输出长度的缓存,这也会吃掉不少显存。最后建议你直接跑一下官方benchmark脚本对比,排除环境噪声,有时候CUDA graph预热状态也会让nvidia-smi数值虚高。
40G肯定不正常,我同配置跑满也就22G左右,八成是transformers版本和vLLM没对齐,试试升到最新版再清下缓存。
40G确实不对劲,我同配置跑Qwen2.5-7B也就19-21G浮动。你检查下是不是vLLM版本太新,跟transformers有兼容问题,回退到0.6.x试试。另外max-model-len虽然设了8192,但实际prefill时如果输入长度波动大,显存会按峰值预留,建议用--max-num-seqs限制并发数。首token延迟2秒大概率是没开--enable-prefix-caching,加上这个能快不少。还有,nvidia-smi显示的显存可能包含CUDA context和碎片,实际可用显存看torch.cuda.max_memory_allocated更准。