最近在做一个小项目,需要把Qwen2.5-7B-Instruct部署到内网服务器上,给公司内部大概50人用。目前用vLLM跑起来,单张A10(24G)能跑,但并发一上来(比如10个请求同时进来)延迟就飙到十几秒,体验很差。查了下资料,有人建议用FP8量化或者加一张卡做张量并行,但我不太确定哪种方案对这类低并发、长文本场景更合适。另外,prefill和decode阶段是不是需要分开优化?有没有大佬分享下你们实际生产环境里7B模型是怎么配的?预算有限,暂时不考虑上A100。谢谢各位!
部署7B大模型到生产环境,显存和并发到底怎么平衡?
全部回复
共 146 条这场景瓶颈多半在prefill,试下把max_num_seqs调低点,A10跑7B这么配比加卡划算多了。
A10跑7B其实挺吃紧的,瓶颈多半在prefill阶段,长文本场景下尤其明显。建议先试试FP8量化,显存占用能降不少,解码速度也会有提升,成本几乎为零。如果预算允许,加一张卡做张量并行更省心,但要注意vLLM的调度开销,50人并发10个请求其实不算高,调下max-num-seqs和KV cache策略可能比动硬件更有效。另外,prefill和decode确实该分开看,现在很多方案都在搞chunked prefill,你可以去vLLM的issue里翻翻相关讨论。
说实话你这情况我太熟了,之前我们内部上7B给30多人用,单卡A10跑起来跟你一模一样,10并发直接卡到怀疑人生。后来我试了一圈,FP8量化其实对显存帮助没那么大,瓶颈根本不在显存容量上,而是A10的算力扛不住prefill那段长文本计算,你试试把并发限制在5以内,然后开vLLM的continuous batching,延迟能降不少。但如果你真的想并发稳定在10以上,加一张卡做张量并行是唯一出路,两张A10跑7B,显存浪费点但吞吐量翻倍都不止,预算有限的话看看二手A6000也行。另外prefill和decode确实得分开看,vLLM里有chunked prefill可以调,把prefill切成小块塞进decode间隙,对低并发长文本特别有效,你可以把max_num_seqs调小点,比如8,然后gpu_memory_utilization设到0.9试试。还有个坑是输入长度,如果你们业务里平均prompt都超过2K token,那建议单独用一个小模型做短query预处理,别让长文本全塞进7B里。最后说句实在的,50人内网用真没必要追求高并发,把单请求延迟压到3秒内比啥都强,用户感知上比偶尔快偶尔卡舒服多了。
10路并发就十几秒不太正常,先看下是不是max_num_seqs和gpu_memory_utilization没调好,A10跑7B不至于这么拉。
A10跑7B开FP8量化最划算,并发10路延迟能压到3秒内,我们线上就这么干的。
A10 24G 跑 7B 其实挺紧的,模型权重 FP16 差不多就要 15G 左右,剩下给 KV cache 的空间没多少,并发一上来 KV cache 被抢占触发 swap 或者重算,延迟自然爆炸。你这个场景 50 人内部用,真实峰值并发估计也就 5-8 个,与其加卡不如先把 gpu_memory_utilization 调到 0.92 左右,再把 max_model_len 按你实际最长文本砍一砍,很多人无脑开 32K 其实根本用不到。FP8 量化在 A10 上能跑但加速有限,因为 A10 没有原生 FP8 算力支持,更多是省显存,对吞吐提升没那么明显。张量并行两张 A10 通信走 PCIe 会拖后腿,7B 这个体量真不划算,还不如看看能不能换张 4090 或者 L40S。prefill 和 decode 确实要分开看,vLLM 的 chunked prefill 可以开上,能缓解长 prompt 把 decode 卡死的问题,另外 enable_prefix_caching 对内部问答这种重复系统提示词的场景收益很大。建议先用 benchmark 工具压一下,看看到底是显存瓶颈还是调度瓶颈,别急着加硬件。