最近想用Qwen2.5-14B做一个本地知识库问答,看教程说用AWQ量化后7-8G显存就能跑,就租了张3090来试。按步骤装了vLLM,量化文件也下好了,结果一加载就把24G显存吃满还OOM了,连请求都发不出去。我怀疑是vLLM默认的kv cache分配策略有问题,但也不知道怎么调。有没有大手子说说,实际部署这个尺寸模型,除了量化之外还有什么关键参数要注意?比如gpu-memory-utilization、max-model-len这些设置多少合理?还是说我应该直接换更小的7B或8B模型?预算有限,不想一直租卡试错,求指条明路。
部署Qwen2.5-14B到底要多大显存?我按教程配置怎么爆了?
全部回复
共 83 条24G跑14B AWQ按理说应该够的,但OOM大概率是max-model-len设太高了,默认可能拉到32K甚至更高,14B的KV cache直接爆炸。建议先设个2048或4096试试,gpu-memory-utilization调到0.85左右,给KV cache留点余量。另外vLLM有个--kv-cache-dtype fp8的选项,能省不少显存,我跑13B的时候开这个才稳。实在不行就换8B吧,7B和8B在知识库问答上跟14B差距没你想的那么大,省下的钱够你多跑好几轮实验了。
教程里说7-8G能跑一般是指纯推理不加载对话模板和长上下文,vLLM默认会把剩余显存全吃进kv cache,你直接设个--gpu-memory-utilization 0.85再配--max-model-len 2048试试,应该能压下来。另外AWQ文件如果没对应上14B的config,显存占用也会虚高,检查下tokenizer和模型路径是不是匹配。说实话3090跑14B光加载权重加激活就快15G了,想留余量做知识库检索还是有点悬,预算紧的话换8B量化版体验会稳很多,至少不用天天跟OOM搏斗。
vLLM默认确实会预留一部分显存给KV cache,但你这OOM更像是max-model-len设太高了,默认可能按8K甚至更长算的,14B模型光KV cache就能吃掉好几G。试试启动时加--gpu-memory-utilization 0.9 --max-model-len 2048,另外注意AWQ版本要跟vLLM匹配,不匹配会回退到fp16加载。如果还爆,直接上7B量化版吧,其实做本地知识库问答,7B配合RAG效果够用了,3090跑起来也稳。
大概率是KV Cache没限制,vLLM默认吃满显存,设个gpu-memory-utilization=0.8再试试。14B AWQ在3090上跑长上下文确实紧,建议max-model-len砍到4096。
3090跑14B AWQ确实紧,把gpu-memory-utilization调到0.85,max-model-len砍到2048试试。
vLLM默认确实会预留不少显存给KV cache,但24G直接OOM更像是max-model-len没设对,默认可能拉到32K甚至更长,14B的KV cache直接爆了。你试试设成2048或4096,再把gpu-memory-utilization调到0.85左右,应该能压下来。另外AWQ的4bit实际占用比理论值高不少,加上CUDA context和激活值,20G出头才正常。如果调完还是紧巴巴,建议直接上8B,速度和质量对知识库场景差距没那么大,租卡成本还能省一半。
这问题我踩过一模一样的坑,AWQ那个7-8G显存的宣传基本是纯推理极限值,没算上vLLM的预分配和KV cache。你24G爆掉大概率是gpu-memory-utilization默认设了0.9,vLLM会直接锁死21.6G给模型加缓存,加上14B的AWQ权重实际也得占10G出头,剩下空间根本不够塞长上下文的KV。建议先把这个参数调到0.85以下,max-model-len别贪,4096就够了,知识库问答不涉及超长文档的话2048都行。另外注意vLLM版本,0.4.2之前对量化模型支持有bug,会额外吃显存,升级到0.5+能明显缓解。如果调完还是紧巴巴,说实话直接换Qwen2.5-7B-AWQ更省心,推理速度还快一倍,14B在单卡3090上做RAG本身就很勉强,尤其你还要挂embedding模型和向量检索,整套流程跑起来显存是动态波动的,留个20%余量才稳。别信那些教程的极限参数,都是拿纯生成benchmark骗人,真跑应用没人那么干。
24G能跑14B AWQ,但你这个OOM大概率是vLLM默认把显存全吃进KV cache了,gpu-memory-utilization调到0.85左右,max-model-len设成2048或4096试试,别用默认的32768。另外检查下AWQ的group_size是不是128,有些教程给的配置跟vLLM版本不匹配也会炸。如果调完还是紧巴巴的,直接上8B吧,3090跑8B量化版余量足得多,知识库问答的差距其实没你想的那么大。
AWQ省的是权重显存,kv cache才是大头,max-model-len调成4096基本能救。
3090跑14B AWQ其实挺悬的,vLLM默认会预留一部分显存做KV cache,但你这直接爆24G大概率是max-model-len设太高了,默认可能拉到32K,14B的KV cache吃起显存来很离谱。建议先设成4K或8K,gpu-memory-utilization调到0.85左右试试,别贪心。另外AWQ文件得确认是GQA版本匹配的,有些老量化包在vLLM里兼容性很差。如果调完还是卡边界,老实换8B吧,7B-8B跑本地问答体验比硬撑14B强多了。
这情况我太熟了,AWQ量化后模型权重确实只占7、8G,但vLLM默认会把剩余显存全拿去预分配KV cache,24G卡直接吃满太正常了。你试试启动时加个--gpu-memory-utilization 0.85,再把--max-model-len调低到4096或2048,别让它按默认的32k去预留空间,这样基本能救回来。另外检查下你下的AWQ版本是不是和vLLM版本匹配,不匹配有时候会偷偷走FP16加载,那显存直接翻倍。如果还不行,建议先跑个纯文本生成测试,排除知识库那套RAG流程对显存的额外占用。说实话,14B配3090做本地问答本身就挺极限的,知识库embedding模型也得占1-2G,你要是想留点余量,直接换Qwen2.5-7B-AWQ会省心很多,速度还快一倍,预算有限的话别硬磕14B。
教程那个7-8G显存估计是只算了权重,没算kv cache和中间激活,AWQ再猛也架不住vLLM默认给全部显存做预分配。你先把--gpu-memory-utilization调到0.85,--max-model-len设成2048或4096试试,这俩参数影响特别大。14B在3090上跑短上下文是够的,但知识库问答如果切块太长很容易炸。要是调完还不行,直接换8B吧,省下的时间比租卡钱值多了。
这锅真不全在量化,vLLM默认会预分配显存,gpu-memory-utilization调到0.85,max-model-len砍到4096基本就稳了。
显存爆了大概率是max-model-len没调,默认拉满4K上下文直接撑爆KV cache,改成2048再试。
3090跑14B AWQ就别指望默认参数,gpu-memory-utilization调到0.85,max-model-len砍到4096基本能稳。
24G跑14B AWQ还OOM,大概率不是显存不够,是vLLM默认把KV cache吃太狠了,你可以先试试把gpu-memory-utilization调到0.85,max-model-len砍到4096,这样能省出不少空间。另外检查下是不是装了最新版vLLM,有时候版本bug也会导致显存分配异常。如果调完还是不行,那确实建议换8B,14B在单卡上折腾性价比太低,而且你租3090的钱都够跑好几轮小模型实验了。
显存爆了八成是max-model-len没按量化配置调,vLLM默认开太大,设成4096再试试。
24G显存跑14B还OOM,大概率不是量化本身的问题,是你vLLM的显存分配没卡死。AWQ之后模型权重大概就8-9G,但vLLM默认会按最大concurrency预留kv cache,gpu-memory-utilization不手动设成0.85以下,它可能直接吃掉剩下所有显存。你可以先设成0.8,max-model-len砍到4096或者2048,batch size别开大,这样基本能压进20G以内。
另外检查下你加载的是不是真正的AWQ版本,有些教程给的GGUF或者GPTQ文件,vLLM支持度不一样,误加载了非量化版也可能直接爆。kv cache的分配策略其实还好,关键是max-num-seqs这个参数,默认几十个并发请求会把cache撑爆,手动调成4或者8,日常问答完全够用。
其实我觉得14B在3090上跑性价比真不如8B。知识库问答对精度要求没那么苛刻,Qwen2.5-7B-AWQ配合好的embedding模型,体验差距没那么大,但显存和发热都舒服很多。你租卡试错的话,建议先跑通7B把流程调顺,再决定要不要上14B,省下的钱够你租好几天的了。
说实话你这个问题我踩过一模一样的坑,AWQ量化后模型权重确实只占7-8G,但vLLM默认会按总显存比例预留KV cache,3090的24G它恨不得全给你吃满,所以OOM太正常了。我后来是把--gpu-memory-utilization调到0.85,再把--max-model-len砍到4096才稳住的,实际峰值大概在18-19G左右。另外你检查下是不是忘了开--enforce-eager模式,有些教程没提这个,不开的话CUDA graph也会额外吃几百M。不过说实话,14B做知识库问答,就算量化了,长上下文和并发一上来还是紧巴巴的,如果预算只够租3090,我建议直接换8B,比如Qwen2.5-8B的AWQ版,10G以内随便跑,体验差距没你想的那么大,至少不用天天调参。还有个小技巧,如果你只是自己用不用并发,可以试试offload部分KV到CPU,但速度会掉一半,看你能不能忍。反正别信那种“7G能跑”的鬼话,他们多半只测了单条短query。
换了个角度,我直接说结论吧,你这情况八成不是量化的问题,是vLLM的pre-allocate机制在作祟。它默认会按你设的gpu-memory-utilization(默认0.9)提前锁显存,哪怕实际用不到也先占着,所以你看到24G吃满不代表真需要那么多。我之前跑13B也这样,后来把那个参数调到0.7,再把--swap-space设成8,反而能流畅跑起来,峰值也就16G出头。max-model-len这个别贪大,你知识库问答如果单条输入不超过2000token,设2048就够,设大了KV cache直接指数涨。至于换不换7B,我倒觉得未必,14B的生成质量明显好一截,尤其是中文长尾知识,8B经常编瞎话。你现在先别急着换卡,试试把量化文件换成GPTQ的AWQ版本,有时候下载源不对会拿到fp16的假量化,那当然爆。要是还不行,就检查下vLLM版本,老版本对qwen支持有bug,升到0.6.3以上会好很多。最后实在不行再考虑降级,别一上来就放弃。
24G跑14B AWQ还OOM,大概率不是量化文件的问题,vLLM默认会预留很大一块显存给KV cache,而且max-model-len如果设得太高,显存直接起飞。你可以先试试把gpu-memory-utilization设到0.9,max-model-len压到4096或2048,这样一般能省出不少空间。要是还爆,那就别折腾了,直接换Qwen2.5-7B-AWQ,本地知识库问答的效果差距没那么大,至少不用天天跟显存较劲。