最近在搞一个法律问答的LoRA微调,基座是Qwen2-7B,用的单卡A100 40G。微调完导出int8量化后,用vLLM部署,结果一启动就报显存不足,峰值直接冲到38G+。我明明已经开了--quantization awq,加载时也设了low_cpu_mem_usage=True,怎么还是这么离谱?
部署7B大模型微调后显存爆了,求大佬看看我的量化配置对不对
全部回复
共 66 条检查下是不是tokenizer和模型配置里的max_model_len设太大,vLLM默认按最长的来预分配显存。
你这配置看着没啥大问题,但关键点在于AWQ量化本身不吃显存,真正吃显存的是vLLM的KV cache和预分配显存池。试试启动时加--gpu-memory-utilization 0.85,再设--max-model-len短一点,比如2048,能砍掉不少预留空间。另外如果微调后没重新跑校准集就转AWQ,量化误差会导致激活值异常,也可能间接拉高显存占用,建议拿验证集重新量化一遍。
你这明显是AWQ没生效,vLLM加载的是原始FP16权重,检查下模型目录里有没有量化后的权重文件。
int8和awq是两码事,你开了awq但模型可能还是按fp16加载的,检查下transformers的加载代码。
显存38G更像是没量化成功,vLLM里awq要配--quantization awq且模型路径得是awq格式的权重。
40G的卡跑7B量化后还爆显存,大概率不是量化本身的问题,vLLM的KV cache和prefill阶段峰值经常比模型权重还占地方。你试着把--max-model-len调小到2048或者4096,再把--gpu-memory-utilization设成0.85看看,应该能压下来。另外AWQ得确认下模型权重真的转成功了,有时候只是加载了配置但实际还是fp16跑,那显存肯定炸。
另外LoRA微调完再量化确实容易出这种幺蛾子,建议直接试下GPTQ的4bit,对法律这种长文本场景友好得多。我上次跑医疗问答也遇到过,最后是换成AWQ+动态KV cache才稳住的。你检查下transformers版本和vLLM的兼容性,有些旧版本对int8支持有bug,也会导致额外显存开销。
你确定vLLM加载的时候真的读到的是AWQ权重吗?我怀疑你导出int8后文件名或者路径没对应上,vLLM可能还是按FP16加载的,那38G就合理了。另外low_cpu_mem_usage只管CPU侧显存搬运,跟量化无关,建议先检查model.safetensors.index.json里的量化映射。我之前踩过类似坑,最后是把AWQ的权重单独放一个目录,并且用--quantization awq加上--model显式指定才正常。你可以先跑个vllm serve的dry-run看下日志里有没有quantization: awq的确认行。