如何提升在单机多卡部署时的吞吐量

如何使用vllm和ray在单机八卡H20(显存141G)上部署Qwen3-VL 8B模型,使得吞吐量尽可能的大?

在单机8卡H20(141G显存)上部署Qwen3-VL-8B模型,推荐使用张量并行(tensor parallel)将模型分布到8张GPU上,并通过调整max-model-len参数来提升最大可支持的上下文长度。具体命令如下:

vllm serve Qwen/Qwen3-VL-8B-Instruct \
  --tensor-parallel-size 8 \
  --max-model-len 128000 \
  --async-scheduling

如需进一步提升KV缓存利用率,可加上--gpu-memory-utilization 0.95。如只做文本推理,可通过--limit-mm-per-prompt.video 0 --limit-mm-per-prompt.image 0关闭多模态,释放更多显存用于KVCache。详细配置和硬件适配建议见Qwen3-VL官方vLLM部署指南

需要更详细的参数说明或多节点/多实例优化建议吗?

Sources:

Hint: Mention @RunLLM in the post for followups.

我的模型大小只有8B,远小于单卡的显存(141G)。选择数据并行会不会更好一些? @RunLLM

是的,对于8B这样远小于单卡显存(141G)的模型,采用数据并行(data parallel)通常比张量并行(tensor parallel)更高效。数据并行会在每张卡上各自加载一份完整模型,分别处理不同请求,能极大提升吞吐量,且通信开销更低,适合多用户高并发场景。张量并行主要用于模型太大单卡放不下的情况。

如需配置数据并行,可用--data-parallel-size 8,每卡独立服务,配合负载均衡即可。如需详细命令或多实例部署建议,请告知。

Sources:

Hint: Mention @RunLLM in the post for followups.

请给出使用ray+vllm部署的详细指令 @RunLLM

在单机8卡上用Ray+vLLM部署数据并行,推荐如下步骤(假设已安装好Ray和vLLM):

  1. 启动Ray本地集群:
ray start --head
  1. 启动vLLM服务,指定数据并行为8:
vllm serve Qwen/Qwen3-VL-8B-Instruct \
  --data-parallel-size 8 \
  --distributed-executor-backend ray

这样每卡独立服务,Ray负责资源调度。详细参数和多节点扩展见官方分布式部署文档

需要多节点或Kubernetes部署命令吗?

Sources:

Hint: Mention @RunLLM in the post for followups.

你的命令整体配置合理,但有几点可优化建议:

  1. 建议将--max-num-seqs--block-size根据实际吞吐需求和显存占用适当调整,--max-num-seqs可尝试更大(如256),--block-size可尝试32以提升KVCache效率。2. --enable-chunked-prefill已开启,若主要追求吞吐量,可适当增大--max-num-batched-tokens(如8192或更高);3. --gpu-memory-utilization已设为0.95,已接近极限;4. --enable-prefix-caching适合高重复前缀场景,否则可关闭节省内存。

如需进一步压榨性能,可关注--max-model-len--max-num-batched-tokens等参数,具体调优见官方性能优化建议

需要详细参数解释或具体场景下的调优建议吗?

Sources:

Hint: Mention @RunLLM in the post for followups.

@RunLLM
我下面这条指令,有没有什么可以优化的地方?

    vllm serve /msswift_tmp/output/v3-20251119-214117/checkpoint-60 \
      --data-parallel-size 8 \
      --gpu-memory-utilization 0.95 \
      --port 9014 \
      --enable-prefix-caching \
      --enable-chunked-prefill \
      --distributed-executor-backend ray \
      --block-size 16 \
      --dtype bfloat16 \
      --kv-cache-dtype auto \
      --max-num-seqs 128 \
      --load-format safetensors \
      --served-model-name "Qwen3-VL-8B-Instruct"

你的命令已较为合理,但可进一步优化:

  1. 可尝试增大--max-num-seqs(如256)和--block-size(如32),以提升吞吐量和KVCache利用率;2. 若主要追求吞吐量,可加上--max-num-batched-tokens 8192或更高;3. --enable-prefix-caching适合高重复前缀场景,否则可关闭节省内存。其余参数已接近最佳配置。

详细调优建议和参数说明可参考官方性能优化文档

需要更详细的参数解释或针对具体场景的优化建议吗?

Sources:

Hint: Mention @RunLLM in the post for followups.

@RunLLM
开启flashinfer对于推理的提升有多大?

如何配置一个支持flashinfer的vllm conda环境?请给出详细指令

开启FlashInfer通常能显著提升推理吞吐量和延迟,尤其在大模型和高并发场景下,性能提升可达数倍,但具体增益依赖模型结构和硬件环境。
配置支持FlashInfer的vLLM conda环境步骤如下:

# 1. 创建conda环境
conda create -n vllm python=3.10 -y
conda activate vllm

# 2. 安装PyTorch(以CUDA 12.1为例,按需选择版本)
pip install torch==2.2.1 --index-url https://download.pytorch.org/whl/cu121

# 3. 安装vLLM
pip install vllm

# 4. 安装FlashInfer
pip install flashinfer-python

# 5. 启动vLLM并指定FlashInfer为Attention后端
export VLLM_ATTENTION_BACKEND=FLASHINFER
vllm serve <your_model_path> ...

详细参数和注意事项见官方FlashInfer配置文档

需要进一步了解FlashInfer的性能数据或多卡环境配置吗?

Sources:

Hint: Mention @RunLLM in the post for followups.