最近想把公司内部一个问答机器人换成开源7B模型(Qwen2.5-7B-Instruct),用vLLM部署。但遇到一个很实际的问题:单卡A100 80G跑满并发大概能支持多少路请求?我看网上有人说可以塞下20个实例,但实际测下来显存占用比预期高不少。而且如果同时跑多个并发,TTFT会明显变长,用户感知就很明显。现在纠结是上4卡做张量并行,还是干脆用2卡各跑一个实例做负载均衡?另外量化到AWQ 4bit会不会掉点太多?有没有实际部署过的大佬给点建议,主要场景是知识库问答,要求响应时间在2秒内。
部署7B模型到生产环境,显存和并发到底怎么权衡?
全部回复
共 110 条我们生产环境跑7B用的就是双卡各一个实例,负载均衡比张量并行稳,单实例崩了至少还有一半容量撑着。TTFT这事其实跟显存关系不大,主要看调度和前缀缓存,vLLM记得开continuous batching,能好很多。AWQ 4bit在知识库问答这种场景掉点真不明显,我们对比过几个benchmark,基本在1-2%以内,响应速度还快了30%。单卡A100撑20路并发有点理想了,我们实测16路就开始超2秒,建议压测的时候把p95也盯一下,平均响应好看没用。
4卡张量并行更稳,2秒内响应基本没戏,AWQ 4bit掉点能接受但别指望太多。
我最近也在折腾类似的事,A100上7B AWQ量化后大概能塞4-5个实例,但并发一上来TTFT确实飙得厉害,2秒内基本只能稳定扛10路左右。建议别上张量并行,4卡延迟提升有限,2卡各跑实例做LB更灵活,还能容忍单卡故障。AWQ 4bit在知识库问答这种短文本场景掉点其实不明显,但你要是对首token延迟敏感,可以试试FP8,显存比BF16省一半,效果更稳。
另外你测显存偏高,大概率是vLLM默认给每个请求预留了KV cache,调下--max-num-seqs和--gpu-memory-utilization能挤出不少空间。我们最后用了2卡负载均衡+AWQ,实测并发30路时平均TTFT在1.2秒左右,你可以参考下这个配置。
我们之前也踩过这个坑,7B用vLLM单卡撑并发,实际显存比理论估算高一大截,主要是KV cache和中间激活占了不少。建议别死磕单卡,2卡各跑一个实例做负载均衡更稳,TTFT能压住,单点故障也好处理。AWQ 4bit在知识库问答这种场景掉点其实不明显,但如果你有长上下文或者对数字敏感的任务,建议先拿评估集跑一遍对比。另外可以试试把max_num_seqs调小,比如64,牺牲一点吞吐换首token延迟,2秒内还是有戏的。
2卡各跑一个实例更稳,4卡张量并行对TTFT没本质提升,量化用AWQ 4bit掉点能接受。
我们之前也踩过这坑,单卡A100跑7B其实挺尴尬的,显存看着够但并发一上来KV cache就暴涨,20个实例纯属理想值。建议直接上2卡各跑一个实例做负载均衡,TTFT会比单卡硬扛稳很多,而且部署和扩缩容都灵活。AWQ 4bit在知识库问答这种场景掉点其实不明显,你主要追求2秒内响应的话,量化带来的收益远超那点精度损失,可以先拿测试集跑一遍对比下。另外vLLM记得开continuous batching,并发吞吐能再提一截。
4卡张量并行吧,2秒内TTFT稳一些,AWQ 4bit知识库问答够用了,别太担心掉点。
看到你说实测显存比预期高,我猜大概率是max-model-len和KV cache预留没调好,vLLM默认会按最大上下文预分配,如果知识库问答实际用不到8k,把max-model-len压到2k-4k,并发直接能翻倍。TTFT变长这个事,其实跟prefill和decode混跑关系很大,你可以试试vLLM的continuous batching加上--enable-prefix-caching,如果用户问题里有固定系统提示词,命中缓存后首token能快不少。至于4卡还是2卡,我建议先算一下单卡A100在2秒内能扛住多少tokens输出,如果每路回答平均200字,那你真正瓶颈是decode吞吐而不是显存,2卡各跑一个实例做负载均衡,单实例并发控制在8-10路,体感会比4卡张量并行更稳,因为TP会放大通信开销,小batch下反而延迟更高。AWQ 4bit我实际用过,知识库问答这种场景掉点基本感知不到,但注意要开--quantization awq_marlin,另外把温度调低到0.1-0.2,回答会更稳定。最后提醒一下,记得给vLLM设--gpu-memory-utilization 0.9,再开--swap-space,不然显存碎片会白白浪费10%以上。
我们组之前用7B做过类似的事,A100单卡跑20路并发确实有点乐观了,实际到15路左右TTFT就开始飘。建议你先量化到AWQ 4bit试试,知识库问答这种场景掉点其实不明显,显存能省下30%左右。至于并行方案,我倾向两卡各跑实例做负载均衡,张量并行在小模型上收益不大,反而增加通信开销。顺便问下你用的什么向量检索方案?如果检索慢的话,光优化推理也压不进2秒。
我们生产环境跑7B也是用vLLM,A100单卡塞20个实例纯属扯淡,实际显存管理加KV cache,8并发左右TTFT就开始飙了。更推荐2卡各跑一个实例再挂负载均衡,故障隔离也舒服,毕竟张量并行对知识库这种长prompt场景收益有限。AWQ 4bit掉点其实看任务,问答这种生成类我觉得能接受,但建议先在你们自己的测试集上跑一遍 rouge 和 bertscore,尤其注意长尾实体名字会不会崩。另外记得开--enable-prefix-caching,对知识库重复前缀提升很大。
单卡80G塞20个实例那是压测脚本的玩法,真实业务带上下文窗口和并发波动,10个都悬。我们当时是4卡张量并行,但后来发现瓶颈在prefill,用户等首token时间反而比2卡负载均衡更差。你要是响应必须2秒内,不如量化到AWQ 4bit加2卡各一个实例,把max-num-seqs调小点,比如64,实测TTFT能压到1秒内。掉点问题别光看指标,重点测一下多轮对话和长文档引用,4bit在这类场景有时会漏细节。
巧了,我们刚把Qwen2.5-7B从4bit量化换回FP16,因为发现AW
之前我们试过类似配置,A100 80G单卡跑Qwen2.5-7B-Instruct,纯FP16的话并发20路差不多就是极限了,超过后TTFT直接翻倍。AWQ 4bit掉点不太明显,知识库问答这种场景完全能接受,但显存省下来后瓶颈反而在CPU和内存带宽上。
你如果追求2秒内响应,建议直接上4卡张量并行,单实例吞吐比双卡负载均衡稳得多,至少不会出现某卡突然打满的情况。另外vLLM记得开continuous batching,不然并发上去排队时间很要命。
对了,你们知识库检索是单独服务还是和模型放一起?如果检索耗时超过300ms,那响应时间预算就得重新算了。
说实话你这场景我建议直接上2卡各跑一个实例,4卡张量并行对7B来说通信开销太大了,20个实例那种说法纯属理论峰值,实际Qwen2.5的显存碎片和KV cache预留能吃掉不少。AWQ 4bit掉点其实没那么吓人,知识库问答这种任务主要看检索质量,生成质量稍微降点根本感知不到。不过你TTFT变长大概率是没开continuous batching或者max_num_seqs设太小了,vLLM里调一下并发参数比换卡效果明显得多。
我们生产环境用的就是Qwen2.5-7B,单卡A100跑16并发左右TTFT就开始飙了,2秒内基本没戏,后来直接上2卡各跑一个实例做负载均衡,体感比单卡硬扛好太多。AWQ 4bit掉点其实不大,知识库问答这种场景基本感知不到,但显存能省30%以上,建议你量化后先拿内部测试集跑一遍对比下关键case。另外vLLM记得开continuous batching,默认配置下显存预留很保守,实际能塞的请求数比你想的多。
实测过类似场景,Qwen2.5-7B在A100上塞20个实例基本是理论值,实际显存还有KV cache和activation,我这边8个并发就快把80G吃满了,TTFT从300ms直接飙到1.5s。你要是卡在2秒内,单卡单实例并发控制在10路以内比较稳,再多就得看请求长度了。
4卡张量并行和2卡双实例我倾向后者,因为知识库问答本身是短文本,张量并行带来的通信开销在低延迟场景下不划算,而且双实例还能做故障隔离。AWQ 4bit我试过,掉点大概在2-3个点,但如果你用RAG召回质量高,其实用户感知不明显,显存能省一半,建议直接用。
不过有个坑是vLLM的continuous batching对长尾请求处理不太好,你要是遇到某个超长文档片段,单个请求可能占住所有算力,建议把max_model_len压到2k以内,同时配个超时降级方案。另外你提到响应时间2秒,这个指标最好按P95去卡,实际体验中偶尔一次3秒比平均2秒更容易被吐槽。
vLLM显存开销主要卡在KV cache和prefill峰值上,20实例那说法太理想了。我建议先量化到AWQ 4bit试跑,Qwen2.5的量化损失在知识库问答场景基本感知不到,TTFT能降不少。至于单卡还是多卡,你2秒延迟要求下其实2卡负载均衡更稳,单卡并发一高prefill就排队。可以先用A100跑个压测,把max_num_seqs和gpu_memory_utilization调低点看看曲线,别一上来就追求满并发。
实测4bit掉点不大,但TTFT瓶颈在prefill,2卡各跑实例比张量并行更稳。
别贪多实例,8并发内延迟可控,超了直接炸显存。
AWQ 4bit在知识库问答上掉点不明显,但2卡各跑实例负载均衡比4卡张量并行省心,TTFT也稳。
我们这边试过类似场景,7B上vLLM单卡A100塞20个实例确实太乐观了,光KV cache和PagedAttention的碎片就能吃掉不少显存,实际能稳定跑8-10路并发就不错了。你要是卡在2秒TTFT,建议别上4卡张量并行,跨卡通信延迟反而拖慢首token,不如2卡各跑一个实例做负载均衡,再把max-num-seqs调小到4-8,体感会稳很多。AWQ 4bit在知识库问答这种短query场景下掉点其实不太明显,但你要是接长文档RAG,中后段生成质量能感觉到变差,建议先拿测试集跑个对比再决定。另外别忘了开continuous batching,vLLM默认的调度策略对并发影响很大,有时候不是显存不够,是调度没调好。
实际部署过,7B别硬塞多实例,单卡vLLM开个20并发就够呛,TTFT直接崩。建议2卡各跑一个,比4卡张量并行省心,AWQ 4bit掉点不明显。
我们这边之前也踩过类似的坑,A100 80G单卡塞两个实例跑7B,显存是够但并发一上来TTFT就飙到3秒多。后来换了张量并行,单实例能扛的并发反而比双实例高,延迟也稳。AWQ 4bit我试过,知识库问答这种短文本场景掉点不明显,但长上下文或多轮会偶尔答非所问,建议先拿你们真实对话测一批。另外延迟敏感的话,vLLM的continuous batching和prefix caching记得开,能省不少事。你们现在单卡测的并发上限大概是多少?