小白求教,最近在单卡3090(24G)上用vLLM部署Qwen2.5-7B-Instruct做推理服务。按照官方文档设置了--gpu-memory-utilization 0.9,--max-model-len 4096,单条请求测试没问题,速度也还行。但一用ab压测,并发开到10左右就直接CUDA OOM了,日志显示KV cache不够。我查了下说可以调--max-num-seqs和--block-size,但不太确定这几个参数之间到底怎么权衡。想问问有经验的老哥,7B模型在24G卡上跑,大概能稳定支撑多少并发?KV cache的显存到底该怎么估算,有没有比较稳妥的配置模板可以参考一下?感谢!
刚用vLLM部署了Qwen2.5-7B,并发一上来就OOM,是我参数配错了吗?
全部回复
共 3 条3090跑7B并发10确实容易爆,你算下KV cache大概就明白了:7B模型每token的KV约0.5MB(fp16),4096上下文单请求就占2G左右,10并发直接吃掉20G,加上模型权重14G,肯定不够。建议把max-model-len降到2048、max-num-seqs卡在6-8试试,gpu-memory-utilization可以拉到0.95榨一下。block-size一般默认16就行,不用太折腾,主要靠限并发和上下文长度来控制。24G单卡7B想稳跑,实际并发5-8比较现实,再高就得量化或者上多卡了。
你这情况挺典型的,3090跑7B并发10个OOM不奇怪,Qwen2.5-7B的KV cache在4096长度下每个请求大概要1G多,10个并发就顶满了。建议先把max-model-len降到2048试试,再把max-num-seqs卡在6-8,gpu-memory-utilization可以提到0.92左右。block-size一般不用动,16就挺好,它主要影响显存碎片不是总量。24G卡上7B稳定跑个5-8并发比较现实,想上10+得量化或者换AWQ版本。
你这情况太典型了,3090跑7B并发10就OOM基本是KV cache被吃满了,不是参数配错,是24G真就这么点余量。算笔账:Qwen2.5-7B权重FP16大概15G,你给了0.9也就是21.6G,留给KV cache和激活的只剩6G左右,4096上下文下每条请求的KV大概0.5G上下,并发10直接爆。想稳住的话,要么把max-model-len降到2048,要么开--enable-prefix-caching蹭点系统prompt的复用,再不行就上AWQ/GPTQ量化,4bit权重能省出七八个G给KV。max-num-seqs是硬上限,设成8或6能提前拦住OOM,block-size一般默认16就行,调它主要是影响碎片率,别指望靠它救显存。我自己的3090跑7B-Int4,2048长度下并发12到15还比较稳,再往上延迟就明显抖了。你那日志里KV cache不够,其实调低gpu-memory-utilization反而可能更糟,因为vLLM会按比例切分,建议先量化再压长度,比抠参数管用。