vllm-project/vllm-omni
View on GitHub[Performance] Qwen-Image双卡配置下单张图片生成时间未优化 - TP2/DP2/PP2性能问题
Open
#3,188 opened on Apr 27, 2026
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)
测试配置
- 单卡配置
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
- 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
- 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
- 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
问题分析
-
TP2未优化: Tensor Parallel应该将模型参数分片到2卡,理论上单张图片生成时间应该减少,但实际测试显示时间基本相同(26-27秒)。
-
VAE并行配置: 使用了
--vae-patch-parallel-size 2,但VAE解码仍显示"Decode run with distributed executor",说明确实在分布式执行,但性能未提升。 -
DP2表现: Data Parallel应该能同时处理2个请求,但从并发测试来看,吞吐量反而下降(0.04 vs 0.11 req/s)。
-
通信开销: 从日志中的"add_req_and_wait"时间占比来看,可能存在较大的通信开销。
期望行为
- TP2: 单张图片生成时间应该约为单卡的50%(约13秒)
- DP2: 吞吐量应该约为单卡的2倍
- PP2: 应该通过流水线并行优化吞吐量
可能原因
- NPU上的tensor parallel通信开销过大
- VAE解码阶段的并行效率不高
- diffusion模型的特殊性(迭代50步)导致并行收益有限
- vllm-omni对Ascend NPU的优化可能还不够完善
建议
希望vllm-omni团队:
- 分析NPU上的tensor parallel性能瓶颈
- 优化VAE解码的并行效率
- 提供针对diffusion模型更好的并行策略
- 给出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.logapi_server_8091.logapi_server_dataparallel.log
Benchmark结果文件
api_benchmark_result_20260416_151130.json(TP2)api_benchmark_result_20260416_143949.json(DP2)api_benchmark_result_20260416_142550.json(单卡)