最近在折腾本地部署,机器是4090 24G,想跑Qwen2.5-7B-Instruct做代码补全。我用了vLLM,开了gptq量化(4bit),max-model-len设了8192,结果一启动就OOM,看日志显示KV cache分配失败。后来把max-model-len降到4096勉强能跑,但上下文一长就开始疯狂换页,速度慢到没法用。我查了文档,说7B 4bit大概要6-7G显存,按理说24G应该绰绰有余啊?是不是我--gpu-memory-utilization参数没调好?还是说vLLM对量化模型的支持有问题,应该直接用AWQ或者FP8?另外我注意到有人推荐用llama.cpp的flash attention,说显存占用更低,有点犹豫要不要换方案。有没有大佬指点一下,我这配置到底该怎么调优?
vLLM部署Qwen2.5-7B显存总爆,是量化不够还是我姿势不对?
全部回复
共 88 条试试把gpu-memory-utilization调到0.9,vLLM默认0.9但KV cache按总显存算,4bit权重省下的显存它不一定给你。
gpu-memory-utilization默认0.9,你拉到0.95试试,KV cache能多分点。
24G跑7B 4bit按理说确实不该OOM,问题大概率出在gpu-memory-utilization默认0.9,vLLM会预留一大块给KV cache,8192上下文权重没占多少但cache要吃掉不少。试试调到0.85再把max-num-seqs降下来,别让它一次吃满。gptq在vLLM上兼容性一直一般,换AWQ会稳很多,FP8要40系才吃得到。另外你确定4090是24G不是被其他进程占着?nvidia-smi先看一眼。
4090跑7B 4bit绰绰有余,先查查是不是max-model-len把KV cache撑爆了,gpu-memory-utilization调到0.9试试。
学到了,感谢分享!
4090跑7B 4bit按理说确实不该OOM,问题大概率出在gpu-memory-utilization上,默认0.9会把显存吃到很满,KV cache预留不够就容易炸。试着把它压到0.8左右,同时用--max-num-seqs限制并发,别让请求一多就把cache撑爆。vLLM对GPTQ支持其实还行,但AWQ在vLLM上更稳,可以换着试试。至于llama.cpp,单请求延迟低但吞吐差,真要做补全服务还是vLLM合适,只是参数得慢慢磨。
4090跑7B 4bit其实完全够,OOM大概率不是量化的问题,而是vLLM的KV cache预分配机制在作怪。它启动时会按max-model-len把整个KV cache池子一次性划出来,8192长度下光这块就可能吃掉十几G,再加上模型权重和激活,24G确实会紧张。你那个gpu-memory-utilization默认是0.9,可以试着压到0.85左右,给系统留点余量,同时max-model-len先别急着调太高。另外GPTQ在vLLM上的支持确实不如AWQ稳,我之前用GPTQ也遇到过类似情况,换成AWQ之后显存占用和吞吐都正常不少,建议你试试AWQ版本。还有个容易忽略的点,enable-prefix-caching如果开着,长上下文场景下cache管理会更激进,可以关掉看看有没有改善。llama.cpp那边优势是能用CPU卸载KV cache,但纯GPU推理速度跟vLLM不是一个量级,做代码补全还是vLLM更合适。
试试加--enable-chunked-prefill,再把gpu-memory-utilization拉到0.9,KV cache别用默认值。