最近在试着把一个7B的量化模型(GPTQ 4bit)部署到公司一台双路3090的服务器上,显存占用大概13GB左右,按理说跑单条输入应该挺稳的。但实际推理时,第一次加载模型就花了快两分钟,后面生成token的延迟也高得吓人,平均1秒才出2-3个token,完全没法用。用的是vLLM框架,也试过调整max_batch_size和tensor_parallel,但效果不明显。有没有大佬遇到过类似情况?是模型加载方式有问题,还是显存带宽成了瓶颈?或者我该换个量化方案试试?真诚求指点,折腾几天了,头大。
部署7B大模型到服务器,显存够但推理速度慢得离谱,求优化思路
全部回复
共 164 条双路3090跑GPTQ 4bit的7B模型,出2-3 token/s确实不正常,这卡再怎么说也不该这么慢。你加载花两分钟这个细节挺关键的,正常vLLM加载量化模型也就几十秒。我怀疑你是不是没装优化过的kernel,比如auto-gptq或者exllama的核,vLLM如果回退到默认的PyTorch实现,那速度直接跪。另外GPTQ在vLLM上的支持一直有点微妙,你可以换成AWQ试试,同样是4bit,AWQ在vLLM里跑起来通常更顺,吞吐能差好几倍。还有个坑是tensor_parallel设成2之后通信开销反而可能拖后腿,7B模型单卡24G完全放得下,不如先单卡跑一遍对比看看。max_batch_size对单条推理延迟基本没影响,那个是吞吐参数,你单请求场景调它没用。建议先确认下vLLM版本和CUDA、驱动匹配不匹配,版本不对也会莫名其妙慢。
双路3090跑4bit 7B才2-3 token/s确实不正常,先别急着换量化方案。你确认下tensor_parallel是不是设成2了,如果模型只跑在一张卡上,另一张卡闲着反而可能拖后腿。另外检查下是不是没装flash-attn或者xformers,vLLM没这些加速库的话decode阶段会慢很多。还有种可能是PCIe带宽瓶颈,双卡通信如果走的是PCIe 3.0 x8,tp=2反而会更慢,可以试试单卡跑看看速度有没有变化。
双路3090跑7B不该这么慢,先看看是不是走了CPU推理或没编译CUDA内核吧。
双路3090跑GPTQ 4bit的7B模型,1秒2-3个token确实不太正常,这卡再怎么说也不该是这个水平。你说的加载慢倒是可以先放一边,GPTQ首次加载要反量化权重、做CUDA kernel编译,一两分钟挺常见的,但推理阶段这么拉胯就有点怪了。我比较怀疑两点,一是你这模型是不是走了HuggingFace的transformers后端而不是vLLM自己的量化kernel,有时候GPTQ在vLLM里没正确识别就会退化到很慢的路径。二是双路3090如果没做好tensor parallel的切分,反而可能因为卡间通信拖后腿,你可以先只用一张卡跑跑看,对比一下速度。另外建议试试AWQ或者直接上FP8,GPTQ在vLLM上的支持一直不算最顺的,换量化方案经常能立竿见影。还有记得确认下是不是开了enforce_eager,这个关了会快不少。