Diffusers documentation

MiniMaxH3Scheduler

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

MiniMaxH3Scheduler

MiniMaxH3Scheduler — это планировщик rectified-flow Euler (eta = 0) с экспоненциальным сдвигом сигмы, используемый в MiniMax-H3: sigma' = s * sigma / (1 + (s - 1) * sigma).

Пайплайны MiniMax-H3 регистрируют два из них, поскольку латенты видео и аудио следуют по двум разным расписаниям внутри одного вызова трансформера на каждом шаге: scheduler несёт расписание для видео (shift=12.0 в выпущенных чекпоинтах), а audio_scheduler — для аудио (shift=3.0).

MiniMaxH3Scheduler

класс diffusers.MiniMaxH3Scheduler

< >

( shift: float = 12.0stochastic_sampling: bool = Falseshift_provided_sigmas: bool | None = Noneeuler_update_form: str = 'blend' )

Параметры

  • shift (float, по умолчанию 12.0) — Экспоненциальный сдвиг, применяемый к сетке сигм, sigma' = s*sigma / (1 + (s-1)*sigma). В опубликованных чекпоинтах для латентов видео используется значение 12.0, а для латентов аудио — 3.0.
  • stochastic_sampling (bool, по умолчанию False) — Заменяет смешивание Эйлера обновлением с повторным шумом: предсказывает чистый образец, затем добавляет к нему новый шум до следующего сигмы. Адаптеры Pika H3 Flex для малых шагов обучались именно для этого обновления; базовые контрольные точки — нет.
  • shift_provided_sigmas (bool, необязательный) — Определяет, являются ли явно переданные в set_timesteps() sigmas базовой сеткой, которую планировщик сдвигает (аналогично его сетке linspace), или готовым расписанием, используемым без изменений. Если параметр не задан, значения применяются без изменений, но выводится предупреждение о предстоящем устаревании; начиная с версии 0.44.0 значением по умолчанию станет True.
  • euler_update_form (str, по умолчанию "blend") — Способ вычисления обновления по Эйлеру. "blend" — это смешивание x_t / x0 x_next = r*x_t + (1 - r)*x0; "velocity" — это x_next = x_t + (sigma - sigma_next) * v, в float32. Это одно и то же обновление, различающееся только округлением в float32; MiniMax-H3-Image был дистиллирован с использованием формы velocity.

Euler-планировщик rectified-flow (eta = 0) с экспоненциальным сдвигом сигмы, как используется в MiniMax-H3.

index_for_timestep

< >

( timestep: typing.Union[float, torch.Tensor] ) → int

Параметры

  • timestep (float или torch.Tensor) — Значение, взятое из self.timesteps. Расписание строго возрастает по t, поэтому совпадение единственно.

Возвращает

int

Индекс timestep.

Соответствие значения шага времени его индексу в расписании.

scale_noise

< >

( sample: FloatTensortimestep: typing.Union[float, torch.FloatTensor]noise: FloatTensor ) → torch.FloatTensor

Параметры

  • sample (torch.FloatTensor) — Чистая выборка x_0.
  • timestep (float или torch.FloatTensor) — Целевое время в диапазоне [0, 1]; значение 1 возвращает sample без изменений.
  • noise (torch.FloatTensor) — Шум, который нужно смешать.

Возвращает

torch.FloatTensor

Образец с шумом.

Прямой процесс rectified-flow в конвенции t для MiniMax-H3: x_t = t*x_0 + (1 - t)*noise.

MiniMax-H3 использует это для добавления шума к своим опорным точкам условий, где t — это уровень noise_aug, а не запись расписания, поэтому timestep берётся как есть и не ищется в self.timesteps.

set_begin_index

< >

( begin_index: int = 0 )

Параметры

  • begin_index (int, по умолчанию 0) — Начальный индекс для планировщика.

Устанавливает начальный индекс для планировщика.

set_shift

< >

( shift: float )

