2. AYS (Align Your Steps) Scheduler

What It Does

Uses optimized timestep distributions that allow fewer sampling steps with same or better quality compared to uniform schedulers.

Key Insight

Not all timesteps contribute equally to image formation. AYS pre-computes optimal sigma schedules that focus more steps on critical noise levels.

Research Background

Based on "Align Your Steps: Optimizing Sampling Schedules in Diffusion Models" (2024) - https://research.nvidia.com/labs/toronto-ai/AlignYourSteps/ - Developed by NVIDIA researchers - Validated across SD1.5, SDXL, and other models

Performance

Model Normal Scheduler AYS Scheduler Quality
SD1.5 20 steps 10 steps Same/Better
SDXL 20 steps 10 steps Same/Better
Flux 15 steps 8 steps Same

Usage

Via UI (Streamlit)

  1. Open Settings → Sampling
  2. Select scheduler: "AYS (Align Your Steps)"
  3. Reduce steps to 10 (SD1.5/SDXL) or 8 (Flux)
  4. Generate - same quality, 2x faster!

Programmatically

from src.sample import ksampler_util

# Using AYS scheduler
sigmas = ksampler_util.calculate_sigmas(
    model_sampling, 
    scheduler_name="ays",  # or "ays_sd15", "ays_sdxl", "ays_flux"
    steps=10
)

Scheduler Variants

  • "ays" or "ays_sd15" - SD1.5 optimized (default)
  • "ays_sdxl" - SDXL optimized
  • "ays_flux" - Flux optimized (experimental)

Optimal Step Counts

Pre-computed optimal schedules exist for:

SD1.5: 4, 6, 8, 10, 12, 15, 20, 25 steps
SDXL: 4, 6, 8, 10, 12, 15, 20 steps
Flux: 4, 8, 10, 15, 20 steps

Other step counts use interpolation (slightly less optimal but still better than uniform).

SD1.5 Quick Generation

scheduler: "ays"
steps: 10          # instead of 20
sampler: "euler" or "dpmpp_2m_cfgpp"
cfg: 7.0

SDXL High Quality

scheduler: "ays_sdxl"
steps: 12          # instead of 20-25
sampler: "dpmpp_2m_cfgpp"
cfg: 6.0

Flux Fast Mode

scheduler: "ays_flux"
steps: 8           # instead of 15
sampler: "euler"
cfg: 3.5

Comparison: Uniform vs AYS

Uniform Distribution (normal scheduler):

Steps: 0  4  8  12  16  20
Sigmas evenly spaced → wastes compute on low-impact timesteps

AYS Distribution:

Steps: 0  2  5  8  12  17  20
Sigmas concentrated on critical noise levels → better efficiency

Technical Details

AYS schedules are pre-computed using optimization to minimize reconstruction error:

# Example SD1.5 10-step schedule
AYS_SD15_10 = [
    14.6146,  # High noise (early steps - image structure)
    10.4708,
    7.3688,
    4.9651,   # Mid noise (detail formation)
    3.2924,
    2.1391,
    1.3633,   # Low noise (fine details)
    0.8437,
    0.4898,
    0.2279,
    0.0       # Final step
]

Compare to uniform schedule:

# Normal scheduler @ 10 steps
NORMAL_10 = [14.6146, 11.3, 8.7, 6.7, 5.1, 3.9, 3.0, 2.3, 1.7, 1.2, 0.0]
# More evenly spaced → less efficient

Troubleshooting

Q: Images look different with AYS?
A: Yes, they will differ slightly (different paths through noise space). Quality should be same or better. Adjust CFG if needed.

Q: AYS + multiscale?
A: Works great together! AYS optimizes step distribution, multiscale optimizes spatial resolution.

Q: Can I use AYS with euler_ancestral?
A: Yes! Works with all samplers (euler, euler_ancestral, dpmpp_2m_cfgpp, dpmpp_sde_cfgpp, etc.)

Q: How to verify it's active?
A: Check logs for "Using AYS optimal schedule" message.

References

  • Original paper: https://research.nvidia.com/labs/toronto-ai/AlignYourSteps/
  • Implementation: src/sample/ays_scheduler.py
  • Integration: src/sample/ksampler_util.py