ESPNThe best soccer/NFL crossover jerseys as PSG unveil kit for Steelers vs. Saints in ParisPunchSowore’s AAC seeks approval to inaugurate campaign council in Aso VillaThe Jerusalem PostRussia releases wrongfully detained US citizen Hubbard following Witkoff-Putin meetingDaily MaverickINTERVIEW: New EU envoy red-flags rigid BEE, SA’s Ukraine ‘double standard’, but hails ‘deeper’ tiesBollywood HungamaSaif Ali Khan begins shooting for Ritesh Batra’s period drama in Mumbai; details of new collaboration remain under wrapsInquirerKapunan: VP Duterte, Manases prenup, if any, will face scrutinyBBC News BrasilPesquisa Quaest, agenda de Flávio e Lula e outras notícias desta quarta-feira; sigaCollider‘Reacher’ Creator Calls Jack Reacher an Updated Version of Sherlock Holmes [Exclusive]South China Morning PostThe EU will ‘pull its punches’ on China despite growing trade war talk: analystsSCMP ChinaChinese mathematician Sun Zhiwei proposes 1,000 problems to challenge AIThe RegisterAI has 'potential' to turn script kiddies into sophisticated infrastructure attackersThe Hollywood ReporterDon’t Stop Believin’: ‘Glee’ Revival a Go at Disney+ and Hulu
The Daily Newsstand · Free, Always
Wednesday, October 21, 2026

Бесплатная оценка погрешности и скрытая мощь SA-Solver в ComfyUI: почему адаптивный шаг проиграл, а стохастика победила

Translate

Каждый, кто заглядывал в выпадающий список сэмплеров в ComfyUI, видел десятки названий: euler, dpmpp_2m, uni_pc, sa_solver. Большинство пользователей переключают их вслепую, полагаясь на субъективные впечатления.

Между тем, за каждым сэмплером стоит строгая математика численного интегрирования дифференциальных уравнений (ODE и SDE). Мы с соавтором Егором Юзвинским (который обеспечил проект вычислительными мощностями и участвовал в редактуре экспериментов) задались двумя вопросами:

  1. Можно ли в многошаговых схемах диффузии извлекать оценку локальной погрешности с нулевой стоимостью по NFE?

  2. Почему встроенная реализация SA-Solver в ComfyUI выдает отличную геометрию, но зажата в тиски захардкоженных параметров?

В этой статье мы разберем математику схемы «предиктор–корректор» Адамса, раскроем силу стохастики SA-Solver и честно покажем, почему красивые академические гипотезы (вроде адаптивного шага) с треском разбиваются о реалии продакшн-пайплайнов с высоким CFG.

1. Бесплатная погрешность: схема предиктора-корректора

Классический многошаговый метод Адамса–Башфорта–Моултона состоит из двух фаз:

  1. Предиктор (Adams–Bashforth): явный шаг экстраполяции состояния на основе накопленных производных за предыдущие шаги:

    \hat{x}_{n+1} = x_n + h \sum_{j=0}^{k-1} \beta_j f(x_{n-j}, t_{n-j})
  2. Корректор (Adams–Moulton): неявное уточнение состояния с учетом производной в предсказанной точке:

    x_{n+1} = x_n + h \left( \beta^* f(\hat{x}_{n+1}, t_{n+1}) + \sum_{j=0}^{k-2} \beta_j^* f(x_{n-j}, t_{n-j}) \right)

В вычислительной математике норма разности между предсказанным и скорректированным значением:

\tau_{n+1} = \|x_{n+1} - \hat{x}_{n+1}\|

является асимптотически точной оценкой локальной погрешности усечения (Local Truncation Error).

В обычных задачах ради корректора приходится делать дополнительное вычисление функции f. Но в диффузионных моделях эта вычисленная производная всё равно потребуется на следующем шаге как история!

Это означает, что оценка локальной погрешности достается нам абсолютно бесплатно (0 дополнительных вызовов нейросети, 0 NFE).

Мы вывели эту оценку наружу в ноде Trajectory Probe, которая сохраняет траектории, нормы производных, кривизну и погрешность прямо в .safetensors.

2. Главная практическая находка: вызволение SA-Solver

В ядре ComfyUI уже присутствует сэмплер sa_solver (Xue et al., NeurIPS 2023). Его ключевая особенность: он применяет предиктор-корректор Адамса только к слагаемому дрейфа (drift), а диффузионную часть рассчитывает отдельно, укладываясь ровно в 1 NFE на шаг.

Однако в ComfyUI он вызывается так:

# Внутренности ComfyUI:
tau_func = None  # Сила стохастики жестко зашита на eta = 1.0 в окне [0.2, 0.8]

Изменить силу стохастики \eta или границы окна через стандартные ноды было физически невозможно.

