最近在搞一个内部知识库问答demo,选Qwen2.5-7B用vLLM部署在单卡A100上。按官方文档设了max_num_seqs和gpu_memory_utilization,结果显存直接冲到80GB,但并发压力测试时tokens/s只有200左右,跟网上说的差好多。而且感觉不少显存被模型本身和KV cache吃了,但实际推理时QPS一上去就卡住,日志里也没报错。自己试过改max_model_len到4096也没改善。请教各位大佬,是不是我prefill阶段的参数没调好?还是vLLM对不同模型有特定推荐配置?或者干脆得切Tensor Parallel?先谢谢了。
用vLLM部署Qwen2.5-7B,显存占满但推理速度上不去,是哪里没调对?
全部回复
共 147 条80G吃满但吞吐上不去,大概率是gpu_memory_utilization给太高了,KV cache占太多反而挤了计算资源,试着降到0.85左右看看。还有max_num_seqs别设太大,并发一高调度开销很明显,200 tokens/s确实偏低,A100跑7B不该这样。建议开一下enable_chunked_prefill,长prompt场景提升挺明显的。另外你的压测输入输出长度是多少?如果输入特别长,prefill阶段本来就是瓶颈,跟decode的tokens/s不是一回事。
单卡A100跑7B模型显存吃到80GB确实有点夸张,正常FP16权重也就15GB左右,剩下那么多全给KV cache了。vLLM默认gpu_memory_utilization是0.9,它会尽可能把剩余显存都拿去做KV cache block,所以你看到显存占满其实是正常行为,不代表有问题。但tokens/s只有200这个确实偏低,A100上7B模型单请求生成怎么也得跑到50-80 tokens/s,并发下总吞吐应该能上千。你检查一下是不是max_num_seqs设得太小,比如默认256但实际被max_model_len和block数卡住了,导致并发上不去。另外enable_chunked_prefill如果没开,长prompt的prefill会阻塞decode,QPS一高就排队。还有个容易忽略的点是dtype,确认下是不是加载成了FP32,那显存和速度都会崩。TP在单卡上没意义,不用考虑。建议先把max_num_seqs调到128以上,开chunked prefill,再用vllm的benchmark脚本压一下看真实数字。
单卡A100跑7B不该这样,先看看是不是enable_prefix_caching没开,或者batch size被卡住了。
单卡A100跑7B才200 tokens/s确实偏低,先看看是不是enable_prefix_caching没开,还有dtype是不是默认成了fp32。
单卡A100跑7B理论上不至于这么惨,200 tokens/s确实偏低了。你检查下是不是没开chunked prefill?长prompt一来直接把整个batch卡住等prefill,decode就被拖死了。另外max_num_seqs别设太大,A100 80G跑7B的话并发高了KV cache碎片化反而掉速,试试控制在64以内看看。还有确认下dtype是不是默认fp16,要是加载成fp32那显存和速度都得崩。
单卡A100跑7B显存吃满有点怪,先看下是不是没开chunked prefill,长prompt把吞吐拖死了。
max_num_seqs开太大反而拖慢,试试降到64,再开chunked prefill看看。