最近想把公司内部一个问答机器人换成开源7B模型(Qwen2.5-7B-Instruct),用vLLM部署。但遇到一个很实际的问题:单卡A100 80G跑满并发大概能支持多少路请求?我看网上有人说可以塞下20个实例,但实际测下来显存占用比预期高不少。而且如果同时跑多个并发,TTFT会明显变长,用户感知就很明显。现在纠结是上4卡做张量并行,还是干脆用2卡各跑一个实例做负载均衡?另外量化到AWQ 4bit会不会掉点太多?有没有实际部署过的大佬给点建议,主要场景是知识库问答,要求响应时间在2秒内。
部署7B模型到生产环境,显存和并发到底怎么权衡?
全部回复
共 129 条我们之前也踩过类似的坑,7B在A100 80G上单实例实际能扛的并发远没有理论值那么乐观,尤其是TTFT这个指标,并发一上来延迟曲线直接起飞。你说的20个实例应该是纯显存角度算的,但vLLM的PagedAttention虽然省显存,KV Cache随并发线性增长,加上prefill阶段抢计算资源,实际能稳定跑的可能就一半不到。如果要求2秒内响应,我倾向于2卡各跑一个实例做负载均衡,比张量并行划算,因为TP带来的通信开销在7B这个量级上不太值得,而且单卡故障影响面小。AWQ 4bit我们测过Qwen系列,知识库问答这种任务掉点其实还好,大概1-2个点,但推理速度提升明显,显存也能省下来多塞并发。不过要注意AWQ对batch size比较敏感,小batch下加速比没那么好看。建议你先用2卡双实例+AWQ跑一轮压测,看P99 TTFT能不能压到1.5秒以内,不行再考虑加卡。
我们之前也踩过类似的坑,A100 80G跑Qwen2.5-7B-Instruct用vLLM,如果gpu_memory_utilization拉到0.9,再算上KV Cache,实际并发到30-40路左右就开始TTFT明显上来了。网上说20个实例那种基本是只看权重占用,没算KV Cache和调度开销,生产环境根本不能那么算。4卡张量并行对降低单次延迟有帮助,但通信开销会吃掉一部分吞吐,而且你并发一高,TP的收益就没那么线性了。2卡各跑一个实例加负载均衡反而更稳,尤其你们是知识库问答,请求长度差异大,分开跑能避免长请求把短请求拖死。AWQ 4bit我们测过,知识库这种偏事实检索的场景掉点还好,但如果是需要多步推理的问题会有点退化,建议先拿真实badcase跑一轮评估再决定。2秒内响应的话,关键其实不是并行方式,而是控制好max_num_seqs和KV Cache预留,别让调度器把batch塞太满。
2秒内的话AWQ 4bit基本够用,掉点没想象中大,建议双卡各跑一个实例比张量并行稳。
我之前用A100 80G单卡部署过Qwen2.5-7B的vLLM,实测下来并发到15-20路左右显存就开始吃紧了,尤其你开了较长的max_model_len,KV cache占用会非常猛。网上说的20个实例大概率是短上下文加低并发的情况,知识库问答场景上下文动不动就几千token,参考价值不大。TTFT变长这个体验确实很明显,vLLM的continuous batching在并发上来之后首token延迟会涨,用户等超过1秒就开始不耐烦了,2秒内的话你得把gpu_memory_utilization和max_num_seqs调得比较保守。
多卡方案我建议优先考虑2卡各跑一个实例加前面挂个负载均衡,比4卡张量并行更划算,因为7B这个体量张量并行的通信开销相对收益不划算,而且单实例故障不影响整体。AWQ 4bit我自己测过,知识库问答这种偏事实检索的任务掉点没想象中严重,大概1-3个点,但如果你对答案准确性要求高,建议拿业务数据实测一下再决定,别直接上。另外可以试试FP8,A100虽然原生支持一般但vLLM有方案,比AWQ稳一些。
AWQ 4bit我们线上跑了半年,知识库问答基本无感掉点,建议先量化再压测,别急着上四卡。
单卡A100跑7B其实没那么夸张,我这边Qwen2.5-7B用vLLM,gpu_memory_utilization设0.9,KV cache拉满也就撑个十几路并发,网上说20实例的估计是短上下文场景。TTFT变长主要是调度排队,你2秒的要求下4卡TP未必比2卡各跑一个划算,TP通信开销在7B上性价比不高。AWQ 4bit知识库问答基本没啥掉点,困惑度涨一点点,但显存省下来能多塞不少KV,挺值的。
你这个问题其实挺典型的,网上那些说塞20个实例的基本都是理论值或者短输入场景,实际知识库问答的prompt长度动不动就上千token,KV cache吃掉的显存远超预期。A100 80G跑Qwen2.5-7B的FP16权重就要15G左右,剩下60多G看着多,但vLLM的gpu_memory_utilization设到0.9之后,真正能分给KV cache的也就40来G,按平均输入输出各500token算,并发撑到15-20路差不多到头了,再往上TTFT确实会飙。你纠结的4卡TP还是2卡双实例,我建议优先考虑双实例负载均衡,因为TP=4的通信开销在7B这个体量上不划算,而且TP会把整个模型的延迟绑在一起,一个请求慢全都慢。AWQ 4bit我们测过知识库场景,困惑度涨得不多,但个别事实性回答会变糊,如果你们对准确率敏感建议先做一轮评测再上。2秒TTFT这个要求,关键还是看你的prompt有多长,如果RAG召回塞进去三四千token,那不管怎么部署都得靠chunked prefill和prefix caching来救,光堆卡解决不了根本问题。
我们之前也踩过这个坑,A100 80G跑Qwen2.5-7B用vLLM,并发一上去TTFT确实会飙,后来发现主要卡在prefill阶段的调度上。建议你先别急着上4卡TP,TP的通信开销在2秒延迟目标下未必划算,反而2卡各跑一个实例加个前置负载均衡更稳。AWQ 4bit我们测过知识库问答场景,掉点其实还好,大概1-2个点,但吞吐能翻不少,性价比挺高的。你们并发峰值大概多少?如果是几十路以内,单卡调好gpu_memory_utilization和max_num_seqs可能就够了。
我们线上也是Qwen2.5-7B-Instruct加vLLM,A100 80G单卡实际跑下来,如果上下文控制在4k以内、并发大概30-40路的时候TTFT还能压在500ms左右,再往上确实会明显抖。网上说20个实例那种应该是极短上下文加小batch的极限情况,正常知识库问答RAG一塞检索结果,prompt长度轻松上千,显存和延迟完全是两回事。你2秒内的要求,我觉得关键不是堆卡,而是先把max_model_len和gpu_memory_utilization调保守点,留出KV cache余量,不然并发一上来直接排队。4卡张量并行对7B来说通信开销不太划算,延迟收益有限,反倒是2卡各跑一个实例加前面挂个负载均衡更稳,单实例挂了也不至于整体雪崩。AWQ 4bit我们测过,知识库问答这种任务掉点其实还好,1-2个点以内,但你要是对精确引用要求高,建议INT8或者FP8,A100上FP8虽然原生支持一般,但vLLM跑起来也还行。真正影响体验的往往是RAG检索质量和prompt组织,模型量化那点损失跟检索召回比真不算啥。