# MiniMaxH3Scheduler

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

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

## MiniMaxH3Scheduler[[diffusers.MiniMaxH3Scheduler]]

#### diffusers.MiniMaxH3Scheduler[[diffusers.MiniMaxH3Scheduler]]

```python
diffusers.MiniMaxH3Scheduler(shift: float = 12.0, stochastic_sampling: bool = False, shift_provided_sigmas: bool | None = None, euler_update_form: str = 'blend')
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_minimax_h3.py#L73)

**Параметры:**

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`, *optional*) : Указывает, являются ли явные `sigmas`, переданные в [set_timesteps()](/docs/diffusers/main/ru/api/schedulers/minimax_h3#diffusers.MiniMaxH3Scheduler.set_timesteps), базовой сеткой, которую планировщик сдвигает (как его сетку `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[[diffusers.MiniMaxH3Scheduler.index_for_timestep]]

```python
index_for_timestep(timestep: typing.Union[float, torch.Tensor])
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_minimax_h3.py#L225)

**Параметры:**

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

**Возвращает:** `int`

Индекс `timestep`.

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

#### scale_noise[[diffusers.MiniMaxH3Scheduler.scale_noise]]

```python
scale_noise(sample: FloatTensor, timestep: typing.Union[float, torch.FloatTensor], noise: FloatTensor)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_minimax_h3.py#L246)

**Параметры:**

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[[diffusers.MiniMaxH3Scheduler.set_begin_index]]

```python
set_begin_index(begin_index: int = 0)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_minimax_h3.py#L138)

**Параметры:**

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

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

#### set_shift[[diffusers.MiniMaxH3Scheduler.set_shift]]

```python
set_shift(shift: float)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_minimax_h3.py#L148)

**Параметры:**

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

Переопределяет настроенный сдвиг сигмы; вызывается перед [set_timesteps()](/docs/diffusers/main/ru/api/schedulers/minimax_h3#diffusers.MiniMaxH3Scheduler.set_timesteps).

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

#### set_timesteps[[diffusers.MiniMaxH3Scheduler.set_timesteps]]

```python
set_timesteps(num_inference_steps: int | None = None, device: typing.Union[str, torch.device, NoneType] = None, sigmas: typing.Union[list[float], torch.Tensor, NoneType] = None)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_minimax_h3.py#L162)

**Параметры:**

num_inference_steps (`int`, *optional*) : Количество точек сетки сигма, включая конечную `0`. Игнорируется, если задано `sigmas`.

device (`str` или `torch.device`, *optional*) : Устройство, на которое переносятся тензоры расписания. Сама сетка всегда строится на 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]`.

#### шаг[[diffusers.MiniMaxH3Scheduler.step]]

```python
step(model_output: FloatTensor, timestep: typing.Union[float, torch.FloatTensor], sample: FloatTensor, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_minimax_h3.py#L278)

**Параметры:**

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]]

#### diffusers.schedulers.scheduling_minimax_h3.MiniMaxH3SchedulerOutput[[diffusers.schedulers.scheduling_minimax_h3.MiniMaxH3SchedulerOutput]]

```python
diffusers.schedulers.scheduling_minimax_h3.MiniMaxH3SchedulerOutput(prev_sample: FloatTensor)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_minimax_h3.py#L61)

**Параметры:**

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

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

