最近在搞一个内部知识库问答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,显存占满但推理速度上不去,是哪里没调对?
全部回复
共 9 条是不是max_num_seqs设太高了,试试调低到16或32,让prefill阶段别太贪心。
试试调低gpu_memory_utilization到0.9以下,给KV cache留点余量,prefill阶段batch size设小点看看。
a100单卡跑7b模型按理说不会这么惨,你试试把gpu_memory_utilization调到0.9以下,留点余量给显存管理。另外max_model_len设4096可能还是太高,可以降到2048看看,prefill阶段的内存分配跟这个参数关系挺大的。如果qps一上去就卡死,可能是vllm的调度策略对qwen2.5默认设置不敏感,建议检查一下是否开了–enable-prefix-caching,有时候这个反而拖慢速度。实在不行可以看下vllm的issue,qwen系列有专门的tuning参数讨论。
检查下vLLM的prefill chunk size和KV cache复用配置,A100上7B模型跑200 tok/s明显偏低了。
这情况我也遇到过,vLLM对Qwen2.5的默认配置其实挺吃显存的,尤其是prefill阶段如果max_num_seqs设太大,显存会先被KV cache占满然后推理卡住。可以试试把gpu_memory_utilization降到0.85或0.8,同时把max_num_seqs调到64或32,给prefill留点余量。另外你用的是不是最新版vLLM?之前有版本对Qwen2.5的prefix caching有bug,更新到0.6.3以上可能会好不少。单卡A100跑7B其实不用TP,那玩意反而增加通信开销,重点还是调prefill的batch size和显存分配比例。
看着像是prefill阶段的计算瓶颈,毕竟Qwen2.5的注意力机制对长序列挺敏感的,你试试把--enable-prefix-caching打开,能跳过重复计算的token。另外单卡A100跑7B其实没必要上TP,反而会增加通信开销,不如把gpu_memory_utilization降到0.8,给KV cache留点余量,再配合--max-num-batched-tokens调低到2048,看看能不能把显存压下来。
试试把gpu_memory_utilization调低到0.85,给KV cache留点余量,prefill阶段卡顿可能是batch_size没压住。
试试把max_num_seqs调低点,可能并发太多导致显存碎片化了。
A100上Qwen2.5-7B跑到80GB显存确实有点怪,这模型本身用BF16也就14GB左右,八成是gpu_memory_utilization设太高或者max_num_seqs没卡住并发数,导致KV cache提前把显存撑爆了。我之前试过把这俩参数调低到0.9和256,然后配合--enable-prefix-caching能缓解不少,prefill阶段瓶颈通常跟max_model_len关系不大。你换个思路试试把调度策略改成--scheduler-policy为“fcfs”看看,有时候默认的“max”调度在高并发下反而会卡prefill。如果还是不行,那就只能切TP了,单卡A100上7B模型切2路其实挺浪费的,不如直接换8B模型用FP8精度跑。