ArtificialGuyBR

Home / Blog / Prompting and control

Samplers e Schedulers no Stable Diffusion explicados

Escolha o sampler certo para SD1.5, SDXL e Flux — determinístico vs. estocástico, trade-offs de passos e configurações do scheduler.

11 sources cited Prompting and control

Samplers e Schedulers no Stable Diffusion explicados

TL;DR

  • Cada sampler é determinístico (converge para uma imagem) ou estocástico (continua mudando com mais passos). Use determinístico para reprodutibilidade; use estocástico para variação criativa.
  • O scheduler (schedule de ruído) controla quanta ruído o modelo remove em cada passo. A fórmula Karras concentra reduções menores no fim, melhorando detalhe — funciona com a maioria dos samplers modernos.
  • Para SDXL, um bom ponto de partida é DPM++ 2M Karras com 20–30 passos e CFG 5–8. Para Flux, use Euler com scheduler Simple e CFG 1.0 (o guidance fica no nó FluxGuidance, ~3,5).

O que um sampler e um scheduler fazem de verdade

Em qualquer modelo de Stable Diffusion, a denoising começa com uma imagem latente aleatória. O ruído preditor estima o ruído em cada passo. O sampler subtrai ele — o algoritmo numérico que leva o latente da bagunça para uma imagem limpa. O scheduler especifica quanta ruído deveria restar em cada passo. Juntos eles formam a trajetória de denoising. (stable-diffusion-art.com)

Mais passos significam reduções de ruído menores entre passos, reduzindo o erro de truncamento. (stable-diffusion-art.com)


Correção: o que LMS significa

Uma referência popular expande LMS como Laplacian Pyramid Sampling. O nome real é Linear Multi-Step method — um solver de ODE padrão que usa o histórico de estimativas de derivada anteriores para melhorar a convergência. (stable-diffusion-art.com)


Determinístico vs. estocástico: o split fundamental

Samplers determinísticos

Euler é o sampler mais direto. Em cada passo ele subtrai o ruído multiplicado pelo schedule, seguindo uma trajetória ODE fixa. Com a mesma seed e quantidade de passos, Euler sempre gera a mesma imagem. (stable-diffusion-art.com) Esse comportamento determinístico também torna Heun (segundo ordem, duas vezes mais lento) e LMS (multi-step) previsíveis: eles convergem para uma saída estável à medida que aumenta a quantidade de passos. (stable-diffusion-art.com)

DPM++ 2M é uma variante multi-step da família DPM-Solver++. O "2M" significa two-step multi-step — usa a estimativa de denoising anterior para calcular o passo atual, convergindo mais rápido por avaliação de rede do que Euler puro. (Lu et al., 2022) A implementação k-diffusion confirma: sample_dpmpp_2m acompanha old_denoised ao longo dos passos e usa uma razão r para interpolar entre a previsão atual e a anterior.

Samplers estocásticos

Euler a (Euler ancestral) subtrai mais ruído do que o schedule exige, depois adiciona ruído aleatório para compensar. Cada passo depende de uma amostra aleatória específica, então o resultado muda a cada execução, mesmo com a mesma seed. (stable-diffusion-art.com) Os samplers ancestrais — aqueles com sufixo "a": Euler a, DPM2 a, DPM++ 2S a — nunca convergem: aumentar a quantidade de passos continua mudando a imagem em vez de estabilizá-la. (stable-diffusion-art.com)

DPM++ SDE e DPM++ 2M SDE pertencem à mesma classe estocástica, mas usam equações diferenciais estocásticas que injetam ruído de processo Wiener por um sampler de árvore Brownian. A implementação k-diffusion chama BrownianTreeNoiseSampler a cada passo e aplica um parâmetro eta que controla quanta SDE adicionar. Esses samplers não convergem e mostram resultados flutuantes conforme a quantidade de passos muda. (stable-diffusion-art.com)

Por que isso importa

Se você precisa de saída reprodutível — mesma seed, mesma imagem toda vez — use samplers determinísticos. Se quer variação criativa com um único prompt, samplers estocásticos entregam isso. O trade-off é convergência: samplers determinísticos se estabilizam com passos suficientes; os estocásticos não. (stable-diffusion-art.com)


A família DPM-Solver: o que cada nome significa

A linha DPM-Solver foi publicada por Lu et al. (2022) e melhorada em DPM-Solver++. As convenções de nome:

