最近在搞一个内部用的智能客服,选了个7B的模型,用vLLM部署在单张A100上。离线测试时感觉还好,一上线并发一上来,响应时间直接奔着10秒去了,用户狂吐槽。我试了调低max_num_batched_tokens和换量化,效果不明显。想问下大家,有没有比较成熟的方案或者参数调优经验?比如是否一定要上多卡推理?或者有没有轻量级的替代框架?另外,是不是我的batch设置有问题?求指点,谢谢!
部署7B模型到生产环境,推理速度慢得离谱,请问怎么优化?
全部回复
共 178 条我之前也踩过这坑,单张A100跑7B其实算力够,瓶颈往往在并发调度和显存带宽上。你可以试试把max_num_seqs调大点(比如64或128),配合连续动态批处理,vLLM默认值有时候偏保守。另外响应10秒有点夸张,如果调完还不行,先确认下是不是输入序列长度太长导致prefill拖慢,把max_model_len截短些能立竿见影。轻量框架的话,能不用vLLM就别换,TensorRT-LLM优化潜力更大但配置麻烦,不太适合快速迭代场景。
先查下是不是max_num_seqs太小导致并发排队,调大点试试,另外换AWQ量化配合chunked prefill往往立竿见影。
试试把并发压测拆开看下是不是显存带宽瓶颈,7B单卡本来吞吐就有限,考虑下pipeline并行或者直接上量化+投机采样吧。
单卡A100跑7B并发一上来确实容易崩,你max_num_batched_tokens调低反而可能让吞吐更差,因为batch被压小了。建议先看下gpu_memory_utilization和max_model_len,很多时候是KV cache吃满导致排队。如果延迟卡在10秒,可以试试开chunked prefill,再把tensor_parallel设成2上双卡,通常比换框架见效快。量化对7B收益有限,FP8在A100上也不支持,别在这上面耗太多时间。
并发一上来延迟飙到10秒,大概率是排队而不是单次推理慢,先看下vLLM的metrics里pending请求数和GPU KV cache使用率。A100单卡跑7B其实够用,把gpu_memory_utilization拉到0.9、max_num_seqs适当放大试试,量化换AWQ有时候反而拖慢decode。另外客服场景是不是可以考虑上更小的模型或者做缓存,很多问题都是重复的,命中缓存直接返回能省一大半压力。
你单卡A100跑7B按理说不至于10秒,瓶颈大概率在并发时的调度和KV cache上。建议先把gpu_memory_utilization拉到0.9,max_model_len别设太大,然后开chunked prefill试试,对长prompt的并发场景提升挺明显。量化其实对吞吐帮助有限,主要是省显存,你这情况不一定是显存问题。另外确认下是不是每个请求都重新加载或者tokenize成了瓶颈,用vLLM的metrics看下实际排队时间。
并发上来延迟飙到10秒,八成是continuous batching没吃满,先看看gpu利用率是不是一直在低位晃。可以试试把max_num_seqs调大点,同时开chunked prefill,长请求别把短请求堵死。量化换awq或gptq对吞吐提升有限,重点还是调度参数。单卡A100跑7B并发高的话,上tensor并行到双卡收益挺明显的,不一定要堆机器。
A100跑7B不该这速度,先看看是不是没开连续批处理,gpu利用率多少?
A100单卡跑7B并发高了确实容易崩,试试vLLM开连续批处理加PagedAttention,再挂个TensorRT-LLM对比下延迟。
A100跑7B还10秒,八成是并发上来后KV cache爆了在排队,先看下gpu_memory_utilization和实际batch吞吐吧。
并发上来延迟飙到10秒,八成是请求排队把显存打满了,vLLM的动态批处理在长上下文场景下很容易这样。你可以先看看gpu_memory_utilization是不是默认0.9,适当降到0.85,再限制max_model_len,别让长请求把KV cache全占了。另外量化对延迟帮助有限,主要省显存,真要提速可以考虑换用SGLang或者TensorRT-LLM试试,A100单卡跑7B并发几十路其实够用,关键还是调度参数没调对。
并发一上来延迟飙到10秒,大概率是排队而不是单次推理慢,先看看vLLM的metrics里等待队列是不是爆了。A100单卡跑7B其实够用,关键是把gpu_memory_utilization拉到0.9左右,max_num_seqs别设太小,不然batch根本填不满。量化对显存有帮助但对延迟提升有限,可以试试开chunked prefill,长prompt场景效果挺明显。多卡不是必须的,先确认是不是请求排队导致的,实在不行再考虑加卡或者换TensorRT-LLM。
A100跑7B并发上来还10秒,先看是不是没开continuous batching,gpu利用率多少?
A100跑7B还10秒太离谱了,先看看是不是没开continuous batching,或者KV cache把显存吃满了。
学到了,感谢分享!
有没有更详细的教程推荐?
这个思路不错,收藏了。
我之前也遇到过类似问题,后来换了方案。