最近在搞一个内部知识库问答的demo,用的Qwen2-7B,用LoRA微调后想部署成API服务给测试组用。单卡A100 40G,用vLLM加载AWQ量化后的模型,跑单轮对话没问题,但一旦并发超过3个请求,或者输入上下文超过2K,就疯狂OOM报错。试过GPTQ和FP16,反而更吃显存。看网上说7B模型4bit量化后只需要8G显存,但我实测光权重就占了11G,KV cache一开再乘个4并发直接爆。想问下是我量化参数没设对(比如group_size、sym这些),还是说7B模型做服务端部署本来就得预留20G以上?另外,有没有办法在vLLM里动态调整KV cache的显存上限?求有实战经验的老哥指点一下,孩子已经被OOM折磨两天了。
部署7B模型微调API总OOM,是量化方案不对还是显存规划有问题?
全部回复
共 65 条我前阵子也踩过这坑,7B AWQ实际吃显存真不是网上说的8G那么理想,光权重加额外开销就快12G了。你试试vLLM里设--kv-cache-dtype fp8,或者干脆把--max-num-seqs调小到2,再配合--gpu-memory-utilization设成0.85,能好不少。另外group_size不用动,sym设成True反而省显存,你这情况大概率是显存规划问题,毕竟40G卡扣掉权重和激活,留给KV cache的余量本来就不多。
你这情况我太熟了,A100 40G跑7B AWQ并发3个爆掉太正常,网上说的8G显存是纯权重静态占用,没算KV cache和激活值,实际部署预留25G以上才稳。你试试vllm里设--kv-cache-dtype fp8或者调低--gpu-memory-utilization到0.85,然后max-num-seqs限制一下并发,group_size设128比64省显存但掉点精度。动态调整KV cache上限官方没直接参数,但可以换PagedAttention的版本,老版本对长上下文支持烂得很。
AWQ权重4bit差不多就11G,网上8G是理论值别全信。vLLM可以调gpu_memory_utilization限制KV cache,先压到0.85试试。
vLLM里用gpu_memory_utilization调下就行,默认0.9太激进,降到0.8试试。7B 4bit权重11G正常,别信8G那套。
KV cache这块确实容易被低估,7B模型4bit权重11G正常,AWQ对group_size敏感,但更关键的是vLLM默认gpu_memory_utilization是0.9,KV cache按剩余显存全吃,并发一上来就炸。你可以试试调低gpu_memory_utilization到0.7左右,再配合max_model_len限制到2K,能明显缓解。另外enable_prefix_caching开起来对知识库这种重复前缀场景挺有用,别死磕量化参数了。