Diffusers documentation
MiniMaxH3Scheduler
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
< source >( shift: float = 12.0stochastic_sampling: bool = Falseshift_provided_sigmas: bool | None = None )
Параметры
- 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-планировщик rectified-flow (eta = 0) с экспоненциальным сдвигом сигмы, как используется в MiniMax-H3.
index_for_timestep
< source >( timestep: typing.Union[float, torch.Tensor] ) → int
Соответствие значения шага времени его индексу в расписании.
scale_noise
< source >( sample: FloatTensortimestep: typing.Union[float, torch.FloatTensor]noise: 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
< source >( begin_index: int = 0 )
Устанавливает начальный индекс для планировщика.
set_shift
< source >( shift: float )
Переопределяет настроенный сдвиг сигмы; вызывается перед set_timesteps().
MiniMax-H3 предоставляет этот параметр для каждого запроса как flow_shift (видео) / audio_flow_shift (аудио).
set_timesteps
< source >( 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].
шаг
< source >( 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.
MiniMaxH3SchedulerOutput
класс diffusers.schedulers.scheduling_minimax_h3.MiniMaxH3SchedulerOutput
< source >( prev_sample: FloatTensor )
Класс результата для вывода функции step планировщика.