NomeSignificadoOrdemVelocidade vs EulerFonte
DPM2DPM-Solver ordem 22nd~2× mais lento (duas chamadas de rede por passo)arXiv:2206.00927
DPM2 aDPM-Solver ordem 2, ancestral2nd~2× mais lento + estocásticoarXiv:2206.00927
DPM FastDPM-Solver com tamanhos de passo uniformes1st~1× (uma chamada por passo)arXiv:2206.00927
DPM AdaptiveDPM-Solver com dimensionamento adaptativo de passo1st–3rdVariável — ignora a contagem de passosarXiv:2206.00927
DPM++ 2MDPM-Solver++ two-step multistep2nd~1× (reuso da avaliação anterior)arXiv:2211.01095
DPM++ 2M SDEDPM++ 2M com ruído estocástico2nd~1× + estocásticoarXiv:2211.01095
DPM++ 2S aDPM-Solver++ two-step single-step ancestral2nd~2× + estocásticoarXiv:2211.01095
DPM++ 3M SDEDPM-Solver++ three-step multistep SDE3rd~1× + estocásticoarXiv:2211.01095
DPM++ 2M SDE HeunDPM++ 2M SDE usando Heun (midpoint) como substep2nd~1× + estocásticoarXiv:2211.01095

A biblioteca Hugging Face diffusers usa algorithm_type="dpmsolver++" por padrão e recomenda solver_order=2 para sampling guiado do Stable Diffusion. (diffusers source)


Scheduler: Karras, Simple e a curva de ruído

O scheduler determina a forma da curva de redução de ruído — quais níveis de ruído o modelo visita e em que ordem.

SchedulerO que fazQuando usarFonte
KarrasConcentra passos no fim (baixo ruído), reduzindo erro de truncamento onde mais importa para o detalheA maioria dos samplers, a maioria dos modelos — o padrão seguroarXiv:2206.00364
Linear (padrão)Níveis de ruído espaçados uniformemente do máximo a zeroPipelines mais antigos; ainda funciona para muitos casos—
ExponentialTamanhos de passo decrescentes exponencialmenteAlguns workflows especializados; raramente o melhor padrão—
SimpleUsado por modelos da família FluxSempre com Flux; não para SD1.5/SDXLlocalaimaster.com
DDIMPassos uniformes, usado especificamente pelo sampler DDIMApenas sampler DDIMarXiv:2010.02502
BetaSchedule em forma de distribuição BetaNicho; ocasionalmente usado com DDIM—

Recomendações por modelo

SD 1.5

Para SD 1.5, a maioria dos samplers modernos funciona bem com 20–30 passos. A decisão principal é se você quer saída determinística ou estocástica.

Caso de usoSamplerPassosSchedulerNotasFonte
Geral, reproduzívelDPM++ 2M Karras20–30KarrasConvergência rápida; amplamente usadostable-diffusion-art.com
Geral, variadoDPM++ 2S a Karras20–30KarrasEstocástico; imagem diferente a cada execuçãostable-diffusion-art.com
Pré-visualização rápidaEuler10–15Karras ou LinearSimples, converge rapidamentestable-diffusion-art.com
Qualidade a custoHeun15–20Karras2× mais lento por passo devido à avaliação de segunda ordemstable-diffusion-art.com
One-shot/mais rápidoUniPC5–15KarrasAlta qualidade em poucos passosarXiv:2302.04867

SDXL

A arquitetura maior do SDXL se beneficia dos mesmos samplers, mas é mais sensível à quantidade de passos e às configurações CFG. O card do modelo Stable Diffusion XL da Stability AI recomenda a pipeline base+refiner com 40 passos e divisão de ruído 80/20. (SDXL model card)

Um ponto de partida prático para SDXL:

Caso de usoSamplerPassosCFGSchedulerNotasFonte
Qualidade equilibradaDPM++ 2M Karras20–305–8KarrasMais amplamente recomendadostable-diffusion-art.com
Com refinerDPM++ 2M Karras40 (80/20)5–7KarrasCorresponde ao exemplo da Stability AISDXL model card
Iteração rápidaEuler15–205–7KarrasConverge bem, ciclo de feedback rápidostable-diffusion-art.com

Flux

Flux usa rectified flow em vez do schedule de ruído de epsilon-prediction dos SD 1.5/SDXL. Isso muda completamente a escolha de sampler e scheduler. Como documentado no ComfyUI Flux workflow guide:

  • Sampler: Euler
  • Scheduler: Simple
  • CFG: 1.0 (o guidance fica no nó FluxGuidance, padrão 3,5)
  • Steps: 20 para Flux.1 dev

