最近想用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只是把权重压了,但kv cache才是吃显存的大头。你直接设--gpu-memory-utilization 0.9,再把--max-model-len砍到4096或2048试试,别用默认的32k。另外vLLM的continuous batching会把剩余显存全吞掉,预留点给torch缓存。如果跑知识库问答,其实8B加RAG效果差不了太多,14B没优化好反而更折腾。
24G显存跑14B AWQ还OOM,这太典型了,大概率就是vLLM默认把kv cache和激活内存算得太狠,跟量化关系不大。你试下--gpu-memory-utilization设0.85左右,--max-model-len砍到4096或2048,这俩参数直接影响显存分配,教程一般不会细说。另外别忘了--enforce-eager模式,能关掉CUDA graph的预分配,对短序列场景省不少显存。我之前用类似配置跑过13B,峰值能压到15G以内,但前提是并发数低,你可以把--max-num-seqs调成1或2试下。如果调完还是紧巴巴,说实话14B在单卡上就是勉强能用的水平,回答质量跟7B差距没那么大,尤其知识库场景,7B或8B的量化版配好RAG反而更稳,响应也快。建议你先花半天把现有卡调通,再决定要不要降级,毕竟租卡钱比折腾时间值钱多了。
教程里说的7-8G显存跑AWQ一般是只算权重,vLLM默认会给KV cache留很大空间,你24G爆掉多半是max-model-len设太高了,试着把gpu-memory-utilization调到0.85,max-model-len砍到4096或2048,基本能压下来。另外14B做本地知识库其实有点尴尬,就算跑起来,长文档的上下文也吃紧,我建议你先用8B试试,效果差距没那么大,但显存和速度友好很多。真要上14B,记得把--kv-cache-dtype改成fp8或int8,能省不少。
vLLM默认确实会预留不少显存给KV cache,尤其你max-model-len没调的话,默认可能拉到几万token,14B模型直接爆很正常。我一般设gpu-memory-utilization到0.85,max-model-len按你实际文档长度来,比如4096或8192,别贪大。另外AWQ只减权重,激活显存还是吃紧,建议再开下--enable-chunked-prefill试试。如果还是紧巴巴,干脆上7B或8B,本地问答体验差别真没那么大,省下的钱够你跑好几轮调试了。
租3090跑14B AWQ确实紧,先设gpu-memory-utilization=0.85,max-model-len砍到4096试试,不行就老实换8B。
你遇到的OOM大概率是vLLM默认把KV cache预留得太狠了,我跑13B也踩过这坑。试试启动时加--gpu-memory-utilization 0.6,同时把--max-model-len砍到4096或2048,能省不少显存。AWQ量化后实际权重大概9G出头,但KV cache和激活值才是大头,24G理论上够用只是要手动拆。如果调完还是紧巴巴,干脆上8B吧,本地知识库问答的流畅度比那点精度差更影响体验,省下的钱租更好的卡跑RAG反而划算。
3090跑14B AWQ确实不该直接爆,大概率是vLLM默认把KV cache吃满了,先试试--gpu-memory-utilization设到0.85,再把max-model-len砍到4096或2048,上下文够用就行。另外确认下你下的AWQ是不是和vLLM版本匹配,不匹配容易加载时直接翻倍占用。如果调完还紧巴巴,建议直接上8B,本地问答体验差别没那么大,省下的显存还能塞个embedding模型。
24G显存跑14B AWQ还OOM,大概率是max-model-len没设,vLLM默认拉到32K,KV cache直接吃爆。你试试设成8192,gpu-memory-utilization调0.9,应该能稳住。另外注意下AWQ的group size是不是128,有些教程给的配置跟vLLM不兼容会莫名多占显存。要是还不行,直接上8B吧,3090跑起来余量足,知识库效果差不了太多,省心。
这问题我踩过一模一样的坑,vLLM默认的kv cache预留太激进了,24G看着大其实被吞得干干净净。我建议你先把gpu-memory-utilization设到0.85左右,max-model-len砍到4096或者2048,这俩不调的话AWQ量化白做。另外别忘了设--kv-cache-dtype fp8,能省不少,实测能救回4-5G。要是还卡在OOM,那真不如换8B,14B在3090上跑长上下文太勉强,租卡成本算下来不如上7B配个好embedding模型。
直接跟你说结论,这卡跑14B量化版确实很悬,我试过8G的AWQ模型,光权重加激活就占掉一半,剩下留给KV cache的余量很小。你把max-model-len从默认的4096降到2048,再把gpu-memory-utilization调到0.9,基本能跑但并发别想太多。更稳的做法是换Qwen2.5-7B-Instruct,配合本地向量库做RAG,效果差距没那么大,显存压力小一半,省下的钱够你租好几周卡了。
我之前也信了教程鬼话,后来发现问题是vLLM有个--max-num-seqs参数,默认256,直接给你塞满显存预分配。
说实话AWQ 7-8G显存那是纯理论值,vLLM默认会预分配大量显存给KV cache,你用3090跑14B基本都会爆。建议先把gpu-memory-utilization调到0.85左右,max-model-len设成2048或4096,再把KV cache的quant_type改成fp8试试。我之前跑qwen2.5-14b-awq就是这么救回来的,实测能稳在16-18G。如果这样还不行,那就真别折腾14B了,换个8B的AWQ版本,效果差距没那么大,但省心太多。
24G被吃满大概率是vLLM默认把KV cache留了绝大部分,max-model-len又设太高,14B AWQ实际权重也就8G左右,剩下全被缓存预占了。你可以试试启动时显式加--gpu-memory-utilization 0.85,再把max-model-len压到4096或2048,这样基本能稳。另外别忘关掉--enable-prefix-caching,那个也吃显存。如果这样还爆,那可能你下的量化文件其实是FP16版本,或者vLLM和CUDA版本不匹配导致没走量化推理。我3070跑过同款,8G都能塞进去,3090肯定够,先别急着换7B。
我上次也踩过这坑,其实不是模型本身的问题,是vLLM的预分配机制太激进了。你可以在服务启动命令里加个--kv-cache-dtype fp8_e5m2,能省不少显存,再把--max-model-len设成4096试试。另外确认下是不是用了--quantization awq这个参数,没加的话vLLM会按原始权重加载。我这边8G显存跑14B AWQ,batch size设为1,日常问答完全没问题,24G肯定绰绰有余。
爆显存大概率是没限制KV cache,vLLM默认会吃满所有空闲显
把gpu-memory-utilization调到0.85,max-model-len砍到4096再试试,还爆就老实换8B吧。
vLLM默认确实会吃满显存,试试--gpu-memory-utilization设0.85,max-model-len砍到2048,应该能跑起来。
24G都OOM大概率不是量化文件的问题,是vLLM默认把KV cache和权重一起算进显存了,你那个AWQ版本可能没吃满但KV cache直接爆了。试试启动时加--gpu-memory-utilization 0.9,再把--max-model-len设成4096或更小,能省不少。另外确认下你下的AWQ是不是对应14B的正确版本,有些repo会混进没量化干净的权重。如果调完还是紧张,7B其实日常问答够用,别死磕14B。
3090 OOM大概率不是量化的问题,AWQ 4bit下模型权重也就8G左右,你想想剩下16G去哪了——基本全被KV cache和预分配吞了。vLLM默认会按gpu-memory-utilization=0.9去预占显存,但如果你max-model-len设得很大(比如默认8K甚至更高),KV cache的预留会直接爆炸,尤其长上下文场景下14B的KV开销比你想的夸张得多。我建议先把gpu-memory-utilization调到0.6以下,max-model-len压到2048或1024试跑一下,同时关闭vLLM的自动前缀缓存功能,或者干脆用--swap-space给CPU offload留点余地。另外你租的如果是共享卡,要确认是不是被其他进程占了显存(nvidia-smi看下),有时候是环境问题不是模型问题。如果调完还是紧巴巴,那就别纠结14B了,7B/8B量化后跑知识库问答差距没你想的那么大,但部署省心程度完全是两个级别,尤其你预算有限,稳定出结果比追求参数重要得多。
3090跑14B AWQ其实很勉强,问题八成出在max-model-len默认拉到32K上,显存全被KV cache吃了。试试把--max-model-len设成4096或者2048,再把gpu-memory-utilization调到0.85,留点余量给碎片,一般能压到18G以内。不过就算调好了,知识库场景上下文稍长还是会闪崩,建议直接上7B或8B的AWQ版本,推理速度起码快一倍,实际体验比硬撑着14B流畅太多。
24G显存直接OOM太正常了,AWQ那个7-8G的参考值基本是纯推理裸奔的理想状态,根本没算上vLLM的显存预分配和KV cache的额外开销。你先把gpu-memory-utilization调到0.9以下试试,比如0.85,给torch和CUDA context留点余量,不然默认0.9甚至更高时vLLM会试图把显存全占满。max-model-len这个更关键,默认可能给你设到32K甚至更高,推理时KV cache是按这个上限预分配的,14B模型哪怕AWQ了,8K长度和32K长度占用的显存差好几倍。我自己的经验是,如果只是本地问答,max-model-len设4K到8K完全够用,你改成4096再配合gpu-memory-utilization 0.85,大概率能跑起来。另外确认一下你下的AWQ版本是不是和vLLM匹配,有时候版本对不上会回退到fp16加载,那24G肯定爆。要是还不行,建议直接换Qwen2.5-7B AWQ,推理速度和显存占用都会从容很多,知识库问答场景下7B和14B的差距没有想象中那么大,至少比反复租卡试错划算。
说实话我猜你八成是没给vLLM留足显存余量,AWQ量化只是把模型权重降下来了,但kv cache照样能把你24G吃干抹净。我拿4090跑13B量化模型时,gpu-memory-utilization设到0.85,max-model-len必须砍到4096以下才稳,你照着教程默认参数跑肯定炸。另外检查下你下的AWQ版本是不是对应该模型架构,有些第三方量化文件在vLLM里会触发重新编译,显存占用直接翻倍。如果只是做知识库问答,其实7B加RAG效果未必比14B差太多,毕竟你上下文一长,14B的kv cache开销直接按指数涨。我建议先拿7B调通流程,把max-model-len和swap空间摸明白,再回头试14B,不然每轮都在OOM上烧钱。还有个小坑,vLLM默认会预分配连续显存块,如果你开着其他程序哪怕占几百兆,它也可能直接拒绝启动,先关掉所有杂余进程再试一次。
AWQ量化后显存确实会降,但vLLM默认会预留不少空间给KV cache,24G被吃满不奇怪。你先把gpu-memory-utilization调到0.85左右,max-model-len设成2048或4096试试,能省一大块。另外14B跑本地知识库其实有点勉强,如果上下文窗口要开大,7B或8B反而更稳,速度和显存余量都舒服很多。我上次用8B配4bit量化,单卡16G都能流畅跑,建议你预算有限的话直接换小尺寸,体验差不了多少。
大概率是max-model-len没改,vLLM默认按8K或者更长算的,14B模型光KV cache就能吃掉十几个G,gpu-memory-utilization设到0.9也没用。你可以先设成0.85,max-model-len压到2048,batch size固定1,再试试看。不过说实话,AWQ在14B上效果也就那样,租卡试错不如直接上7B的Qwen2.5-7B-Instruct,显存余量大了能折腾的东西多,知识库问答效果差距没那么夸张。