最近想用Qwen2.5-14B做一个本地知识库问答,看教程说用AWQ量化后7-8G显存就能跑,就租了张3090来试。按步骤装了vLLM,量化文件也下好了,结果一加载就把24G显存吃满还OOM了,连请求都发不出去。我怀疑是vLLM默认的kv cache分配策略有问题,但也不知道怎么调。有没有大手子说说,实际部署这个尺寸模型,除了量化之外还有什么关键参数要注意?比如gpu-memory-utilization、max-model-len这些设置多少合理?还是说我应该直接换更小的7B或8B模型?预算有限,不想一直租卡试错,求指条明路。
部署Qwen2.5-14B到底要多大显存?我按教程配置怎么爆了?
全部回复
共 94 条这情况我太熟了,vLLM默认确实会按整卡显存去预分配KV cache,而且max-model-len设太高的话,连预分配带激活值直接给你吃满,3090看着24G其实没多少余量。你先把gpu-memory-utilization调到0.85左右,max-model-len设成4096试试,AWQ量化后14B模型权重大概占8G多,剩下给KV cache和计算留个10G左右应该够跑。另外注意下vLLM版本,老版本对量化模型支持有bug,建议升到最新版再测。如果调完还OOM,那大概率是并发请求数开太高了,默认会为每个请求预留大量KV cache,先设成1个并发跑通再说。至于换7B/8B,除非你的知识库查询特别简单,不然14B的推理质量差距挺明显的,能调通就别降级。最后提醒一下,租卡试错的话可以先跑个纯文本生成测试,别一上来就接RAG,把模型本身跑稳了再往上加东西。
看到你说AWQ量化后7-8G显存能跑,我猜你八成是踩了那个“模型权重显存”和“实际推理峰值显存”的坑。14B的AWQ权重确实只要8G不到,但vLLM为了吞吐会把KV cache预分配得很激进,默认gpu-memory-utilization是0.9,也就是21.6G直接锁给你,加上权重和激活值直接爆。你先把这参数调到0.7左右,max-model-len也压到2048或1024试试,知识库问答不需要长上下文,这个能省不少。另外你下的是不是带GQA的版本?14B的GQA组数不多,KV cache其实没想象中省,实在不行就把--max-num-seqs设成8或16,限制并发也能降峰值。但我说句实话,3090跑14B就算勉强塞进去,生成速度也就10-15 token/s,体验很憋屈,你要求不高的话直接上8B的AWQ,留3-4G余量给KV cache,推理快一倍,知识库效果差距没那么大。租卡试错成本高的话,建议先用ollama跑个7B量化把流程通了,再决定要不要升级。
24G跑14B的AWQ按理说够用,但vLLM默认会预分配很大一块显存给KV cache,你八成是撞上这个了。试试把gpu-memory-utilization调到0.85,max-model-len砍到4096或2048,显存立马松快很多。另外检查下是不是用了--dtype=auto,有些教程漏了这个导致加载的是FP16权重。实在不行就换7B或8B,14B这档在3090上做知识库其实挺尴尬的,回答质量和速度都不如用8B然后堆长上下文。
vLLM默认会留一点显存,但你得手动把gpu-memory-utilization设到0.9,max-model-len砍到2048试试,3090跑14B AWQ应该刚好够。
纯干货:gpu-memory-utilization调到0.85,max-model-len砍到2048,KV cache基本够用,14B AWQ在3090上稳跑。
3090跑14B AWQ其实是够的,但vLLM默认会按比例预占显存给KV cache,你那个OOM大概率是max-model-len设太高了,比如默认4096以上就很容易爆。我一般会把gpu-memory-utilization调到0.85,max-model-len砍到2048,这样能留出余量给推理,你试试看。如果这样还不行,那可能是量化文件本身有问题,检查下是不是下成非AWQ版本了。实在不行就换Qwen2.5-7B-AWQ,知识库场景真没那么吃模型大小,省下的钱够你跑好几轮实验了。
大概率是max-model-len默认拉太高了,砍到4096再设gpu-memory-utilization 0.9试试,14B AWQ在3090上不该爆。
3090跑14B AWQ其实挺悬的,你看到的7-8G显存大概率是纯权重占用,没算KV cache和激活值。vLLM默认会预留一部分显存给KV cache,但如果你max-model-len设太高,比如默认的8192甚至更高,14B的KV cache会直接爆炸,24G根本不够分。我建议你先设gpu-memory-utilization=0.9,max-model-len压到4096试试,如果还OOM就把batch size限制在1,用--max-num-seqs 1强制单请求。另外确认下AWQ的group size是不是128,有些教程给的量化文件是动态量化,实际占用比预期高不少。如果调完还是勉强,建议直接换Qwen2.5-7B-Instruct的AWQ,知识库场景质量差距没那么大,但显存余量舒服很多,还能开长上下文。你租卡按小时算的话,先花半小时用官方给的示例配置跑通再调参,别一上来就套自己的数据,不然根本分不清是配置问题还是模型问题。
3090跑14B AWQ其实挺悬的,你光看权重大小没用,vLLM默认会预留不少显存给KV cache和CUDA context,24G实际可用也就20G出头。试试启动时加--gpu-memory-utilization 0.85,再把--max-model-len压到2048或1024,长文本用不上就别浪费,这样大概率能跑起来。另外确认下你下的AWQ是不是GQA版本的,有些旧量化格式对vLLM不友好,加载时额外吃显存。如果还爆,就别硬扛14B了,8B的AWQ在3090上余量足得多,知识库效果差距没那么大,省下的时间够你调好几轮prompt了。
vLLM默认gpu-memory-utilization是0.9,加载完权重后KV cache会直接把剩下的显存全占了,你3090跑14B AWQ权重就占7G左右,剩下全被cache吃掉当然发不出请求。把utilization降到0.7-0.75,max-model-len设成4096或8192试试,别一上来就拉满。还有确认下你AWQ是不是真4bit,有些标AWQ的其实是fp16伪量化,那14B光权重就28G,3090肯定炸。预算紧的话知识库问答用7B其实够用,检索质量比模型尺寸影响更大。
14B的AWQ说7-8G能跑那是指模型权重本身,但vLLM加载的时候还要给KV cache留一大块,默认gpu-memory-utilization是0.9,等于直接把24G里能用的都预占了,你还没发请求它就已经把显存吃到快满了。我上次跑Qwen2.5-14B-Instruct-AWQ,3090上把utilization压到0.75、max-model-len设成4096才勉强稳住,再长就又开始抖。还有个坑是max-num-seqs默认可能偏大,并发一上来KV cache直接翻倍,知识库问答其实不需要那么高并发,调到4或者8就够。你要是只做单路问答,其实7B或者8B的AWQ体验已经挺好了,14B在3090上想舒服跑长上下文还是有点勉强。建议先把max-model-len砍到2048试通,再一点点往上加,别一上来就拉满。
vLLM加载时默认会把gpu-memory-utilization设成0.9,24G卡直接吃掉21G多,再加上14B的权重和激活,不炸才怪。先把gpu-memory-utilization降到0.8试试,max-model-len别一上来就拉满,调到4096或8192能省不少kv cache。AWQ那7-8G是指权重占用,实际跑起来kv cache和中间激活才是大头,光看权重容易踩坑。预算紧的话建议先拿7B跑通流程,14B调参真的挺吃卡。
试试把gpu-memory-utilization降到0.9,再配合max-model-len设成4096,vLLM默认会把绝大部分显存预留给KV cache,14B的KV cache开销比你想的大不少。另外AWQ那个7-8G是指模型权重本身,实际跑起来还得算上激活值和cache,24G确实有点紧。实在不行就上7B,知识库问答这场景14B和7B的差距没那么夸张,省下的卡钱够你调好久了。
vLLM那个默认的gpu-memory-utilization是0.9,等于一上来就把卡吃到只剩一点余量,你3090跑14B AWQ光权重就七八个G,剩下十几G全被它拿去预分配KV cache了,OOM其实不是模型装不下,是缓存把空间抢光了。你把utilization降到0.6-0.7试试,然后max-model-len别用默认的,直接卡到4096甚至2048,知识库问答的切片一般也就几百token,根本用不着那么长的上下文。还有个坑是max-num-seqs,默认值在长上下文下会炸得特别快,调到4-8比较稳。真要省心的话,14B AWQ在24G上跑推理是够的,但如果你的知识库文档特别多、并发又不低,老老实实换7B或者8B体验反而更顺,省下的显存留给KV cache和并发更实在。另外量化别只看AWQ,GPTQ Int4在某些vLLM版本上显存占用还更友好一点,值得对比下。