最近在搞一个法律文书问答的垂直小模型,基于Qwen2.5-7B做了LoRA微调。微调完用vLLM部署到一张A10上,但发现推理速度比原版base模型慢了好多,尤其长上下文(4K以上)时首token延迟能到2-3秒。试过TGI也一样,显存占用倒是没爆,但吞吐就是上不去。我已经设了max_model_len=8192,gpu_memory_utilization也调到0.9了,量化也用了GPTQ,但感觉提升不明显。想问下各位老哥,是不是我微调后权重碎片化导致的?还是说7B模型在A10上本来就是这个水平?有靠谱的优化思路吗?或者有没有推荐的部署方案,比如加个prefill/decode解耦之类的高级特性?先谢过各位了。
部署7B大模型微调后推理变慢,vLLM和TGI都试了还是卡,求助
全部回复
共 45 条LoRA微调后权重合并如果没做对,确实可能让推理变慢,建议先确认下merge方式。不过A10上7B跑到4K上下文首token 2-3秒,其实也不算太离谱,GPTQ量化对首token延迟帮助有限,主要省的是显存。可以试试开chunked prefill,vLLM里加上--enable-chunked-prefill,长上下文场景提升挺明显的。prefill/decode解耦对单卡意义不大,那是多卡集群才玩的东西。
LoRA微调确实容易让推理变慢,尤其你合了权重之后,vLLM对非原生结构的支持没那么顺,碎片化不是玄学。A10跑7B 4K上下文首token 2-3秒有点偏高,但也不是完全离谱,关键看你的batch和并发。GPTQ在vLLM上对长上下文其实不一定是正收益,有时候kernel反而不如fp16快。建议先拿base模型同样参数测一遍做基线,再试试AWQ或者干脆不量化,另外检查下是不是LoRA没merge干净。prefill/decode解耦对单卡没意义,先别折腾那个。
GPTQ对LoRA合并后的权重其实不太友好,量化误差叠加上去长上下文确实容易掉点,可以试试换AWQ或者干脆不量化用bf16跑对比一下。A10这卡4K往上首token两三秒我觉得还算正常,7B本身prefill就不是强项,别太指望一张卡能多快。你说的碎片化问题我倒觉得不是主因,LoRA merge完权重是完整的,更可能是你max_model_len拉到8192后KV cache把显存吃紧了导致调度变慢。真想提速可以看看chunked prefill开起来,或者上双卡做TP,prefill/decode解耦对单卡场景意义不大。
LoRA权重合并后其实不应该比base慢这么多,你这延迟更像是长上下文prefill没跑满。A10单卡跑7B 4K+确实吃力,GPTQ在vLLM里对prefill加速有限,反而可能因为kernel切换掉点。先确认下是不是每次请求都重新加载了adapter,或者max_num_batched_tokens设太小了,这个参数对首token影响很大。另外你batch size是不是一直1在测,吞吐上不去跟并发也有关系。prefill/decode解耦对单卡意义不大,不如先试试开chunked prefill加调大batch token数。
LoRA微调后推理变慢这事我也踩过,大概率不是碎片化的问题,而是merge权重的方式或者adapter没合进去导致走了额外计算路径。你先确认下vLLM加载的是合并后的权重还是动态adapter,后者在长上下文下确实会拖首token。另外A10这张卡跑7B在4K上下文2-3秒首token其实不算离谱,GPTQ对prefill加速有限,主要省的是decode阶段显存。想压延迟可以试试开chunked prefill,或者换FP8在L20这类卡上会明显些,解耦部署对单卡场景意义不大。