最近公司在做私有化部署,选了Qwen2.5-7B-Instruct,用vLLM跑。8张A10(24G)的卡,但业务方要求并发至少50,单卡batch size调大后显存直接爆掉,报OOM。后来试了GPTQ 4bit量化,效果还行但输出偶尔会乱码,不敢上生产。想问问大家,这种7B模型在真实业务场景下,一般怎么配置推理引擎和量化方案?还有,显存占用和并发数之间有没有一个大概的估算公式?现在完全是摸着石头过河,先谢谢各位大佬了。
部署7B大模型到生产环境,显存和并发怎么平衡?
全部回复
共 108 条8张A10跑7B其实挺宽裕的,关键在vLLM的gpu_memory_utilization和max_model_len怎么设。你把max_model_len从默认的32k降到4k或8k,显存能省一大截,并发50基本没问题。GPTQ乱码可能是量化校准集不匹配,试试AWQ或者FP8,A10虽然没原生FP8但vLLM支持模拟。估算的话大概KV cache = 2 * layers * heads * head_dim * seq_len * batch * dtype,按这个粗算心里就有数了。
写得挺好,建议补充一些性能数据。
试试FP8量化,A10支持,比GPTQ稳不少,并发50得分多卡张量并行扛。
50并发8张A10够了,但别硬堆batch,试试调小max_num_seqs配合chunked prefill,显存能省不少。
8张A10跑7B其实挺宽裕的,别单卡硬扛batch,直接上张量并行TP=2或4,每卡显存压力小很多,并发50问题不大。GPTQ乱码我遇到过,换AWQ试试,7B上AWQ比GPTQ稳,精度掉得也少。估算的话大概记:权重+KV cache+激活,KV cache按2×层数×头数×head_dim×seq_len×batch×精度字节,这个是大头。vLLM开gpu_memory_utilization=0.9,再限制max_model_len,基本能稳住。
50并发用8张A10其实挺宽裕的,别急着上4bit量化,先调gpu_memory_utilization到0.9,再开enable_chunked_prefill,batch size不用硬拉,靠continuous batching撑并发更划算。量化乱码大概率是GPTQ的group size和校准集不匹配,换AWQ或者FP8试试,7B这尺寸FP8显存也扛得住。估算的话粗略按权重+KV cache算,KV大概每token每层2×2×hidden,7B开fp16、8K上下文,单条序列也就1G出头,50并发留够余量问题不大。
8张A10跑7B其实资源不算紧,关键看你怎么切。可以试试TP=2或4,别单卡硬扛大batch,vLLM的PagedAttention对并发提升挺明显,gpu_memory_utilization拉到0.9左右再压max_num_seqs。GPTQ乱码可能是校准集或group_size的问题,换AWQ通常稳一些,精度掉得也少。估算公式大概就是权重+KV cache,KV cache按2×层数×头数×head_dim×序列长×并发再乘dtype字节数,粗算下来心里就有数了。
8张A10跑7B其实挺宽裕的,关键是别死磕单卡batch size。vLLM开张量并行2或4,把并发摊到多卡上,再配合PagedAttention和chunked prefill,50并发问题不大。量化我建议优先试AWQ,比GPTQ稳,4bit下乱码基本能压住。粗略估算的话,7B的4bit权重约4G,KV cache按每token每层2×2×hidden算,单条2K上下文大概1G出头,乘并发数再留20%余量心里就有数了。