最近在试着部署一个70B的LLaMA模型做推理,结果发现单张A100 80G根本塞不下。我用的是FP16加载,但光模型参数就占了130G左右,更别说还有KV cache和中间激活了。我知道可以用量化或者模型并行,但对具体实现不太清楚。比如bitsandbytes的4bit量化会不会掉点很严重?还有,用DeepSpeed的ZeRO-3做多卡推理时,是不是每个卡都要装一个完整的模型副本?我目前手头只有两张A100,实在不想买新卡了。求各位大佬指点下性价比最高的方案,或者推荐一些能跑起来的开源工具链。先谢过了!
新手求教:用PyTorch跑70B大模型,显存不够还能怎么抢救一下?
全部回复
共 192 条建议直接用vLLM+张量并行,两张卡刚好能塞下70B,比bitsandbytes稳得多。
两张A100可以试试vLLM加AWQ量化,70B跑int4差不多够用,掉点比想象中小。
两张A100的话,建议优先试vLLM加AWQ 4bit量化,70B差不多能压到40G以内,单卡就能跑,另一张卡还能专门留出来扛并发。bitsandbytes的NF4掉点其实还好,日常对话基本感知不到,但代码和数学任务确实会弱一些,看你的使用场景了。ZeRO-3推理不是每张卡放完整副本,它是把参数切片分散存,但通信开销不小,两张卡跑70B延迟会比较难受。你这情况性价比最高的还是量化加vLLM,别折腾DeepSpeed推理了。
两张A100试试llama.cpp的4bit量化,基本不掉点还省显存,比DeepSpeed折腾起来省心多了。
两张A100的话试试AWQ 4bit加vLLM,掉点比bitsandbytes小,显存能压到40G以内。
两张A100就别硬扛FP16了,直接上GPTQ-Int4加vLLM,70B能单卡跑还快。
两张A100跑70B确实挺极限的,但也不是完全没戏。你提到ZeRO-3,那个其实主要是训练用的,推理场景下它并不会帮你把模型切到每张卡只放一部分,反而每张卡还是得加载完整权重,所以显存该爆还是爆。真要两张卡跑推理,建议直接上vLLM或者TGI,它们支持tensor parallelism,把模型按层切到两张卡上,KV cache也能分摊,比DeepSpeed推理实用得多。量化这块,bitsandbytes的NF4 4bit我实测过13B和70B,困惑度大概涨0.3到0.5,日常问答基本感觉不出来,但代码生成和数学推理会有点掉,看你用途能不能接受。另外可以试试GPTQ或者AWQ的4bit量化版本,HuggingFace上已经有人传了70B的量化权重,加载起来比bnb省心,推理速度也更快。两张A100 80G加起来160G,跑4bit的70B大概占35到40G权重,剩下给KV cache和激活其实挺宽裕的,batch size别开太大就行。
两张A100跑70B推理,最省心的其实是AWQ或GPTQ的4bit量化,显存直接压到40G以内,单卡都能塞下,掉点比bitsandbytes的NF4小一些,尤其是指令微调过的模型。DeepSpeed ZeRO-3推理确实每张卡都会存一份完整权重分片,通信开销也大,两张卡不太划算。真想双卡就用vLLM的tensor parallel,配GPTQ模型,吞吐和延迟都舒服得多。
两张A100跑70B确实有点紧,但也不是完全没戏。我建议你先试试GPTQ或者AWQ的4bit量化,比bitsandbytes的NF4在推理场景下通常更稳,掉点大概1-3个点,具体看任务,日常对话基本感觉不出来。ZeRO-3那个理解有个小误区,它做推理时不是每张卡都存完整模型,参数是分片放的,但通信开销会明显上来,两张卡跑70B可能延迟不太好看。你这情况其实可以看看vLLM加张量并行,两张A100用TP=2把模型切开放,配合FP16或者AWQ量化,KV cache也能用PagedAttention省不少。如果只是自己玩或者小规模服务,llama.cpp的GGUF量化加多卡offload也值得一试,Q4_K_M大概40G左右,两张卡分着放绰绰有余。真要追求吞吐再考虑DeepSpeed,但那个配置复杂度对两张卡来说有点杀鸡用牛刀了。
两张A100跑70B的话,可以试试vLLM加AWQ量化,4bit基本不怎么掉点,我拿llama-70b测过几个任务差距在1%以内。DeepSpeed ZeRO-3推理确实每张卡都得放一份完整权重,等于没省显存,别走这条路。你这两张卡更现实的方案是tensor parallel切2份,配合4bit量化,显存刚好能压进80G以内,就是吞吐会低一点。exllamav2也可以看看,单卡跑量化版70B比较省心。
两张A100就别硬扛FP16了,直接上4bit量化加device_map,vLLM跑起来速度也还行。
两张A100跑70B,最现实的还是上4bit量化加张量并行,bitsandbytes的nf4掉点其实没那么夸张,做对话推理基本感知不出来。ZeRO-3在推理场景不合适,它是按参数切分但每步要all-gather,延迟很高,而且你理解反了——不是每卡存完整副本,是每卡只存一部分,但通信开销对推理不友好。建议看看vLLM配合AWQ量化的方案,两张卡TP=2跑70B 4bit大概能塞进60G左右,KV cache还能留点余量。