如何尽可能提升推理服务的吞吐量

我有一张单卡H20(142G),我想使用vllm部署QWEN3-VL-4B推理服务,我的所有推理任务都是一致的(图片token760,文本token 68,输出token12),我目前的vllm服务启动参数如下。我想尽可能提升吞吐量,帮我优化参数配置。

vllm服务参数:
vllm serve /mnt/workspace/model/base/Qwen3-VL-4B-Instruct
–load-format safetensors
–dtype bfloat16
–port 9014
–served-model-name Qwen3-VL-4B-Instruct
–max-model-len 10240
–gpu-memory-utilization 0.95
–max-num-seqs 62
–tensor-parallel-size 1
–pipeline-parallel-size 1
–block-size 64
–kv-cache-dtype auto
–enable-chunked-prefill --no-enable-prefix-caching
–limit-mm-per-prompt {“image”: 1, “video”: 0}

建议优化如下以提升吞吐量:

  1. 增大max-num-seqs和max-num-batched-tokens:H20显存充足,可适当提高--max-num-seqs(如128或更高)和--max-num-batched-tokens(如8192或更高),以提升并发处理能力。
  2. 调整block-size--block-size建议为16、32、64、128等16的倍数,64已合规,可尝试128以进一步提升吞吐,但需监控显存占用。
  3. 合理设置max-model-len:如任务输入总token远小于10240,可适当下调--max-model-len,为实际最大输入长度+输出长度+冗余(如2048或4096),释放更多KV Cache空间用于并发。
  4. gpu-memory-utilization:0.95已接近极限,若显存仍有余量可尝试0.98。
  5. 关闭不必要功能:已关闭prefix-caching,若无多模态需求,--limit-mm-per-prompt已正确限制为仅图片。
  6. 监控显存与吞吐:每次调整后用nvidia-smi和vLLM日志监控显存与吞吐,避免OOM。

参考命令示例:

vllm serve /mnt/workspace/model/base/Qwen3-VL-4B-Instruct \
  --load-format safetensors \
  --dtype bfloat16 \
  --port 9014 \
  --served-model-name Qwen3-VL-4B-Instruct \
  --max-model-len 4096 \
  --gpu-memory-utilization 0.98 \
  --max-num-seqs 128 \
  --max-num-batched-tokens 8192 \
  --tensor-parallel-size 1 \
  --pipeline-parallel-size 1 \
  --block-size 128 \
  --kv-cache-dtype auto \
  --enable-chunked-prefill \
  --no-enable-prefix-caching \
  --limit-mm-per-prompt '{"image": 1, "video": 0}'

详细参数说明及优化建议可参考官方文档多模态配置说明。如需进一步提升吞吐,可继续增大max-num-seqsmax-num-batched-tokens,但需结合实际显存情况动态调整。

需要更详细的参数调优原理和显存分配说明吗?

Sources:

Hint: Mention @RunLLM in the post for followups.

个人意见哈:
如果你负载大的话,VLLM并发性能挺强的。他会用scheduler prefill尽量在一次推理中尽量算多条。
可以缕一缕 max_num_batched_tokens, max_num_seqs, max-model-len 这几个。
大致可以理解成 max_num_seqs * max-model-len = max_num_batched_tokens.

但如果你是单条顺序请求的话,VLLM的并发性能就用不上了。你可以把这些调小一点,节约一点显存占用。单条的话,提升吞吐相当于是优化response time,我之前试的是 eager mode 比 compiled graph慢很多。模型大多卡 tensor parallel可能会比单卡快,模型小的话,多卡tensor parallel 比单卡慢(TP有额外开销。)

@jaysontree
好的,谢谢。
我们的模型其实单卡足够了。由于图像较大,卡点其实是在prefill,直接FP8量化的收益会比较高

1 Like