最近在折腾本地部署,手头有4张A100 40G,想跑Qwen2.5-72B做长文本摘要。试了AWQ 4bit量化,单卡能塞下但推理速度慢得离谱,生成2000字要等三四分钟。后来试了TP=4的张量并行,显存倒是够了,但总吞吐还不如单卡量化,还时不时报OOM(可能是KV cache配置问题?)。看社区说可以量化+TP混用,但不知道AWQ还是GPTQ更适合多卡场景,以及并行度设多少能平衡速度和显存。有没有大佬分享下实际生产环境的配置方案?顺便问下,FP8是不是更优解,还是说只能靠增加显存硬刚?
vLLM部署Qwen2.5-72B时显存爆了,量化+多卡怎么搭配最稳?
全部回复
共 8 条我之前也踩过这个坑,4卡40G跑72B,TP=4配AWQ确实容易因为KV cache分配不均导致OOM,建议试试把张量并行降到TP=2,再用序列并行把长文本拆开,显存压力会小很多。至于量化,GPTQ在多卡下的通信开销比AWQ低一些,但AWQ的激活感知量化对长文本生成质量更友好,我个人更倾向AWQ+TP=2+流水线并行,吞吐能提个30%左右。FP8我试过,在A100上收益不大,除非你是H系列,否则别折腾了。最后检查下vLLM的gpu_memory_utilization,留个5%-10%给KV cache余量,别拉满。
说实话你这情况我踩过差不多的坑,TP=4吞吐低大概率是卡间通信瓶颈,尤其A100的NVLink带宽扛不住72B这种大模型。建议试试AWQ量化+TP=2,单卡塞一半模型,留点显存给KV cache,生成速度能比单卡翻倍还稳。FP8我试过,虽然省显存但有些算子优化不到位,反而容易触发慢速路径,不如AWQ省心。另外OOM多半是max-model-len没调好,把KV cache的显存预留调低一档,或者开下--enable-chunked-prefill,能缓解不少。
TP设2+AWQ 4bit试试,吞吐比单卡快,显存也稳,FP8得看卡和框架支持。
KV cache得手动调,默认太激进,我TP4老OOM就是这问题。
说实话TP=4吞吐反而下降大概率是卡间通信瓶颈,A100的NVLink带宽扛不住72B这种大模型频繁同步,建议先试TP=2+AWQ,KV cache用gptq_model的量化参数或者手动调低max_model_len到8K试试。FP8在Hopper上确实香,但你这卡得看驱动和vLLM版本支不支持,别为了省显存把稳定性搭进去。我自己的经验是量化+TP混用别贪心,AWQ比GPTQ在多卡下更稳,GPTQ偶尔会出数值抖动。
试过你这套组合,AWQ+TP4确实容易踩KV cache的坑,建议把gpu_memory_utilization调到0.9以下,然后cache_block_size调小点试试。我个人体感GPTQ在多卡下比AWQ稳,但吞吐差别不大,主要是显存碎片少一些。FP8在A100上其实没硬加成,不如直接上AWQ+TP2,每张卡负载轻了速度反而能上来。另外长文本摘要可以考虑把prompt缓存拆到CPU上,能省不少显存给生成阶段。
试过AWQ+TP2,吞吐比单卡量化强一半,显存余量也稳,KV cache记得手动调低点。
这问题我踩过差不多的坑,TP=4配AWQ确实容易因为KV cache分配不均导致OOM,试试把gpu_memory_utilization调低到0.85,再给KV cache设个固定值。FP8在40G上其实挺尴尬,吞吐比4bit略好但显存没省多少,建议还是AWQ+TP=2跑,单卡慢主要是张量并行通信开销太大。另外长文本摘要可以把max_model_len砍到8K,这模型对长上下文的内存消耗比想象中夸张。
说实话你这情况我踩过差不多的坑,TP=4配合AWQ确实容易因为KV cache分配不均导致OOM,尤其是长文本场景下显存碎片化特别严重。我后来是把TP调到2,然后配合GPTQ的128g分组大小,吞吐反而比TP=4稳,而且显存占用能压到32G左右,你可以试试看。另外你提到的速度问题,单卡AWQ慢很大程度是因为量化后的反量化开销在长序列生成时被放大了,这时候其实可以开vLLM的chunked prefill,把prefill和decode阶段拆开调度,体感能快个30%。至于FP8,如果卡是Hopper架构的话确实更优,但A100不支持原生FP8,得走模拟,收益不大,不如把量化粒度调细一点。还有个小技巧,把max_num_seqs调低一点,比如从256降到64,能明显减少KV cache峰值,代价只是并发低一点,但对你这种长文本场景完全够用。你现在用的是vLLM哪个版本?0.6.3之前有个显存管理的老bug,升级到0.6.6之后OOM频率会低很多。