Stable Diffusion 3.5 Medium
Measured on: RTX 3090, RTX 4090, RTX 5090, RTX A5000, A100-SXM4-80GB. Our figures for these GPUs are on the benchmarks page.
Veizik
- Build
- A development build of the SD3.5 engine, named with each figure on the benchmarks page. It is not distributed.
- Note
- These figures were measured on a development build, and no Veizik download for SD3.5 is offered at the moment, so our side cannot be rerun yet. The operating point below is the one our figures used.
- Operating point
- Prompt “A red colored car.” · Resolution 1024x1024 · Steps 40 · Seed 42
- Mode
- quality, balanced, fast, ultrafast and low-memory; each row names its mode
- Warm-up and runs
- 3 runs per mode for time per step and peak memory; 1 run, from a fresh start, for the finished image
- What is timed
- Per step: the engine's own time per denoising step
Finished image: first image after a fresh start of the command: process start, text encoding, denoising, decoding and writing the PNG
Peak memory: peak device memory over the whole render, sampled with nvidia-smi - Hardware
- Dedicated single-GPU cloud host; the table below gives the GPU, power limit and driver of each of our runs.
diffusers
- Engine
- diffusers 0.39.0
- Also installed
- PyTorch 2.8.0+cu128, CUDA runtime 12.8, Python 3.11.10, transformers 5.14.1, accelerate 1.15.0
- Model
stabilityai/stable-diffusion-3.5-mediumat revisionb940f670f0eda2d07fbb75229e779da1ad11eb80- Precision
- bf16
- Pipeline
- StableDiffusion3Pipeline, whole model on the GPU, no CPU offload
- Scheduler
- FlowMatchEulerDiscreteScheduler, the repository default
- Settings
- Prompt “A red colored car.” · Negative prompt “” · Resolution 1024x1024 · Steps 40 · Guidance 4.5 · Seed of the recorded runs 7
- Warm-up and runs
- 1 warm-up, then 5 timed
- What is timed
- the pipe() call with the weights already loaded; it holds text encoding, denoising and decoding
- Where the recipe comes from
- Written from the recorded pipeline class, dtype and call arguments. The recorded runs used seed 7; the snippet uses seed 42 so both engines draw the same image. Use one seed for both.
python3 -m venv ~/dfenv && ~/dfenv/bin/pip install torch==2.8.0 torchvision==0.23.0 diffusers==0.39.0 transformers==5.14.1 accelerate==1.15.0 safetensors==0.8.0 "numpy>=2" pillow ftfy sentencepiece protobuf huggingface_hub --extra-index-url https://download.pytorch.org/whl/cu128import time, torch from diffusers import StableDiffusion3Pipeline pipe = StableDiffusion3Pipeline.from_pretrained( "stabilityai/stable-diffusion-3.5-medium", revision="b940f670f0eda2d07fbb75229e779da1ad11eb80", torch_dtype=torch.bfloat16).to("cuda") args = dict(prompt="A red colored car.", height=1024, width=1024, num_inference_steps=40, guidance_scale=4.5) pipe(**args, generator=torch.Generator("cuda").manual_seed(42)) # warm-up, not timed for rep in range(5): torch.cuda.synchronize(); t0 = time.perf_counter() image = pipe(**args, generator=torch.Generator("cuda").manual_seed(42)).images[0] torch.cuda.synchronize(); print("render_s", time.perf_counter() - t0)
| GPU | Veizik run | diffusers run | Same host and session |
|---|---|---|---|
| RTX 3090 | NVIDIA GeForce RTX 3090 (24 GB, sm_86); power 350 W, uncapped; driver 580.126.20; dedicated single-GPU cloud host; no quiet gate. | 350 W limit · driver 580.159.03 | No |
| RTX 4090 | NVIDIA GeForce RTX 4090 (24 GB, sm_89); power 450 W, uncapped; driver 580.159.04; dedicated single-GPU cloud host; no quiet gate. | 450 W limit · driver 580.126.20 | No |
| RTX 5090 | NVIDIA GeForce RTX 5090 (32 GB, sm_120); power 575 W, uncapped; driver 590.48.01; dedicated single-GPU cloud host; no quiet gate. | 575 W limit · driver 580.126.20 | No |
| RTX A5000 | NVIDIA RTX A5000 (24 GB); 230 W, uncapped; driver 580.159.04; dedicated single-GPU cloud host; no quiet gate. | 230 W limit · driver 580.159.04 | No |
| A100-SXM4-80GB | NVIDIA A100-SXM4-80GB (81920 MiB, sm_80); power 400 W, uncapped; driver 580.159.03; dedicated single-GPU cloud host; no quiet gate. | 400 W limit · driver 580.159.03 | No |
Recorded on separate dedicated cloud hosts of the same GPU model, not in the same session as our runs.
Time both the same way
- Time per step: on both engines, time the denoising steps only and divide by the step count. For diffusers, take timestamps in a callback_on_step_end function; dividing the whole pipe() time by 40 also counts text encoding and decoding.
- Finished image: on both engines, time from starting the command to the image written to disk, from a fresh process.
- Peak memory: sample nvidia-smi memory.used for both engines during the run, from the same idle baseline.
What must match
GPU model; driver; power limit; clocks left at default; prompt; resolution; steps; guidance; seed; model revision; warm-up; number of timed runs; nothing else running on the GPU.
Powered by Stability AI.