Параметры

  • shift (float) — Экспоненциальный сдвиг, используемый для следующего расписания.

Переопределяет настроенный сдвиг сигмы; вызывается перед set_timesteps().

MiniMax-H3 предоставляет этот параметр для каждого запроса как flow_shift (видео) / audio_flow_shift (аудио).

set_timesteps

< >

( num_inference_steps: int | None = Nonedevice: typing.Union[str, torch.device, NoneType] = Nonesigmas: typing.Union[list[float], torch.Tensor, NoneType] = None )

Параметры

  • num_inference_steps (int, необязательный) — Количество точек сетки сигм, включая конечную 0. Игнорируется, если задано sigmas.
  • device (str или torch.device, необязательный) — Устройство, на которое переносятся тензоры расписания. Сама сетка всегда строится на CPU в float32, чтобы расписание не зависело от ускорителя.
  • sigmas (list[float] или torch.Tensor, необязательный) — Явная сетка, строго убывающая и заканчивающаяся значением 0.0. При shift_provided_sigmas=True это базовая сетка в диапазоне [0, 1], которая проходит через сдвиг так же, как сетка linspace; в противном случае она используется как есть (устаревшее значение по умолчанию).

Постройте расписание сигма / временных шагов.

Сетка linspace(1, 0, num_inference_steps) проходит через экспоненциальный сдвиг, при этом последовательные дубликаты схлопываются, либо используется явная sigmas, которая также сдвигается, если задан shift_provided_sigmas. Конечное значение 0 уже входит в состав сетки — сдвиг отображает 0 точно в 0 — поэтому расписание содержит num_inference_steps сигм и управляет num_inference_steps - 1 оценками модели, которые представлены как self.timesteps = 1 - sigmas[:-1].

шаг

< >

( model_output: FloatTensortimestep: typing.Union[float, torch.FloatTensor]sample: FloatTensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → MiniMaxH3SchedulerOutput or tuple

Параметры

  • model_output (torch.FloatTensor) — Прогноз скорости трансформера на шаге timestep.
  • timestep (float или torch.FloatTensor) — Текущий шаг, один из self.timesteps (то есть timestep == 1 - sigma).
  • sample (torch.FloatTensor) — Текущая выборка x_t.
  • generator (torch.Generator, необязательный) — Генератор, из которого извлекается новый шум при stochastic_sampling; в остальных случаях не используется.
  • return_dict (bool, по умолчанию True) — Определяет, следует ли возвращать MiniMaxH3SchedulerOutput вместо обычного кортежа.

Возвращает

MiniMaxH3SchedulerOutput или tuple

пример для следующего шага.

Сделайте один шаг Эйлера (eta = 0) или один шаг повторного шумления с stochastic_sampling.

Вывод модели представляет собой скорость в данных, поэтому оценка после удаления шума равна x0 = x_t + (1 - t) * v — обратите внимание на знак +, который противоположен обычной конвенции flow-match. Затем обновление вычисляется как смешивание x_next = r*x_t + (1 - r)*x0, где r = sigma_next / sigma, при этом для образцов с половинной точностью вычисления выполняются в float32. При использовании stochastic_sampling обновление имеет вид x_next = (1 - sigma_next) * x0 + sigma_next * noise с новым шумом из generator, все вычисления выполняются в float32, поэтому на последнем шаге (sigma_next = 0) возвращается x0. При euler_update_form="velocity" то же самое обновление Эйлера вычисляется как x_next = x_t + (sigma - sigma_next) * v в float32.

MiniMaxH3SchedulerOutput

класс diffusers.schedulers.scheduling_minimax_h3.MiniMaxH3SchedulerOutput

< >

( prev_sample: FloatTensor )

Параметры

  • prev_sample (torch.FloatTensor) — Вычисленная выборка x_{t+1} для следующего шага цикла денойзинга.

Класс результата для вывода функции step планировщика.

Update on GitHub