Мы реализовали ноду Adaptive SA Sampler, которая открывает и границы окна шума. При дефолтных параметрах (eta = 1.0, response = 0.0, окно 0.2–0.8) она побитово воспроизводит оригинальный sa_solver (максимальная разница: 0.000\times 10^0).

Эксперимент: геометрия против микрорельефа

Мы провели замеры на модели Anima (Flow-Matching DiT), разрешение 768×1024, CFG 5.0, планировщик normal, бюджет всего 10 шагов (10 NFE):

  • Геометрия — RMS отклонение от 100-шагового эталона euler после 8× пулинга (чем ниже, тем точнее анатомия и крупные формы).

  • Текстура — RMS высокочастотного остатка (сошедшийся эталон SDE на 30 шагах дает 0.3335).

Сэмплер

Геометрия (меньше = лучше)

Текстура (микрорельеф)

Сокращение разрыва до 30 шагов

euler (ODE)

0.3677

0.1368

—

euler_ancestral (SDE без корректора)

0.4016

0.1318

—

sa_solver (базовый, \eta = 1.0)

0.3516

0.2244

0%

Adaptive SA Sampler (\eta = 1.4)

0.3865

0.2503

24%

Adaptive SA Sampler (\eta = 1.8)

0.4225

0.2885

59%

Adaptive SA Sampler (\eta = 2.0)

0.4541

0.2975

67% (артефакты)

Вывод: Благодаря корректору дрейфа стохастический sa_solver дает макро-геометрию лучше, чем детерминированный Euler при том же бюджете, сохраняя при этом на 64% больше микротекстуры.

Рабочий диапазон eta:

  • При росте с 1.0 до 1.4 мы получаем +0.74 единицы текстуры за единицу потерянной геометрии.

  • В диапазоне 1.4 → 1.8 коэффициент обмена достигает пика: 1.06. Закрывается 59% разрыва до 30-шагового рендера.

  • При \eta > 1.8 наступает обвал курса (0.28): тонкие структуры (ресницы, жилки листьев) начинают разваливаться в шумы.

Оптимальный диапазон: eta = 1.6–1.8.

3. Честные отрицательные результаты (Что НЕ сработало)

В академических статьях редко пишут о неудачах, но в инженерной практике они экономят недели работы:

1. Адаптивный шаг уступил планировщику normal

Мы создали сэмплер с адаптивным шагом (apc_* в режиме budget), который перераспределял временную сетку шагов пропорционально локальной погрешности. Равномерную сетку он обошел с большим отрывом. Но когда мы сравнили его со стандартным эвристическим планировщиком ComfyUI normal… адаптивный сэмплер показал лишь 0.81–0.99× от его точности. Полиномиальные расписания учитывают скорость семантического схлопывания дисперсии латентов, чего не видит локальная ошибка интегрирования ODE.

2. Окно шума расширять бессмысленно

Сдвиг окна шума с 0.2–0.8 на 0.1–0.9 ухудшил геометрию на 20% и дал ровно ноль дополнительной текстуры (0.2244 → 0.2225). Шум на высоких сигмах полностью вымывается последующим интегрированием, а на низких сигмах сети просто не хватает оставшихся шагов, чтобы распутать его в детали.

3. Высокие порядки бесполезны при высоком CFG

При CFG 1.0 методы 4-го порядка бьют Euler в 1.30–1.52 раза. Но на рабочих значениях CFG 5.0 выигрыш падает до 1.01–1.04×, а при CFG 8.0 исчезает вовсе. Ошибка усечения просто тонет в шуме вектора классификаторной экстраполяции.

4. Реальный NFE популярных сэмплеров

Во время профилирования выяснилось, что многие сэмплеры в ComfyUI расходуют совсем не то количество шагов, на которое рассчитывают пользователи. Вот реальные замеры NFE на шаг:

  • Честные 1.0 NFE: sa_solver, euler_ancestral, res_multistep_ancestral, dpmpp_3m_sde, er_sde, deis.

  • 1.9 NFE (почти вдвое дороже): heun, seeds_2, dpmpp_sde.

  • 3.0 – 6.0 NFE: res_3s_ode (3.0), dpm_adaptive (3.0), res_5s_ode (5.0), res_6s_ode (6.0).

  • Ловушка для Flow-Matching: uni_pc жестко зашит на VP/eps (noise / sqrt(1 + sigma²)). На моделях вроде Flux или Anima он выдает колоссальную ошибку (6.86 против 0.63 у Euler).

Как попробовать

Репозиторий оформлен как стандартный custom node:

cd ComfyUI/custom_nodes/
git clone https://github.com/YakovSava/adaptive-step-samplers.git

Никаких сторонних библиотек — только штатные torch, numpy и safetensors.

Для генерации используйте ноду Adaptive SA Sampler со следующими параметрами:

  • eta: 1.6–1.8;

  • response: 0.0;

  • stochastic_start: 0.2;

  • stochastic_end: 0.8;

  • Планировщик: normal.

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.