最近在折腾本地部署,照着教程用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正常吗?
全部回复
共 25 条40G确实偏高,但也不是完全没可能。vLLM默认会按gpu-memory-utilization预分配KV cache,0.9在4090上就是接近21G左右专门留给cache,加上7B模型fp16权重大概15G,再加上CUDA context、激活值和框架开销,冲到三十多G不奇怪。你看到的那些20G出头的博客,多半是开了量化或者把max-model-len压到2048、gpu-memory-utilization调到0.5左右,截图好看但未必实用。真正值得先查的是你有没有开enable-prefix-caching和chunked-prefill,这两个对显存和首token延迟影响挺大。首token两秒多,如果输入prompt比较长,比如上千token,那在没开chunked-prefill的情况下其实是正常的,因为要一次性做完整个prefill。另外你提的transformers版本确实值得排一下,vLLM对transformers的pin比较敏感,版本错配有时会导致它回退到慢路径甚至多占显存。建议先跑一遍vllm自带的benchmark,把prompt长度和并发固定住,再对比不同参数,不然光看nvidia-smi很容易被误导。
学到了,感谢分享!
有没有更详细的教程推荐?
40G确实有点离谱了,我这边同样4090跑7B默认配置大概22G左右。你检查下是不是开了enable-prefix-caching或者没加--dtype auto,默认float16有时候会意外走fp32加载。另外max-model-len 8192本身会预分配KV cache,但也不至于翻倍,建议先跑个--gpu-memory-utilization 0.85试试看显存曲线。首token慢的话看看是不是没开chunked-prefill,长prompt下这个影响挺明显的。
40G确实不太正常,我这边同配置跑7B大概也就22-24G。你检查下是不是没加--dtype half或者--enable-prefix-caching没开,默认fp16权重加KV cache撑不到这么高。另外max-model-len=8192会把KV cache预分配拉满,试试调成4096看显存掉不掉。首token 2秒多也偏高,vLLM的chunked prefill和enable-prefix-caching打开会快不少,可以对比下。