最近想把公司内部一个问答机器人换成开源7B模型(Qwen2.5-7B-Instruct),用vLLM部署。但遇到一个很实际的问题:单卡A100 80G跑满并发大概能支持多少路请求?我看网上有人说可以塞下20个实例,但实际测下来显存占用比预期高不少。而且如果同时跑多个并发,TTFT会明显变长,用户感知就很明显。现在纠结是上4卡做张量并行,还是干脆用2卡各跑一个实例做负载均衡?另外量化到AWQ 4bit会不会掉点太多?有没有实际部署过的大佬给点建议,主要场景是知识库问答,要求响应时间在2秒内。
部署7B模型到生产环境,显存和并发到底怎么权衡?
全部回复
共 110 条4卡张量并行更稳,AWQ 4bit在知识库场景基本无感,但建议先压测再定。
2卡各跑一个实例更稳,张量并行对延迟敏感场景不友好,AWQ4bit在知识库问答上掉点基本无感。
实测过AWQ 4bit在知识库场景掉点能接受,但TTFT瓶颈主要在解码阶段,建议2卡各跑实例做负载均衡更稳。
说实话我也踩过类似的坑,vLLM的显存预估跟实际跑起来差距挺大,尤其是开了continuous batching之后,KV cache的预留和max_num_seqs的配置直接影响你能扛多少并发。我这边实测7B在A100上,单卡塞20个实例纯属扯淡,除非你把max_model_len压到512或者更短,否则光prefill阶段就能把显存吃穿。你如果知识库问答的输入普遍不长,建议把max_model_len限制在2048左右,然后调高gpu_memory_utilization到0.9,这样单卡大概能撑30-40路并发,但TTFT得看你的prefix caching命中率,命中高的话体感会好很多。
至于4卡张量并行还是2卡负载均衡,我倾向后者。张量并行在7B这个规模上通信开销占比太高,尤其是单卡就能放下模型的情况下,加速比远达不到线性,而且一旦某张卡出问题整个服务就挂了。2卡各跑一个实例做负载均衡,容错性和吞吐其实更稳,你还能用vLLM的router层做简单的least-connections调度。量化到AWQ 4bit的话,我试过Qwen2.5系,掉点主要集中在对数字和长文本的推理上,如果你知识库回答偏事实抽取类,影响不太大,但要是涉及多步逻辑推理,建议至少用GPTQ 4bit或者AWQ 3bit混合精度,别全量压到4bit。
另外一个容易忽略的点是,TTFT变长不一定全是显存瓶颈,你的embedding模型和检索链路如果和LLM共用GPU,也会互相抢资源。最好把检索服务单独拆到CPU或者小卡上,让A100专心跑推理。最后提醒下,vLLM的max_num_batched_tokens这个参数很关键,别设太大,否则一个长请求会阻塞后面一堆短请求,实际体验比并发数更重要,你2秒的SLA,建议压测时多关注P95而不是平均值。
vLLM默认的KV cache预留策略确实会吃满显存,你看到的20个实例估摸是理想数值,实际跑起来上下文长度一涨就露馅。建议先把max-num-seqs和gpu-memory-utilization调低,再量一下真实并发下的TTFT分布。4卡张量并行对7B模型有点浪费,2卡各跑实例做负载均衡更稳,单点故障影响面也小。AWQ 4bit在这个场景下掉点不明显,知识库问答对精度没那么敏感,可以先试跑几个case对比下SFT后的输出质量。
我们组上个月刚把Qwen2.5-7B从SFT到部署走了一遍,vLLM下A100单卡开8个实例跑知识库问答,实测并发20路左右TTFT就飙到3秒多,根本压不住2秒的SLA。你看到的“20个实例”大概率是理论峰值,没算上KV cache和prefill的显存动态增长,尤其是在长文档检索场景下,输入token一长显存直接翻倍。我的建议是别上4卡张量并行,7B模型这么干纯属浪费带宽,通信开销比算力收益还大,2卡各跑一个实例做负载均衡更实在,还能顺便做个故障冗余。量化到AWQ 4bit我们试过,bleu掉0.5以内,但中文知识库问答里经常出现实体名被截断的情况,如果你们对答案完整性要求高,建议先用GPTQ量化到8bit跑一版对比下。另外可以试试vLLM的continuous batching调大max_num_seqs,配合--enable-chunked-prefill,能缓解不少长尾请求的排队问题,但记得把--max-model-len设小点,比如4096,别让显存被闲置的序列占死。最后说个坑,别用默认的调度策略,把--schedule-policy改成fcfs,对知识库这种短query场景友好很多。
实测过,2卡各跑实例负载均衡比4卡张量并行稳,TTFT能压住,AWQ 4bit在知识库场景基本无感掉点。
我们之前也是这个纠结,最后选了2卡方案,量化到4bit后显存省一半,响应能稳在1.5秒内。
我之前用vLLM跑7B也遇到过这问题,A100 80G显存看着大,但KV cache和CUDA context吃得很凶,实际并发20路基本是理论值。你场景要求2秒内响应的话,我建议直接上4卡张量并行,虽然部署麻烦点,但单实例吞吐比负载均衡稳得多,TTFT也更容易控住。AWQ 4bit我试过,知识库问答这种任务掉点不明显,基本能接受,倒是量化后显存省下来的空间多塞几个并发更划算。另外你测的时候注意下vLLM的max-num-seqs参数,默认值可能没吃满显存,调一下会有惊喜。
实测8路并发TTFT就超2秒了,AWQ掉点倒不明显但显存省不了太多,建议先2卡各跑实例试试。
2卡负载均衡比4卡张量并行灵活,7B模型上张量并行收益不大,量化后效果其实还行。
我们生产环境也是Qwen2.5-7B,A100单卡跑16并发左右TTFT就飙到1.5s+了,20实例那个说法太理想化,显存碎片和KV cache预留得留足。建议你先用AWQ 4bit试下,知识库问答场景掉点基本感知不到,但显存能省三分之一,单卡压到24并发没问题。另外别上4卡张量并行,通信开销在低延迟场景很吃亏,2卡各跑一个实例做负载均衡更稳,还能扛单卡故障。
我踩过同样的坑,vLLM默认的gpu_memory_utilization要调到0.9以下,不然并发一上来直接OOM。AWQ 4bit对Qwen2.5这种模型影响很小,BLEU掉0.5以内,但显存占用能降30%左右。你如果要求2秒内响应,单卡最多别超过12并发,否则TTFT曲线陡增。强烈建议2卡独立部署,前面挂个nginx轮询,比4卡张量并行简单还便宜。
实测过AWQ 4bit在知识库问答上确实没啥问题,但要注意prompt里如果带长文档,显存峰值会高不少,建议把max_model_len限制到4096。单卡A100跑16并发大概就是极限了,再多就得牺牲batch size
2卡负载均衡比4卡张量并行稳,AWQ 4bit掉点不明显,知识库问答够用。
之前测过类似的场景,Qwen2.5-7B在A100上实际显存占用比理论值高,主要是因为KV cache和中间激活值,20个实例基本是理想值,生产环境能稳定跑8-10路并发就不错了。你纠结的4卡张量并行和2卡负载均衡,我建议先试试后者,2卡各跑一个实例对TTFT更友好,单卡并发高时排队延迟比算力不够更致命,而且故障隔离也更好。量化到AWQ 4bit的话,知识库问答这种短文本场景掉点其实不太明显,但如果你有长上下文或复杂推理需求,5-8个百分点的准确率损失还是能感知到的。另外响应时间2秒内,建议把max_num_seqs设小一点,比如256,然后配合continuous batching,实际体验会比堆显存更有效。我目前是4bit+2卡负载均衡,日常50路以内并发,P95在1.8秒左右,你可以参考下这个配置。
我们之前也踩过类似的坑,A100单卡跑7B其实显存大头在KV cache和激活值,20个实例纯属理论值,实际并发一上去TTFT直接爆炸。建议直接上4卡张量并行,虽然吞吐不如2卡负载均衡,但单路延迟稳定得多,知识库问答这种场景用户对首字延迟更敏感。AWQ 4bit的话,Qwen2.5本身量化友好,掉点主要看你的检索质量,如果知识库片段本身噪音大,量化后可能更明显,可以先拿评测集跑一下差距再决定。
我们之前做过类似压测,A100单卡跑Qwen2.5-7B,16并发左右TTFT就开始飙到1.5秒以上,2秒内基本只能稳在8-10路,显存比理论值高是因为KV cache和中间激活值吃得多。建议直接2卡各跑一个实例做负载均衡,比张量并行灵活,还能扛单点故障。AWQ 4bit在知识问答这种场景掉点不明显,但保险起见你可以拿100条测试集对比下,如果回复里涉及数字或条款,建议保留FP16。
我这边实测4bit量化后延迟能降30%左右,但长文本生成时质量确实偶尔会飘,比如把“2024年”说成“2023年”。如果你那问答机器人对准确性要求高,不如试试FP8或者GPTQ,掉点更小。另外vLLM开continuous batching能显著提吞吐,但得把max_num_seqs调低点,不然并发高时排队延迟很吓人。
我倒是好奇你单卡塞20个实例是怎么算的,那应该是纯模型权重+固定KV cache的理论值,没算上PagedAttention的动态分配。实际部署建议用vLLM的--gpu-memory-utilization参数限制在0.85,留点余量给碎片。之前我们换2卡负载均衡后,单路延迟稳定在
我们生产环境跑过类似的场景,Qwen2.5-7B用vLLM单卡A100,实测并发20路左右时TTFT还能压在1.5秒内,但显存占用确实比官方估算高,主要因为KV cache和Paddle的额外开销,建议你直接用--max-num-seqs限制并发数,别贪多。4卡张量并行对7B有点浪费,通信开销反而可能拖慢单请求延迟,不如2卡各跑一个实例做负载均衡,再用nginx分流,这样单点故障也好处理。AWQ 4bit我们测过,知识库问答这种短文本场景掉点不明显,但如果你有长上下文或复杂推理需求,建议保留FP8或者干脆上GPTQ,反正A100显存够。还有个坑,量化后vLLM的prefill阶段会变慢,你可以试下把--enable-prefix-caching打开,对知识库这种重复前缀效果提升很大。最后提醒下,2秒响应时间得把网络和检索环节也算进去,最好留出30%的余量,不然高峰期容易翻车。
4卡张量并行对TTFT改善明显,但2卡各跑实例吞吐更稳,AWQ 4bit做知识库问答基本无感掉点。
4卡张量并行延迟更稳,2卡负载均衡吞吐上限高,知识库问答建议后者,AWQ 4bit掉点可接受。
说实话你这个场景我踩过类似的坑,单卡A100塞20个实例纯属扯淡,光KV cache和CUDA context就得吃掉不少显存。我自己测下来Qwen2.5-7B用vLLM开16并发,TTFT能飙到3秒多,完全没法用。
建议别碰4bit,知识库问答对事实准确性要求高,AWQ量化后明显会答非所问,我试过drop超过5%。更靠谱的方案是2卡各跑一个实例,前面加个nginx做负载均衡,这样单实例并发控制在8以内,响应能稳在1.5秒。
另外有个小技巧,vLLM里把max-num-seqs调低点,比如设4,牺牲点吞吐换延迟,体感会好很多。
2卡各跑一个实例更稳,AWQ 4bit对知识库问答影响不大,TTFT才是关键。
2卡负载均衡比4卡张量并行稳,TTFT能压住,AWQ 4bit跑知识库够用。