Definir CFG acima de 1.0 clareia a imagem porque Flux assa o guidance nos pesos do modelo, não no multiplicador CFG. (localaimaster.com) Múltiplos profissionais confirmam a configuração Euler/Simple/CFG-1.0 em Forge, ComfyUI e no guia sobre Flux em andreaskuhr.com.


Como a quantidade de passos interage com a escolha do sampler

Para samplers determinísticos, mais passos significam reduções de ruído menores entre passos, o que reduz o erro de truncamento e ajuda a imagem a convergir. (stable-diffusion-art.com) Para samplers estocásticos — qualquer um com sufixo "a" ou "SDE" no nome —, passos adicionais continuam introduzindo aleatoriedade. A imagem continua mudando. (stable-diffusion-art.com) O paper DPM-Solver mostra que DPM-Solver alcança 4,70 FID em CIFAR-10 em 10 avaliações de função, alcançando alta qualidade em 15–20 passos com DPM-Solver++ para amostragem guiada. (Lu et al., 2022)


DDIM e PLMS: os originais

DDIM (Song et al., 2020) foi um dos primeiros samplers práticos, alcançando aceleração de 10–50× sobre DDPM usando um processo reverso não-Markovian. PLMS (Pseudo Linear Multi-Step) saiu junto com ele na versão original do Stable Diffusion. Ambos são hoje considerados ultrapassados — o guia stable-diffusion-art.com os descreve como "generally seen as outdated and not widely used anymore". (stable-diffusion-art.com) Se você os usa por hábito, trocar para DPM++ 2M Karras entrega igual ou melhor qualidade com menos passos.


Common Errors and Fixes

SintomaCausa provávelCorreção
Image looks washed out with FluxCFG set above 1.0Set KSampler CFG to 1.0; use FluxGuidance node for guidance
Image keeps changing with more stepsUsing a stochastic samplerSwitch to a deterministic sampler (Euler, DPM++ 2M)
Artifacts or garbled output with FluxDualCLIPLoader type set to SDXLChange type to "flux"
Strange colors or high-contrast outputWrong VAE selectedUse the model's native VAE (Flux: ae.safetensors)
Poor prompt adherence at low CFG with SDXLCFG too low for the samplerRaise CFG to 5–8, or switch to a sampler designed for lower CFG

FAQ

What is the difference between deterministic and stochastic samplers?

Deterministic samplers (Euler, DPM++ 2M, Heun, LMS) follow a fixed ODE trajectory — given the same seed and settings, they always produce the same image. Stochastic samplers (Euler a, DPM2 a, DPM++ 2S a, DPM++ SDE variants) inject random noise at each step, so the output changes with every run. (stable-diffusion-art.com)

Why do samplers with an "a" suffix not converge?

The "a" stands for ancestral. These samplers subtract more noise than the schedule requires and add random noise back to compensate. This makes each step dependent on previous random samples, preventing the image from settling to a fixed point even at high step counts. (stable-diffusion-art.com)

How many steps should I use with DPM++ 2M Karras for SDXL?

The DPM-Solver++ paper demonstrates high-quality results in 15–20 steps. For SDXL, 20–30 steps is a practical range. More steps yield diminishing returns once the noise schedule reaches the low-noise region. (Lu et al., 2022)

Do higher steps always improve detail in latent diffusion?

For deterministic samplers, higher steps reduce truncation error, which generally improves fidelity — but the gains plateau. For stochastic samplers, additional steps do not converge; they keep changing the image. The scheduler shape (e.g., Karras) can matter more than raw step count. (stable-diffusion-art.com, Karras et al. (2022))

When should I use DDIM instead of DPM++?

In most cases, you should not. DDIM was one of the first practical diffusion samplers but is now outperformed by DPM-Solver++ variants in both speed and quality. (stable-diffusion-art.com) The main remaining use case is workflows that require the specific DDIM noise schedule (uniform steps).

What sampler and settings does Flux use?

Flux.1 dev uses Euler with the Simple scheduler at CFG 1.0. Guidance is set separately through the FluxGuidance node (default 3.5). Using CFG above 1.0 produces washed-out images because Flux bakes classifier-free guidance into the model. (localaimaster.com, andreaskuhr.com)