最近想用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 条这问题我踩过一模一样的坑,AWQ量化后模型权重确实小,但vLLM默认会按GPU总显存去预分配KV cache,24G卡直接给塞满,根本没给激活留余量。你试试启动时加--gpu-memory-utilization 0.85,再把--max-model-len调到4096或2048,能省出一大块空间。另外Qwen2.5-14B实际跑起来,就算量化后,上下文长度稍微拉长一点,KV cache膨胀得特别快,尤其你还要做知识库问答,文档切块如果不控制长度,OOM几乎是必然的。我现在的做法是硬把max-model-len压到2048,配合5-6的KV cache比例,勉强在3090上稳定跑,但并发一多还是容易挂。你要是预算真紧,我建议直接换Qwen2.5-7B-AWQ,别迷信14B,本地问答场景下7B配合好的embedding和检索,效果差距没你想的大,而且能留出显存做更大上下文,体验反而流畅。还有个小细节,vLLM版本别追最新,0.4.x和0.5.x对量化模型支持有差别,换版本有时候比调参还管用。
显存爆了大概率是max-model-len没调,设成4096再把gpu-memory-utilization拉到0.9试试,3090跑14B AWQ还是够的。
24G显存爆掉大概率是max-model-len没调,vLLM默认8K甚至更高,14B的KV cache直接吃满,gpu-memory-utilization设到0.9也救不回来。我上次跑13B量化版,把max-model-len压到2048,同时开--swap-space 8,勉强能塞进20G。你与其硬调,不如直接上8B,7-8G显存跑AWQ版本稳得很,知识库问答效果差距没想象中大,省钱省心。
vLLM那个默认KV cache确实坑,但问题可能出在AWQ文件本身的seq_len上,很多教程给的配置是4K,你直接照搬就炸了。建议把--max-model-len改成1024,再调--gpu-memory-utilization 0.85,同时加--enforce-eager关掉CUDA graph,能省不少显存。不过说实话,14B在3090上就算调通了,并发一高还是容易OOM,日常问答7B的qwen2.5足够用,别跟显存较劲。
我踩过一模一样的坑,最后发现是vLLM的--kv-cache-dtype默认fp16,量化权重省的那点显存全被缓存吃回去了。改成fp8能省将近5G,再把--max-model-len砍
max-model-len调低些,gpu-memory-utilization设0.9试试,3090跑14B AWQ其实够用。
24G爆了大概率是max-model-len没调,默认撑爆KV cache,设成4096试试,gpu-memory-utilization留0.9就够了。
24G跑14B AWQ理论上够,但vLLM默认会留不少显存给KV cache,你那个max-model-len如果设太大,比如默认4096以上,加上并发请求多,OOM很正常。建议把gpu-memory-utilization调到0.9,max-model-len压到2048试试,另外num-seqs改成1或2也能省不少。其实手感上14B跟8B差距没那么夸张,如果预算紧先拿8B跑通流程更稳,等调明白了再升也不迟。
显存爆了大概率是max-model-len没调,默认4k都吃满,手动限到2k试试。
vLLM里gpu-memory-utilization设0.8,再加个--swap-space,14B AWQ跑3090够用。
说实话AWQ量化后7-8G显存能跑这个说法太理想化了,那基本是纯推理不加载对话模板和长上下文的前提。你24G爆掉大概率是vLLM默认把KV cache留得太狠,加上max-model-len设太高,比如默认4096甚至更长,14B的KV cache一算下来轻松吃掉十几G。我建议你先别急着换模型,把gpu-memory-utilization调到0.85左右,max-model-len砍到2048,然后看下vllm的日志里KV cache实际分配了多少,再慢慢往上加。另外AWQ文件本身也有版本差异,有些是GQA的,有些不是,加载前确认下模型配置里的num_key_value_heads对不对,不对的话显存会翻倍。如果调完还是紧巴巴,我劝你直接换7B或8B的AWQ,比如Qwen2.5-7B的int4,实测在12G卡上跑1-2K上下文都挺稳的,14B的甜点区间其实是在4090或A6000上,3090硬上性价比很低。最后别忘了关掉--enable-prefix-caching,这个功能在知识库场景会额外占用显存,默认关闭反而更省。
24G显存跑14B还OOM,十有八九不是模型权重的问题,你那个AWQ文件加载完也就占8G左右,剩下全是KV cache吃掉的。vLLM默认的gpu-memory-utilization是0.9,它会预留90%显存给kv cache,但你这场景根本用不到那么大的上下文,直接设成0.5或者0.6试试,然后把max-model-len砍到4096或者2048,效果立竿见影。另外别忘了看下你那个AWQ量化是不是最新版,Qwen2.5系列的量化文件版本对不上也可能导致vLLM内部预留显存变大。其实14B用GPTQ或者FP8在某些场景下比AWQ更省显存,你可以换个量化格式跑一下对比看看。如果只是做知识库问答,我个人经验是8B模型配合好的embedding和检索策略,效果不会比14B差太多,但显存压力小一个量级。别急着换卡,先调这两个参数,大概率能救回来,我跑13B模型的时候也踩过类似的坑。要是实在嫌麻烦,直接把max-model-len设成1024,gpu-memory-utilization设0.45,绝对能跑起来,就是回答长度受限,你先验证流程再逐步放开。
24G显存跑14B AWQ还OOM,大概率不是量化的问题,是vLLM默认把KV cache和模型权重一起算进去,把显存全占了。我建议你先设--gpu-memory-utilization 0.85,再把--max-model-len压到4096或2048,知识库问答用不到长上下文,省下的显存足够跑推理了。另外检查下AWQ的group size和vLLM版本是否匹配,老版本对量化格式支持不好也会炸。如果调完还是紧,直接换Qwen2.5-7B-AWQ,速度提升明显,回答质量差距没你想的那么大,省下的租卡钱还能多试几轮prompt工程。
24G都OOM那肯定不是量化文件的问题,大概率是vLLM默认把KV cache吃满了。你启动时加--gpu-memory-utilization 0.8,再把--max-model-len设成2048或4096试试,别用默认的几万长度。另外AWQ那个7-8G显存的说法,一般是指纯推理不跑并发的情况,实际带点并发和长上下文,14B在3090上确实紧巴巴的。如果预算有限,我建议直接上8B量化版,流畅度提升比那点精度损失值多了。
显存爆了大概率是max-model-len设太大,调成4096再把gpu-memory-utilization压到0.85试试,3090跑14B AWQ完全够用。
说实话你这情况我太熟了,AWQ那个7-8G显存的参考值基本都是拿纯推理测的,没算上kv cache和vLLM的预分配。vLLM默认会把剩余显存全吞进去做缓存,你3090上24G它恨不得全占了,OOM一点不冤。关键要调的是gpu-memory-utilization,我建议先设成0.85,给模型和激活值留点余量,同时max-model-len别按默认的32768来,你知识库问答一般用不到那么长的上下文,改成8192或者4096能省一大块缓存。另外你检查下AWQ的加载方式,vLLM对量化格式的支持有时候会偷偷回退到FP16,那样显存直接翻倍。如果调完还是紧巴巴,我劝你别硬刚14B,7B或8B的量化版在3090上能跑得很宽裕,而且配合好的embedding模型做知识库,效果差距真没你想象的大。预算有限的话,稳定跑起来比追求参数大小重要多了。
24G显存跑14B AWQ还OOM,确实不全是量化文件的锅,vLLM默认会预留很大一块显存给KV cache,加上CUDA context和激活值,实际可用内存比你想象中少得多。我之前跑13B也遇到过类似情况,后来把gpu-memory-utilization调到0.85,max-model-len设成2048,勉强能跑起来,但并发一高照样炸。另外你确认下AWQ的group size是不是128,有些教程给的配置是给8B用的,直接套14B会超。还有个坑是vLLM的--dtype参数,如果没明确设成float16,它可能默认用bfloat16,某些卡上反而更吃显存。说实话,如果只是本地问答,我建议你直接换8B,7-8G显存跑起来轻松很多,回答质量差距没想象中大,尤其你的知识库如果不大,7B+好的RAG流程完全够用。你租3090一天也不便宜,先把模型换小,把流程跑通再考虑升级,不然调参调得头大。
vLLM默认确实会预留一部分显存给KV cache,但AWQ量化后14B实际权重也得占8-9G,你24G卡OOM大概率是max-model-len设太高了,默认2048其实够用,改成512-1024能省不少。gpu-memory-utilization建议直接拉到0.9,给KV cache留的余量别超过4G。要是还卡,直接换Qwen2.5-7B-AWQ吧,本地问答体验差距真没你想的那么大,3090跑7B还能开大batch。
我上次也是被这个坑过,后来发现量化文件本身没问题,是vLLM默认把context window设成32K了,你租的3090带宽也跟不上。把max-model-len改成2048,gpu-memory-utilization调到0.85,基本能稳定跑起来。如果还爆,不如直接上7B,省下的显存还能塞个embedding模型做RAG,反而更实用。
其实你可以先不急着换模型,把vLLM里的--max-num-seqs设成1,再配合--gpu-memory-utilization 0.9,大概率能救回来。我之前跑13B就是这么调的,KV cache别让它自动分配,手动给个3-4G就够。但说实话,14B做知识库问答,7
3090跑14B AWQ按理不会OOM的,你八成是max-model-len没设,默认拉到32K直接把KV cache撑爆了,设成4096或8192能省一大半。另外gpu-memory-utilization别用默认0.9,调到0.7左右给CUDA留点余量,同时记得设enforce-eager关掉CUDA graph的预分配。实在不行就换个思路用llama.cpp的GGUF Q5_K_M,同样精度下显存占用比vLLM低不少,而且不用调这些参数。如果预算真卡得紧,直接上8B量化版,效果差距没你想的那么大。
显存爆了大概率是max-model-len没改,默认32k直接吃满KV cache,设成8k再配gpu-memory-utilization=0.9试试。
3090跑14B AWQ其实挺悬的,vLLM默认会按最大上下文预留KV cache,你那个7-8G的教程大概率没算attention内存。先试试设--gpu-memory-utilization 0.85,再把--max-model-len压到2048或4096,应该能挤出来。不过说实话,14B做知识库问答,7B量化版配合好的embedding模型和检索流程,效果差距没那么大,预算有限真不如先折腾8B。
24G跑14B按理说够用,你把max-model-len调低试试,大概率是上下文长度设太大挤爆了显存。
24G显存跑14B AWQ还OOM,大概率不是量化本身的问题,是vLLM默认把KV cache预留得太狠了。你试过把--gpu-memory-utilization调到0.85左右没?我跑过13B的AWQ,这个值设到0.9以上基本必炸,0.85配合--max-model-len 4096就能稳住。另外你下载的AWQ文件确认是对应vLLM支持的版本吗?有些量化格式比如GPTQ和AWQ的加载方式不一样,vLLM对AWQ的兼容性有时候会抽风,建议先跑个简单的--load-format awq看看能不能正常初始化。如果改完还爆,那就不是参数问题了,是vLLM版本和CUDA的锅,换成0.6.3左右的稳定版试试。至于换不换7B,其实14B跑起来的效果和7B差距挺大的,尤其做知识库问答,上下文一长就明显,能调通还是尽量保14B。预算有限的话,可以先用CPU跑个纯文本测试,确认量化文件没问题再租GPU,省得反复试错。