# MiniMaxH3Scheduler

`MiniMaxH3Scheduler`는 [MiniMax-H3](https://huggingface.co/MiniMaxAI)에서 사용하는 지수 시그마 시프트가 적용된 rectified-flow Euler 스케줄러(`eta = 0`)이며, `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)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_minimax_h3.py#L68)

**매개변수:**

shift (`float`, 기본값 `12.0`) : 시그마 그리드에 적용되는 지수 이동, `sigma' = s*sigma / (1 + (s-1)*sigma)`. 공개된 체크포인트는 비디오 라텐트에 `12.0`, 오디오 라텐트에 `3.0`를 사용합니다.

stochastic_sampling (`bool`, 기본값은 `False`) : Euler 블렌드를 재노이즈 업데이트로 대체합니다. 클린 샘플을 예측한 후, 새로운 노이즈를 사용하여 다음 시그마로 재노이즈합니다. 몇 단계 Pika H3 Flex 어댑터는 이 업데이트를 위해 학습되었지만, 기본 체크포인트는 그렇지 않습니다.

shift_provided_sigmas (`bool`, *선택 사항*) : [set_timesteps()](/docs/diffusers/main/ko/api/schedulers/minimax_h3#diffusers.MiniMaxH3Scheduler.set_timesteps)에 전달된 명시적인 `sigmas`가 스케줄러가 `linspace` 그리드처럼 이동시키는 기본 그리드인지, 아니면 그대로 사용하는 완성된 스케줄인지 여부를 나타냅니다. 설정하지 않으면 비추천 경고와 함께 그대로 사용되며, 0.44.0부터 기본값은 `True`가 됩니다.

MiniMax-H3에서 사용하는 지수 시그마 시프트가 적용된 Rectified-flow Euler 스케줄러(`eta = 0`)

#### 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#L205)

**매개변수:**

timestep (`float` 또는 `torch.Tensor`) : `self.timesteps`에서 가져온 값입니다. 스케줄은 `t`에 대해 엄격히 증가하므로 매칭은 유일합니다.

**반환값:** `int`

`timestep`의 인덱스.

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#L226)

**매개변수:**

sample (`torch.FloatTensor`) : 깨끗한 샘플 `x_0`.

timestep (`float` 또는 `torch.FloatTensor`) : `[0, 1]` 범위의 목표 시간; `1`을 반환하면 `sample`이 변경되지 않은 상태로 반환됩니다.

noise (`torch.FloatTensor`) : 혼합할 노이즈.

**반환값:** `torch.FloatTensor`

노이즈가 추가된 샘플.

MiniMax-H3의 `t` 규약에 따른 Rectified-flow 순방향 과정: `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#L118)

**매개변수:**

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#L128)

**매개변수:**

shift (`float`) : 다음 스케줄에 사용할 지수적 시프트 값.

구성된 sigma shift를 재정의합니다. [set_timesteps()](/docs/diffusers/main/ko/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#L142)

**매개변수:**

num_inference_steps (`int`, *선택 사항*) : 시그마 그리드 포인트의 개수입니다. 끝점 `0`을 포함합니다. `sigmas`가 주어지면 무시됩니다.

device (`str` 또는 `torch.device`, *선택 사항*) : 스케줄 텐서가 이동될 장치입니다. 그리드 자체는 항상 CPU에서 float32로 생성되므로 스케줄은 가속기에 의존하지 않습니다.

sigmas (`list[float]` 또는 `torch.Tensor`, *선택 사항*) : `0.0`에서 끝나는 엄격히 감소하는 명시적 그리드입니다. `shift_provided_sigmas=True`인 경우 `linspace` 그리드와 마찬가지로 시프트를 거치는 `[0, 1]` 범위의 기본 그리드입니다. 그렇지 않은 경우 그대로 사용되며(비권장 기본값)

sigma / timestep 스케줄을 구성합니다.

그리드는 `linspace(1, 0, num_inference_steps)`를 지수 시프트를 통과시켜 생성하며, 연속된 중복 값은 제거합니다. 또는 `shift_provided_sigmas`가 설정된 경우에도 동일한 시프트가 적용되는 명시적인 `sigmas`를 사용할 수 있습니다. 종단 `0`은 이미 그리드의 일부입니다 — 시프트는 `0`을 정확히 `0`으로 매핑하므로 — 스케줄은 `num_inference_steps`개의 시그마를 포함하고 `num_inference_steps - 1`번의 모델 평가를 수행하며, 이는 `self.timesteps = 1 - sigmas[:-1]`로 노출됩니다.

#### step[[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#L258)

**매개변수:**

model_output (`torch.FloatTensor`) : `timestep`에서의 transformer 속도 예측 값.

timestep (`float` 또는 `torch.FloatTensor`) : 현재 timestep으로, `self.timesteps` 중 하나입니다(즉, `timestep == 1 - sigma`).

sample (`torch.FloatTensor`) : 현재 샘플 `x_t`.

generator (`torch.Generator`, *선택 사항*) : `stochastic_sampling`을 통해 새로운 노이즈를 추출할 때 사용하는 생성기입니다. 다른 경우에는 사용되지 않습니다.

return_dict (`bool`, 기본값 `True`) : 일반 튜플 대신 `MiniMaxH3SchedulerOutput`를 반환할지 여부.

**반환값:** `MiniMaxH3SchedulerOutput` 또는 `tuple`

다음 단계의 샘플입니다.

Euler(`eta = 0`) 단계 하나, 또는 `stochastic_sampling`을 사용한 재노이즈(re-noising) 단계 하나를 수행합니다.

모델 출력은 데이터 방향의 속도이므로, 노이즈 제거 추정치는 `x0 = x_t + (1 - t) * v`입니다 — `+` 기호에 유의하세요. 이는 일반적인 flow-match 규약과 반대입니다. 업데이트는 `r = sigma_next / sigma`를 사용하여 `x_next = r*x_t + (1 - r)*x0`의 혼합으로 수행되며, 반정밀도 샘플의 경우 float32로 계산됩니다. `stochastic_sampling`이 사용되면 업데이트는 `generator`에서 생성된 새로운 노이즈를 사용하여 `x_next = (1 - sigma_next) * x0 + sigma_next * noise`가 되며, 모든 연산은 float32로 수행됩니다. 따라서 마지막 단계(`sigma_next = 0`)에서는 `x0`가 반환됩니다.

## 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#L56)

**매개변수:**

prev_sample (`torch.FloatTensor`) : 디노이징 루프의 다음 단계에 사용할 계산된 샘플 `x_{t+1}`.

스케줄러의 `step` 함수 출력을 위한 출력 클래스입니다.

