Запуск сэмплера dpmpp_dualsde_momentumized из набора ComfyUI-Extra-Samplers на flow-модели Anima выдал бледно-голубой силуэт вместо рисунка, тогда как dpmpp_2m_sde_gpu на том же промпте даёт чистую картинку. Автор разобрал причину сбоя и проверил, существует ли «momentum», который действительно снижает ошибку при том же числе вызовов сети.
Поломка оказалась не в momentum: через обычный KSampler его коэффициент равен нулю. Сэмплер написан под variance-exploding модели, и на flow-модели шаг добавления шума имеет неверную дисперсию: при eta = 1 латент разрастается (std 3–4,5 вместо 1,2). Сам «momentum» там — экспоненциальное скользящее среднее предсказания данных.
Автор нашёл и вторую ошибку: сэмплер делает полный шаг 2S, уже содержащий второй порядок, и сверху добавляет многошаговую поправку 3M, из-за чего поправка считается дважды. В цикле переменная r перезаписывается внутри функции, и середина стадии 2S уезжает с 1/2. Механизм поломки на flow-модели отдельным экспериментом не изолирован.
Положительный коэффициент momentum работает как фильтр нижних частот: он добавляет запаздывание и портит результат, ошибка растёт до 61%. С отрицательным коэффициентом та же рекурсия становится устойчивой экстраполяцией и снижает ошибку на 11–21% при том же числе шагов в детерминированном случае. Это примерно в 1,2 раза меньше шагов при той же ошибке, а не вдвое; рекурсия устойчива только при |m| < 1.
Замеры проводились на Anima (bf16, 576×768, CFG 5) на 15 юнитах — 5 промптов на 3 сида — при 8–24 вызовах сети, с парными бутстреп-интервалами. Из девяти заранее зарегистрированных гипотез подтвердились четыре, пять опровергнуты, включая первую гипотезу о вине поправки 3M. Положительный momentum вредил всегда.
В случае с шумом сильный отрицательный momentum перестаёт помогать: экстраполяция усиливает ошибку от непредсказуемого шума. Демпфированная экстраполяция (beta = 0,5) дала на 7–10% меньшую ошибку, чем dpmpp_2m_sde, а мягкий ema с m = −0,3 — на 6–15%. На настройках исходной проблемы (CFG 8, 1216×832) мягкий ema всё равно давал синий оттенок, а демпфированная экстраполяция — нет.
Лучший вариант с одним вызовом на шаг обходит двухвызовный dpmpp_sde при том же NFE на 16–29%. Статическая сетка шагов из прошлого исследования не помогла отложенному промпту и сломала 8-шаговую картинку при CFG 8. Автор выложил код с 13 тестами на CPU и README; после установки пакета в списке сэмплеров появляются ddim_momentum и dpmpp_2m_sde_damped, а записи _momentumized для 19 существующих сэмплеров на модели не оценивались — при дымовом запуске lms_momentumized и ipndm_v_momentumized дали латент со std около 10.