最近在本地折腾部署一个13B参数的开源模型(想试试Qwen或者Yi),发现单张RTX 4090 24G显存根本跑不起来,加载模型就直接OOM了。查了资料说可以用量化或者offload到CPU,但试了一下4bit量化后效果感觉下降挺明显的,而且推理速度慢得离谱。有没有大佬分享下实际部署经验?比如用llama.cpp或者vLLM这类工具时,显存不足的情况下怎么平衡速度和效果?另外,是不是必须上多卡或者A100这种专业卡才行?学生党预算有限,求靠谱的省钱方案。
部署开源大模型,显存不够怎么破?求低成本方案
全部回复
共 168 条说实话我觉得你直接上Qwen的7B或者14B量化版可能更实际,13B在4090上跑4bit都卡说明显存带宽才是瓶颈。我试过llama.cpp的Q5_K_M加offload到CPU,虽然慢点但至少能跑,日常对话够用,别追求速度就行。另外vLLM对显存要求其实更高,别指望它救你,真要省钱不如租云GPU按小时嫖,学生党偶尔用用比买卡划算。
其实不用太纠结4090跑不动13B全精度,我之前用llama.cpp的Q5_K_M量化跑Yi-13B,效果比4bit强不少,速度也能接受,就是得把n_gpu_layers调到30层左右,剩下丢CPU,慢点但至少能跑。vLLM的话可以试试PagedAttention加swap,但小内存还是别指望太高。另外别急着上A100,二手3090或者两张P40拼起来性价比高很多,或者干脆看看7B/8B的模型,现在很多8B比老13B还强,显存压力小一个档次。你主要跑什么任务?如果是对话类,其实8B加好点的量化完全够用。
4090跑13B其实不至于完全没救,试试GGUF格式的4bit加llama.cpp,重点把gpu层数调到能塞满显存的上限,剩下的扔CPU,速度虽然比全GPU慢但比纯CPU强多了。另外别迷信Qwen,同参数下Yi的量化损失感更小,我实测过8bit的Yi-13B比4bit的Qwen还快。实在不行就租云GPU按小时算,学生党偶尔跑一次比攒钱买卡划算。
其实不用上A100,我之前用4090跑13B也是疯狂OOM,后来直接用llama.cpp的Q5_K_M量化配合mmap,把部分层放CPU,速度虽然比不上全GPU但至少能跑起来,而且效果比4bit好不少。你要是追求速度,试试vLLM的AWQ量化或者GPTQ,显存占用能压到10G以内,但模型得选支持这些格式的。学生党的话二手3090或者两张2080Ti改22G显存反而更划算,比单卡4090性价比高多了。
试试llama.cpp的Q5_K_M量化吧,13B在24G下能跑,速度比4bit强不少,效果损失也小。
试试llama.cpp的Q5_K_M量化吧,速度比4bit好不少,24G跑13B够用了。
其实问题不在4090,是你没把KV cache和batch size压下来,13B用llama.cpp的Q4_K_M加offload到CPU,层数全放GPU但context长度限制在2048,跑起来大概能到8-10 token/s,日常聊天够用了。另外可以试试AWQ量化,体感比GPTQ损失小,配合vLLM的automatic prefix caching能省不少显存。双卡不一定要A100,两张3090或者4090跑tensor parallel也挺香,二手市场蹲一蹲性价比很高。
24G跑13B全精度确实紧,但OOM大概率是没用对工具。试试llama.cpp的Q5_K_M量化,效果比4bit好不少,速度在4090上大概能到15-20 token/s,日常用够了。vLLM的话可以开--gpu-memory-utilization 0.9配合--max-model-len调小点,把KV cache压一压。其实没必要上多卡,优先把上下文长度砍到2K以内,再不行就offload一半层到内存,速度会掉但至少能跑。学生党的话,租云GPU按小时算反而更划算,比如AutoDL的4090才两块多一小时。
其实可以试试Qwen的14B AWQ量化版,配合llama.cpp的mmap模式,把部分层offload到内存,速度虽然比不上纯GPU但日常对话够用了。另外ollama的4bit量化比llama.cpp自带的优化好不少,显存占用能压到14G左右,效果损失体感没那么大。学生党别急着上多卡,先看看能不能租云GPU按小时跑,比如AutoDL的4090才两块多一小时,跑完实验再回本地微调更划算。
试试llama.cpp的Q5_K_M量化加部分offload,13B在24G下能跑,速度慢点但效果比4bit强不少。
说实话24G跑13B确实有点紧,但直接说“跑不起来”可能还是没找对路子。我之前用4090试过Qwen-13B的4bit GPTQ,加载是能加载,但速度确实感人,后来换了AWQ量化,感觉比GPTQ在推理速度上提升明显,而且效果损失体感上小一些。不过你提到offload到CPU,这招真得慎用,除非你内存超大且不在乎延迟,否则速度会掉到没法用的程度。我的建议是优先试试llama.cpp的GGUF格式,用Q5_K_M或者Q6_K这种档位,显存不够就分一部分层给CPU,配合--tensor-split参数手动调,能找到一个平衡点。另外vLLM虽然快,但显存优化其实不如llama.cpp灵活,除非你要跑并发,否则本地单机真没必要上。至于多卡或者A100,我觉得学生党真不用想,二手3090或者两张2080Ti组NVLink,成本比一张4090低,但双卡跑13B的吞吐量能翻倍,前提是你主板支持。最后提醒下,如果你只是玩,试试7B或8B的模型配合长上下文,很多场景效果并不比13B差太多,别太迷信参数。
其实不用非盯着13B,7B或者14B的量化版在4090上能舒服很多,真要上13B的话试试llama.cpp的Q5_K_M加部分offload,速度虽然慢点但比全量强。另外vLLM开个GPTQ量化加流水线并行,也能把24G榨干,但效果损失比4bit小。预算有限的话二手3090性价比挺高的,双卡跑起来比单卡A100省多了。
实测过你这情况,24G跑13B确实得靠量化,但4bit掉质量多半是没调好参数,试试llama.cpp的Q5_K_M或者Q6_K,配合--mmap和--no-mmap切换,CPU offload别全扔,留个几层在GPU上,速度能接受。另外vLLM的话建议开--gpu-memory-utilization 0.95,再配--max-num-seqs调小点,能榨干显存。多卡真没必要,两张3090或者搞个二手P40(改散热)性价比更高,A100那是实验室才玩得起。学生党最省钱路子其实是租云GPU按小时跑,或者直接上Macaquarium那种拼单平台,比自己攒机划算多了。
试试llama.cpp的Q5_K_M量化,配合mmap预加载,13B在24G里能跑出10+ token/s,效果比4bit好不少。
vLLM开offload加CPU内存,速度虽慢但能跑,学生党其实可以租云GPU按小时算,比自己买划算多了。
4090跑13B其实没必要硬上全精度,试试Q5_K_M或者Q6_K的量化,比4bit强不少,配合llama.cpp的闪存映射把部分层放内存,速度虽然慢点但能跑。vLLM的话开--cpu-offload-gb参数,实测6G显存加32G内存能跑起来,别贪上下文长度。另外可以考虑下Mixtral 8x7B的量化版,激活参数才13B但效果更好。学生党别碰A100,二手3090两张或一张7900XTX性价比高得多。
试试llama.cpp的Q5_K_M量化加部分offload,13B在24G能跑,速度慢点但效果比4bit好不少。
我之前用vLLM开--kv-cache-dtype fp8配合量化,显存省一半,速度也还行,你可以试试。
试试llama.cpp配Q4_K_M量化,13B在24G显存里能跑,速度慢就调大batch size,别追求满血效果。
4090跑13B确实难受,我之前用llama.cpp的Q5_K_M加offload到CPU,把部分层放显卡,速度勉强能到每秒8 token,虽然慢但至少能跑通,你可以试试调下gpu层数找平衡。另外vLLM对显存要求更狠,建议直接用llama.cpp或者加个内存交换。学生党就别想A100了,二手3090组双卡其实比单卡4090更划算,两张24G显存加起来能跑30B量化,速度和效果都还行。
说实话4090 24G跑13B确实挺尴尬的,我之前用Qwen 13B也遇到过一模一样的情况。4bit量化掉精度这个事儿吧,关键得看你怎么量化,GPTQ和AWQ的校准数据选好一点能挽回不少,但速度慢是硬伤,CPU offload基本就是等死。我后来试了llama.cpp的Q5_K_M,效果比Q4好一截,速度至少能到每秒3-4个token,虽然还是蜗牛但至少能用了。vLLM的话主要吃显存,24G跑13B得开KV cache的量化加swap,但实测吞吐上去了延迟反而高,不太适合单机玩。你要真想省钱,倒不一定要上A100,两张二手3090或者一张48G的丽台卡可能更实际,但得看主板支不支持PCIe拆分了。另外你试过把模型切一半层放GPU一半放内存吗?用accelerate的device_map参数,虽然慢但至少不OOM,适合先验证想法。最后问一句,你跑这个模型是纯聊天还是做微调?要是做推理,我现在觉得Mistral 7B加合适的prompt反而比硬上13B更靠谱,速度效果都平衡。
说实话24G跑13B其实没那么绝望,主要看你愿不愿意牺牲一点速度换显存。我自己的经验是别一上来就上4bit,先用llama.cpp的Q5_K_M或者Q6_K,配合--n-gpu-layers参数把能塞进显存的层数拉满,剩下的丢给CPU,推理速度虽然比不上全GPU但至少比纯CPU快很多,而且效果损失比4bit小得多。
vLLM的话对显存要求其实更苛刻,因为它要留KV cache和连续批处理的空间,13B量化后24G也紧张,不如直接上llama.cpp或者带offload的Ollama,省心。你提到速度慢得离谱,我猜是不是把全部层都offload到CPU了?可以试试分层调度,比如先放20层进GPU,跑一下看延迟,再微调层数,找到你机器的最优平衡点。
另外别急着上多卡或者A100,学生党的话可以考虑租云GPU按小时跑,比如autodl或者runpod,4090一小时也就两块钱左右,训练或重度推理再租,平时本地玩玩用轻量化模型比如Qwen的7B或者Yi的6B,效果其实没差到哪去。最后提醒下,关闭模型的多线程贪心模式,限制batch size,有时候能救回来不少显存,别只看量化。