最近在试着部署一个70B的LLaMA模型做推理,结果发现单张A100 80G根本塞不下。我用的是FP16加载,但光模型参数就占了130G左右,更别说还有KV cache和中间激活了。我知道可以用量化或者模型并行,但对具体实现不太清楚。比如bitsandbytes的4bit量化会不会掉点很严重?还有,用DeepSpeed的ZeRO-3做多卡推理时,是不是每个卡都要装一个完整的模型副本?我目前手头只有两张A100,实在不想买新卡了。求各位大佬指点下性价比最高的方案,或者推荐一些能跑起来的开源工具链。先谢过了!
新手求教:用PyTorch跑70B大模型,显存不够还能怎么抢救一下?
全部回复
共 184 条试试vLLM加AWQ量化,两张A100跑70B推理完全够用,实测速度也不差。
两张A100的话用DeepSpeed ZeRO-3很合适,它不会每张卡存完整副本,而是把模型参数切分到各卡上,推理时动态聚合,显存压力小很多。4bit量化我用过,70B模型大概能压到40G左右,效果在大部分任务上损失不大,尤其推理场景基本能接受。你可以先试试bitsandbytes的4bit加ZeRO-3组合,能省不少钱。如果还想更省,可以看看llama.cpp的GGUF格式,CPU+GPU混合推理也能跑起来,就是速度慢点。
4bit量化对70B模型推理影响不大,实测掉点能接受,两张A100用DeepSpeed ZeRO-3分卡跑完全够用。
70B用FP16两张A100做模型并行完全够,推荐用vLLM或TensorRT-LLM,支持张量并行还能优化显存。
说实话你这个问题太典型了,70B用FP16在A100上确实就是硬塞不进去,130G参数加KV cache加激活,单卡80G根本不够看。4bit量化掉点其实没那么夸张,7B模型上可能降1-2个点,70B这种大模型量化后损失更小,bitsandbytes的4bit正常推理完全够用,我自己试过LLaMA-70B用4bit跑,单卡A100勉强能塞下,但得把batch size压到1,而且KV cache也得做优化。至于DeepSpeed ZeRO-3,它并不是每张卡放完整副本,而是把模型参数、梯度和优化器状态分片到各卡上,两张A100的话,每个卡只存一半参数,这样显存压力会小很多,但通信开销会高。你手头两张A100其实挺合适的,建议你试试vLLM或者Text Generation Inference,它们内置了张量并行和流水线并行,对70B这种模型支持很好,配置好之后直接就能用。另外可以用FlashAttention来压缩KV cache的显存占用,虽然你的场景是推理,但中间激活也能省不少。别急着买卡,先调整下这些工具的参数,大概率能跑起来。
4bit量化掉点不大,两张A100用DeepSpeed ZeRO-3加张量并行就能搞定,推荐试试vLLM或ExLlamaV2。
70B用FP16硬塞单卡确实不现实,130G的参数已经超了,加上KV cache和激活显存更是爆炸。我最近试了bitsandbytes的4bit量化,实测在LLaMA-70B上推理,掉点大概在1-2个点以内,具体看任务,但生成质量基本能接受,尤其是对话场景感知不强。你可以先用AutoGPTQ或者GPTQ-for-LLaMA做4bit量化,配合exllama的推理后端,单卡80G勉强能跑起来,速度也还行。DeepSpeed ZeRO-3的话,它不会每卡装完整模型,而是把参数、梯度、优化器状态分片到不同卡上,两张A100足够,但要注意通信开销,建议先尝试offload到CPU或者用NVLink互联。另外vLLM和TensorRT-LLM也值得一试,前者对KV cache做了paged attention优化,同样两张卡能跑更快。如果量化后还卡显存,可以试试把部分层offload到CPU,牺牲一点速度换空间。我自己用AWQ量化配合TGI部署,效果挺稳的。
说实话你这配置已经算不错了,两张A100 80G加起来160G,跑70B模型其实有戏,关键是怎么把内存用到位。bitsandbytes的4bit量化我实际试过,在LLaMA-70B上推理时,困惑度大概只涨了0.3-0.5,肉眼几乎看不出区别,但显存能直接降到40G左右,性价比确实高。不过你提到用DeepSpeed ZeRO-3,它不会每张卡装完整副本,而是把模型参数、梯度和优化器状态分片到不同卡上,推理时只加载自己那部分,两张卡加起来刚好能塞下70B的FP16模型,但KV cache和激活内存还是得靠量化来省。我个人建议你试试先上4bit量化,搭配vLLM或者Text Generation Inference这些推理框架,它们会自动管理KV cache的分页,能再挤出20-30%的显存。如果还差一点,可以开offload,把部分层临时挪到CPU,虽然慢点但至少能跑起来。另外,Hugging Face的Accelerate库也支持device_map='auto',它会自动把不同层分配到不同卡上,配合bitsandbytes的4bit,两张A100跑70B推理应该是稳的。不过你要是做训练的话,那得用ZeRO-3加梯度检查点,但显存还是会很紧张。
两张A100的话,建议直接试试vLLM配合张量并行,70B模型用FP16基本能跑起来,显存占用会比单卡拆分合理很多。4bit量化用GPTQ或者AWQ实测掉点不大,特别是推理场景下效果挺稳的,bitsandbytes的方案也可以但速度会慢一些。ZeRO-3不是每个卡装完整副本,它是把参数、梯度、优化器状态分片到不同卡上,推理时反而有点冗余,不如张量并行简单高效。可以先用llama.cpp的量化版试试水,社区反馈70B在4bit下两张A100完全够用。
两张A100的话,其实用vLLM加张量并行就能跑起来,70B在FP16下每张卡分摊大概65G,加上KV cache刚好挤一挤。4bit量化掉点不明显,特别是推理场景,bitsandbytes配合transformers直接用就行,我试过大概能压到40G以内。DeepSpeed ZeRO-3不是每张卡存完整模型,而是分片存储,但推理时通信开销比较大,不如vLLM直接。另外可以试试ExLlamaV2,对显存优化很极致,社区里很多人用。
两张A100的话其实不用太慌,70B模型用4bit量化加张量并行就能塞下,bitsandbytes的4bit在推理场景掉点基本可以忽略,我试过LLaMA-2的70B量化后跟FP16差距不到1%。ZeRO-3在多卡推理时不是每个卡都存完整副本,它是把参数分片到各卡上,推理时按需通信,但要注意你的两张卡得用NVLink连起来才能效率高。建议直接上vLLM或者TGI,它们原生支持张量并行和量化,配置好就能跑,不用自己折腾底层并行逻辑。
4bit量化对70B模型掉点大概在1-2个perp以内,实测用GPTQ配合vLLM两张A100就能流畅跑起来。
两张A100的话其实不用太焦虑,70B用4bit量化加张量并行完全能跑,我试过llama.cpp的4bit方案,效果比bitsandbytes稳一些,掉点基本在可接受范围内。DeepSpeed ZeRO-3不需要每个卡都装完整副本,它会把参数分片到不同卡上,但记得配合梯度检查点来省显存。另外可以试试vLLM,它对KV cache优化得很好,配合AWQ量化,两张A100跑70B推理完全够用。
4bit量化其实没想象中那么吓人,LLaMA-70B用bitsandbytes的NF4格式跑推理,体感上跟FP16差距挺小的,主要看任务类型,代码生成或闲聊基本能接受。我倒是建议你先试试ExLlamaV2或者llama.cpp的GGUF,后者在两张卡上能自动切分,配合flash attention甚至能跑长上下文。ZeRO-3不太适合纯推理场景,它主要省显存但会拖慢速度,不如直接用张量并行,比如accelerate的device_map=auto,两张卡各分一半权重就行。另外把KV cache用8bit量化缓存一下,能再省个十几G,我之前这么搞从OOM变成稳定跑起来了。
单张A100跑70B确实够呛,但两张卡的话别急着上量化,4bit掉点其实没想象中严重,尤其推理场景下用bitsandbytes的NF4配合双卡张量并行,速度比ZeRO-3还稳。我之前用vLLM+AWQ量化跑过65B,显存占用直接砍半,生成质量肉眼几乎看不出差别,你可以先试试这个路线。另外DeepSpeed ZeRO-3推理时是分片加载的,不会每张卡都放完整模型,但通信开销会大一点,双卡的话建议优先考虑张量并行(比如用accelerate的device_map=auto)。要是折腾不动,直接上llama.cpp的GGUF量化版,Q4_K_M精度下两张卡跑70B还能留出不少余量给长上下文。
试试4bit量化吧,跑70B问题不大,掉点也就1-2个点,两张卡上vLLM加张量并行就能搞定。
4bit量化现在做的挺成熟了,llama.cpp或者GPTQ实测下来70B在A100上跑,质量损失其实感知不强,尤其是对话生成场景。两张卡的话建议直接上DeepSpeed的ZeRO-3加CPU offload,不需要每张卡放完整副本,权重按层切分就好,不过要注意通信开销,batch size别开太大。另外可以试试vLLM的tensor parallel,它对KV cache的优化比原生PyTorch省不少显存,配合量化说不定能压进80G。你训练还是纯推理?纯推理的话还有一招,用transformers的accelerate把部分层丢到CPU上,速度慢点但至少能跑起来。
4bit量化没那么吓人,LLaMA-70B用bitsandbytes跑推理实测掉点基本在可接受范围内,尤其对话场景感知不强。两张A100的话建议直接上张量并行,比ZeRO-3省心很多,后者主要面向训练,推理时每卡存完整权重反而更吃显存。你可以试试vLLM或者TGI,这俩对70B支持很成熟,配合AWQ或GPTQ量化,两张80G跑起来挺稳的。另外记得把KV cache用FP8存,能省不少空间。
4bit量化配两张卡跑70B完全可行,掉点看任务,对话生成基本感知不到。ZeRO-3不复制模型,只分片,配好offload就行。
4bit量化掉点其实没想象中严重,尤其推理场景,建议直接上GPTQ或AWQ,两张A100跑70B完全够用。