Skip to content

NVIDIA GPU Benchmark

NVIDIA L20

Z-Image-ControlNet: Hybrid Cache + Parallelism

Z-Image-ControlNet Context Parallel: Ulysses 2 Context Parallel: Ulysses 4 + ControlNet Parallel
Base L20x1: 22s 15.7s 12.7s 🚀7.71s
+ Hybrid Cache + Torch Compile + Async Ulyess CP + FP8 All2All + CUDNN ATTN
🚀6.85s 6.45s 6.38s 🚀6.19s, 5.47s

FLUX.1-dev: Hybrid Cache + Parallelism

Baseline(L20x1) F1B0 (0.08) F1B0 (0.20) F8B8 (0.15) F12B12 (0.20)
24.85s 15.59s 8.58s 15.41s 15.11s
Baseline(L20x1) F1B0 (0.08) F8B8 (0.12) F8B12 (0.12) F8B16 (0.20)
27.85s 6.04s 5.88s 5.77s 6.01s

UAA: Ulysses Anything Attention

Qwen-Image & FLUX.1-dev

Any Sequence Length
U*: Ulysses Attention, UAA: Ulysses Anything Attenton, UAA*: UAA + Gloo, Device: NVIDIA L20
FLUX.1-Dev w/o CPU Offload, 28 steps; Qwen-Image w/ CPU Offload, 50 steps; Gloo: Extra All Gather w/ Gloo

CP2 w/ U* CP2 w/ UAA* CP2 w/ UAA L20x1 CP2 w/ UAA* CP2 w/ U* L20x1 CP2 w/ UAA*
FLUX, 13.87s 🎉13.88s 14.75s 23.25s 🎉13.75s Qwen, 132s 181s 🎉133s
1024x1024 1024x1024 1024x1024 1008x1008 1008x1008 1312x1312 1328x1328 1328x1328
✔️U* ✔️UAA ✔️U* ✔️UAA ✔️U* ✔️UAA NO CP ❌U* ✔️UAA ✔️U* ✔️UAA NO CP ❌U* ✔️UAA

Z-Image-Turbo

Any Head Num
Ulysses: Ulysses Attention, FP8 Ulysses: Ulysses w/ FP8 All2All, Device: NVIDIA L20
🔥Z-Image (Head=30, ❌CAN NOT divisible by 4), 1024x1024, 9 steps.

Ulysses 2, L20 Ulysses 4 FP8 Ulysses 4 + Cache + FP8 DQ
1024x1024, 3.19s 1024x1024, 1.98s 1024x1024, 1.89s 1024x1024, 1.63s 1024x1024, 1.23s
zimage C1_Q0_NONE_Ulysses2_sdpa_cudnn zimage C1_Q0_NONE_Ulysses4_sdpa_cudnn zimage C1_Q0_NONE_Ulysses4_ulysses_float8_sdpa_cudnn zimage C1_Q0_DBCache_F1B0_W4I1M0MC0_R0 6_SCM111110101_dynamic_CFG0_T0O0_Ulysses4_S2_ulysses_float8_sdpa_cudnn zimage C1_Q1_float8_DBCache_F1B0_W4I1M0MC0_R0 6_SCM111110101_dynamic_CFG0_T0O0_Ulysses4_S2_ulysses_float8_sdpa_cudnn

Async Ulysses QKV Projection

FLUX.1-dev

Ulysses: Standard Ulysses Attention, Async Ulysses: Ulysses Attenton with Async QKV Projection

L20x2 w/ Ulysses w/ Async Ulysses w/ Ulysses + compile w/ Async Ulysses + compile
FLUX.1, 13.87s 🎉13.20s 12.21s 🎉11.97s

Async FP8 Ulysses Attention

FLUX.1-dev

L20x2 w/ Ulysses w/ Ulysses FP8 w/ Ulysses + compile w/ Ulysses FP8 + compile
FLUX.1, 13.87s 🎉13.36s 12.21s 🎉11.54s

NVIDIA H100

Model Baseline H100x1 Ulysses 2 + FA3 + cache + compile
FLUX.1-dev: 50 steps  9.30s  6.04s 5.99s  2.60s 1.92s
Qwen-Image: 50 steps 18.49s  12.81s  12.75s   5.67s 4.20s

Reproduce commands:

# FLUX.1-dev: 50 steps
python3 -m cache_dit.generate flux --steps 50
torchrun --nproc_per_node=2 -m cache_dit.generate flux --steps 50 --parallel ulysses
torchrun --nproc_per_node=2 -m cache_dit.generate flux --steps 50 --parallel ulysses --attn _flash_3
torchrun --nproc_per_node=2 -m cache_dit.generate flux --steps 50 --parallel ulysses --attn _flash_3 --cache
torchrun --nproc_per_node=2 -m cache_dit.generate flux --steps 50 --parallel ulysses --attn _flash_3 --cache --compile
# Qwen-Image: 50 steps
python3 generate.py qwen_image --steps 50
torchrun --nproc_per_node=2 -m cache_dit.generate qwen_image --steps 50 --parallel ulysses
torchrun --nproc_per_node=2 -m cache_dit.generate qwen_image --steps 50 --parallel ulysses --attn _flash_3
torchrun --nproc_per_node=2 -m cache_dit.generate qwen_image --steps 50 --parallel ulysses --attn _flash_3 --cache
torchrun --nproc_per_node=2 -m cache_dit.generate qwen_image --steps 50 --parallel ulysses --attn _flash_3 --cache --compile