vllm-project/vllm-omni

[Performance] Qwen-Image双卡配置下单张图片生成时间未优化 - TP2/DP2/PP2性能问题

Open

#3,188 opened on Apr 27, 2026

View on GitHub
 (2 comments) (0 reactions) (0 assignees)Python (1,067 forks)github user discovery
NPUgood first issuehelp wanted

Repository metrics

Stars
 (4,990 stars)
PR merge metrics
 (PR metrics pending)

Description

问题描述

在使用vllm-omni部署Qwen-Image-2512模型时,发现配置2卡(TP2、DP2、PP2)时,生成单张图片的时间与单卡配置基本相同,没有体现出多卡的性能优势。

环境信息

  • 硬件: 华为昇腾 910B3 NPU (8卡,每卡64GB HBM)
  • 模型: Qwen-Image-2512
  • 分辨率: 1024x1024
  • vllm-omni版本: 2026-04-16
  • 平台: Linux (Ubuntu 22.04)

测试配置

  1. 单卡配置
vllm serve /opt/data/models/Qwen-Image-2512/ \
    --omni --port 8091 \
    --tensor-parallel-size 1 \
    --vae-patch-parallel-size 1 \
    --vae-use-tiling --max-num-seqs 10
  1. TP2配置 (Tensor Parallel)
vllm serve /opt/data/models/Qwen-Image-2512/ \
    --omni --port 8091 \
    --tensor-parallel-size 2 \
    --vae-patch-parallel-size 2 \
    --vae-use-tiling
  1. DP2配置 (Data Parallel)
vllm serve /opt/data/models/Qwen-Image-2512/ \
    --omni --port 8091 \
    --data-parallel-size 2 \
    --vae-patch-parallel-size 1 \
    --vae-use-tiling --max-num-seqs 20
  1. PP2配置 (Pipeline Parallel)
vllm serve /opt/data/models/Qwen-Image-2512/ \
    --omni --port 8091 \
    --tensor-parallel-size 1 \
    --pipeline-parallel-size 2 \
    --vae-patch-parallel-size 2 \
    --vae-use-tiling --max-num-seqs 10

性能测试结果

单张图片生成时间(第一个请求延迟)

配置 生成时间(秒) 说明
单卡 (TP=1) ~26秒 OmniDiffusion.generate total: 26606.71 ms
TP2 (TP=2, VAE-PP=2) ~27秒 OmniDiffusion.generate total: 263342.26 ms
DP2 (DP=2) ~25秒 OmniDiffusion.generate total: 249420.77 ms

并发测试(10并发,生成30张图片)

配置 总时间(秒) 吞吐量 (req/s) 备注
单卡 ~265秒 0.11 单卡处理能力
TP2 ~793秒 0.04 并发处理但性能未提升
DP2 ~750秒 0.04 数据并行但吞吐量下降

详细日志数据

单卡日志

OmniDiffusion.generate total: 26606.71 ms (第一个请求)
OmniDiffusion.generate total: 52883.73 ms (并发场景下排队)

TP2日志

OmniDiffusion.generate total: 263342.26 ms
DiffusionEngine.step breakdown:
  preprocess=0.00 ms
  add_req_and_wait=263342.26 ms
  postprocess=56.12 ms

DP2日志

OmniDiffusion.generate total: 249420.77 ms
Info: Decode run with distributed executor

问题分析

  1. TP2未优化: Tensor Parallel应该将模型参数分片到2卡,理论上单张图片生成时间应该减少,但实际测试显示时间基本相同(26-27秒)。

  2. VAE并行配置: 使用了--vae-patch-parallel-size 2,但VAE解码仍显示"Decode run with distributed executor",说明确实在分布式执行,但性能未提升。

  3. DP2表现: Data Parallel应该能同时处理2个请求,但从并发测试来看,吞吐量反而下降(0.04 vs 0.11 req/s)。

  4. 通信开销: 从日志中的"add_req_and_wait"时间占比来看,可能存在较大的通信开销。

期望行为

  1. TP2: 单张图片生成时间应该约为单卡的50%(约13秒)
  2. DP2: 吞吐量应该约为单卡的2倍
  3. PP2: 应该通过流水线并行优化吞吐量

可能原因

  1. NPU上的tensor parallel通信开销过大
  2. VAE解码阶段的并行效率不高
  3. diffusion模型的特殊性(迭代50步)导致并行收益有限
  4. vllm-omni对Ascend NPU的优化可能还不够完善

建议

希望vllm-omni团队:

  1. 分析NPU上的tensor parallel性能瓶颈
  2. 优化VAE解码的并行效率
  3. 提供针对diffusion模型更好的并行策略
  4. 给出Ascend NPU上的最佳配置建议

测试脚本和日志位置

测试脚本:

  • /vllm-workspace/vllm-omni/test_10_concurrent_api.py
  • /vllm-workspace/vllm-omni/api_concurrent_benchmark.py

启动脚本:

  • start_api_single_card.sh (单卡)
  • start_api_8091.sh (TP2)
  • start_api_dataparallel2.sh (DP2)
  • start_api_dataparallel.sh (PP2)

日志文件:

  • api_server_single_card.log
  • api_server_8091.log
  • api_server_dataparallel.log

Benchmark结果文件

  • api_benchmark_result_20260416_151130.json (TP2)
  • api_benchmark_result_20260416_143949.json (DP2)
  • api_benchmark_result_20260416_142550.json (单卡)

Contributor guide