最近在本地折腾部署一个13B参数的开源模型(想试试Qwen或者Yi),发现单张RTX 4090 24G显存根本跑不起来,加载模型就直接OOM了。查了资料说可以用量化或者offload到CPU,但试了一下4bit量化后效果感觉下降挺明显的,而且推理速度慢得离谱。有没有大佬分享下实际部署经验?比如用llama.cpp或者vLLM这类工具时,显存不足的情况下怎么平衡速度和效果?另外,是不是必须上多卡或者A100这种专业卡才行?学生党预算有限,求靠谱的省钱方案。
部署开源大模型,显存不够怎么破?求低成本方案
全部回复
共 168 条说实话24G跑13B确实有点极限,但也不是完全没救。我自己用4090试过Qwen-13B,4bit量化加llama.cpp的offload,把大部分层放GPU,留个8-10层给CPU,速度大概能到每秒8-10个token,虽然比全GPU慢不少,但至少能跑起来。你感觉效果下降明显,可能是量化方法没选对,试试GPTQ或者AWQ,比RTN那种简单量化好很多,尤其在数学和代码任务上。vLLM的话我不太推荐,它对显存要求更苛刻,而且13B模型在24G上开PagedAttention也容易爆,反而llama.cpp的mmap机制更友好。另外别急着上多卡或者A100,其实有个偏方:把模型分片加载,配合FlashAttention和KV cache量化,显存能再省出3-4G。你要是预算有限,可以考虑租云GPU按小时算,比如AutoDL上4090大概2块多一小时,跑完实验再停,比买卡划算多了。最后问一下,你试过把batch size调成1,然后开--no-mmap直接从磁盘流式读权重吗?有时候能救急。
说实话24G跑13B全精度确实紧,但4bit掉点这么明显可能跟量化算法和推理框架的匹配有关,试试AWQ或者GPTQ配合vLLM,效果比朴素的GPTQ好不少。另外别死磕单卡,租个云GPU按小时算也就几块钱,学生党偶尔跑跑比买硬件划算多了,A100真没必要。
说到13B模型在24G显存上OOM,其实大概率是没用对推理框架。我之前用transformers直接加载Qwen-13B也是爆显存,但换vLLM之后,配合8bit量化,24G跑起来还挺稳的,虽然context长度得控制一下。你说的4bit效果下降,可能跟量化方式有关,试试GPTQ或者AWQ,比简单的RTN好不少,感知上没那么明显。
另外别死磕单卡,把层数offload到内存也是个办法,但速度确实拉胯,适合只用来验证代码逻辑。我实测过llama.cpp的GGUF格式,Q5_K_M量化在4090上大概能跑到10-12 token/s(13B),当个API用还行,交互式对话就有点难受了。预算有限的话,可以看看二手3090或者4080,24G显存跑13B+8bit是够的,两张4090互联的成本对学生党确实不友好。
还有个小窍门,如果非得用4bit,记得把KV cache量化也打开,能省1-2G显存,然后调低max_length,比如2048,这样速度和显存都能缓解。别迷信A100,推理场景下带宽优势被4090的GDDR6X拉近不少。你试试vLLM的4bit+KV cache量化组合,应该能救回来。
试试llama.cpp开--mlock外加CPU分流,13B跑起来慢点但能稳,效果损失比裸4bit小。真想要速度就捡两张二手3090,比A100划算多了。
说到省钱方案,我倒是建议你试试llama.cpp的GGUF格式,配合Q5_K_M或者Q6_K量化,13B模型在4090上能压到14G左右,速度比AWQ慢点但比纯CPU强太多。另外可以开offload层数,比如只把前20层放GPU,剩下的给CPU,单看推理慢但至少能跑,而且日常对话其实体感没那么糟糕。真要追求速度的话,二手淘一张3090组双卡成本比A100低多了,vLLM支持张量并行,24G+24G带13B全精度都够,就是得注意电源和散热。别急着上4bit,试试2-3的group size调大点,效果损失会小很多。
试试Q4_K_M量化加llama.cpp的mmap,13B在24G上能跑,速度慢就调小batch size,别硬上vLLM。
试试llama.cpp的Q5_K_M量化吧,速度能接受,效果比4bit好不少,24G跑13B够用了。
4090跑13B其实没到绝路,别一上来就上4bit,试试llama.cpp的Q5_K_M或者Q6_K,体感比Q4好不少,而且配合mmap把部分层放内存,速度能接受。vLLM的话开--cpu-offload-gb 8这种参数也能救急,但吞吐别指望太多。真要省钱,搞两张二手3090组NVLink比单卡A100划算多了,或者干脆租云GPU按小时跑,学生价也就一杯奶茶钱。