Diffusers documentation

MiniMaxH3Transformer3DModel

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

MiniMaxH3Transformer3DModel

MiniMax에서 MiniMax-H3를 통해 소개된, 비디오와 오디오를 함께 생성하는 Diffusion Transformer 모델입니다.

MiniMax-H3은 텍스트 조건부, 조건부 이미지 및 비디오 행, 오디오 행, 대상 비디오 행을 동시에 포함하는 하나의 패킹된 1차원 시퀀스 위에 단일 블록 스택을 실행합니다. 어텐션은 해당 시퀀스에 대한 완전한 셀프 어텐션(full self-attention)이므로 크로스 어텐션이나 모달리티별 블록 가중치가 없습니다. 모달리티별 동작은 두 개의 입력 패치 투영, AdaLN 변조 매개변수를 선택하는 행별 모달리티 태그, 그리고 두 개의 출력 헤드에서만 비롯됩니다.

packed layout를 구성하는 것은 호출자의 역할이며, 이 때문에 forward 시그니처는 latents와 별도로 layout을 받습니다: (t, h, w) 위치 그리드, 행별 modality 태그, 행별 timestep 인덱스, 그리고 video, audio, text 행을 참조하는 세 개의 인덱스 텐서입니다. MiniMaxH3Blocks와 MiniMaxH3Ref2VABlocks는 이 모든 것을 구성합니다.

패딩 행을 포함하는 레이아웃(태그 -1)은 해당 행들이 불리언 마스크에 의해 자체 어텐션 문서로 유지되므로 마스크드 어텐션 백엔드가 필요합니다. 패딩이 없는 시퀀스는 마스크가 필요 없으며 모든 백엔드를 사용할 수 있습니다.

하나의 저장소에 릴리스된 체크포인트 파티션이 모두 포함되어 있으므로, 태스크는 서브폴더로 선택합니다: 텍스트 및 키프레임 태스크에는 transformer/, omni-reference 태스크에는 transformer_ref/를 사용합니다.

import torch
from diffusers import MiniMaxH3Transformer3DModel

transformer = MiniMaxH3Transformer3DModel.from_pretrained(
    "MiniMaxAI/MiniMax-H3", subfolder="transformer", dtype=torch.bfloat16
).to("cuda")  # or "mps", "xpu", "cpu"

체크포인트는 혼합 정밀도로 구성됩니다. 두 개의 입력 패치 투영, 타임스텝 MLP, 두 개의 출력 헤드는 float32이고, 블록 스택은 bfloat16입니다. from_pretrained는 _keep_in_fp32_modules를 통해 해당 레이아웃을 유지하므로, dtype=torch.bfloat16를 전달하고 float32 모듈의 배치에 맡기세요. 나중에 .to(torch.bfloat16)로 모델을 캐스팅하지 마세요.

MiniMaxH3Transformer3DModel

class diffusers.MiniMaxH3Transformer3DModel

< >

( num_attention_heads: int = 56attention_head_dim: int = 128hidden_size: int = 5376num_layers: int = 50num_refiner_layers: int = 2ffn_dim: int = 14336in_channels: int = 24audio_in_channels: int = 32patch_size: tuple = (1, 2, 2)text_dim: int = 5120freq_dim: int = 256time_embed_hidden_dim: int = 5376time_embed_dim: int = 2688rope_freq_dim: int = 16rope_theta: float = 10000.0norm_eps: float = 1e-05qk_norm_eps: float = 1e-05final_norm_eps: float = 1e-05 )

매개변수

  • num_attention_heads (int, 기본값 56) — 멀티헤드 어텐션에 사용할 헤드의 수입니다.
  • attention_head_dim (int, 기본값 128) — 각 attention head의 채널 수입니다. MiniMax-H3에서는 num_attention_heads * attention_head_dim이 hidden_size보다 크다는 점에 유의하세요.
  • hidden_size (int, 기본값 5376) — 패킹된 시퀀스의 채널 수(잔차 스트림)입니다.
  • num_layers (int, 기본값 50) — Transformer 블록의 개수입니다.
  • num_refiner_layers (int, 기본값 2) — 투영된 텍스트 스트림에 적용되는 토크 리파이너 블록의 수입니다.
  • ffn_dim (int, 기본값 14336) — SwiGLU 피드포워드 레이어의 내부 차원입니다.
  • in_channels (int, 기본값 24) — 비디오 latents의 채널 수입니다.
  • audio_in_channels (int, 기본값 32) — 오디오 latents의 채널 수입니다.
  • patch_size (tuple[int, int, int], 기본값 (1, 2, 2)) — 비디오 잠재를 행으로 패킹하는 데 사용되는 (t, h, w) 패치입니다.
  • text_dim (int, 기본값 5120) — 텍스트 인코더가 생성하는 텍스트 조건의 채널 수입니다.
  • freq_dim (int, 기본값 256) — 사인 파형 타임스텝 임베딩의 차원입니다. 타임스텝은 [0, 1] 범위에서 스케일링되지 않은 상태로 사용됩니다.
  • time_embed_hidden_dim (int, 기본값 5376) — timestep MLP의 내부 차원입니다.
  • time_embed_dim (int, 기본값 2688) — timestep MLP의 출력 차원, 즉 모든 AdaLN 투영의 입력입니다.
  • rope_freq_dim (int, 기본값 16) — 축당 회전 주파수의 수입니다. (t, h, w) 축은 이 길이의 inv_freq 버퍼를 공유하며, attention_head_dim 채널 중 2 * 3 * rope_freq_dim개가 회전됩니다.
  • rope_theta (float, 기본값 10000.0) — rope.inv_freq 버퍼를 계산하는 데 사용되는 회전 주파수 스케줄의 기본값입니다.
  • norm_eps (float, 기본값 1e-5) — Attention 및 Feed-forward 이전 정규화(norm)의 Epsilon 값입니다.
  • qk_norm_eps (float, 기본값 1e-5) — 헤드별 query/key 정규화의 epsilon 값입니다.
  • final_norm_eps (float, 기본값 1e-5) — 토크린 리파이너 출력 정규화 및 norm_out의 Epsilon 값입니다.

MiniMax-H3에서 소개된, 비디오와 오디오를 함께 생성하는 Transformer 모델입니다.

MiniMax-H3은 텍스트 조건, 조건부 이미지/비디오 행, 오디오 행 및 대상 비디오 행을 포함하는 하나의 패킹된 1차원 시퀀스 위에 단일 블록 스택을 실행합니다. 어텐션은 해당 시퀀스에 대한 완전한 셀프 어텐션이며, 크로스 어텐션이나 모달리티별 블록 가중치가 없습니다. 모달리티별 동작은 두 개의 입력 패치 투영, 행별 AdaLN 모달리티 태그, 두 개의 출력 헤드에서만 비롯됩니다.

호출자는 패킹된 레이아웃을 구성하는 책임을 집니다. 여기에는 비디오 잠재 변수를 패치화하고, 행을 정렬하며, (t, h, w) 위치 그리드, 행별 모달리티 태그 및 행별 타임스텝 인덱스를 생성하는 작업이 포함됩니다. 시퀀스에는 패딩이 없습니다. 참고 구현에서는 FlashAttention을 위해 64의 배수로 패딩을 추가하고 cu_seqlens = [0, used, S]로 꼬리를 분리하지만, 이 포트에서는 이를 사용할 필요가 없습니다. 따라서 어텐션은 하나의 문서에 대해 마스킹 없이 실행되며 모든 어텐션 백엔드가 사용 가능합니다.

배치 축은 순수한 복제 축입니다. 구조적 인자(timestep, timestep_indices, token_tags, position_ids 및 세 개의 인덱스 텐서)는 모든 배치 항목이 공유하는 하나의 패킹 레이아웃을 설명하며, 각 항목은 단일 어텐션 문서입니다.

forward

< >

( hidden_states: Tensoraudio_hidden_states: Tensorencoder_hidden_states: Tensortimestep: Tensortimestep_indices: Tensortoken_tags: Tensorposition_ids: Tensorvideo_indices: Tensoraudio_indices: Tensortext_indices: Tensorattention_kwargs: dict[str, typing.Any] | None = Nonereturn_dict: bool = True ) → MiniMaxH3TransformerOutput or tuple

매개변수

  • hidden_states (torch.Tensor, shape (batch_size, num_video_tokens, in_channels * prod(patch_size))) — 패치화된 비디오 잠재 행 — 조건부 행과 대상 행 — 패킹된 시퀀스에서 나타나는 순서대로 정렬되어 있으며, 즉 video_indices와 일치합니다.
  • audio_hidden_states (torch.Tensor, shape (batch_size, num_audio_tokens, audio_in_channels)) — audio_indices와 순서가 일치하도록 정렬된 오디오 잠재 행(latent rows)입니다.
  • encoder_hidden_states (torch.Tensor, shape (batch_size, num_text_tokens, text_dim)) — text_indices와 일치하도록 정렬된 텍스트 조건부입니다.
  • timestep (torch.Tensor, shape (num_timesteps,)) — 패킹된 시퀀스에 존재하는 서로 다른 timestep 값들입니다. [0, 1] 범위로, 스케일링되지 않은 값입니다. 하나의 forward가 서로 다른 노이즈 레벨(타겟 비디오, 타겟 오디오, 조건부 행)의 행들을 처리합니다.
  • timestep_indices (torch.Tensor, shape (seq_len,)) — 패킹된 시퀀스의 각 행에 대해, timestep에서의 해당 타임스텝 인덱스입니다.
  • token_tags (torch.Tensor, shape (seq_len,)) — 패킹된 시퀀스의 각 행에 대해 해당 모달리티를 나타냅니다: 0 비디오, 1 텍스트, 2 오디오.
  • position_ids (torch.Tensor, shape (seq_len, 3)) — 패킹된 시퀀스의 각 행에 대한 (t, h, w) 회전 좌표입니다.
  • video_indices (torch.Tensor, shape (num_video_tokens,)) — 패킹된 시퀀스에서 비디오 행의 위치입니다.
  • audio_indices (torch.Tensor, shape (num_audio_tokens,)) — 패킹된 시퀀스에서 오디오 행의 위치입니다.
  • text_indices (torch.Tensor, shape (num_text_tokens,)) — 패킹된 시퀀스에서 텍스트 행의 위치입니다.
  • attention_kwargs (dict, 선택 사항) — 지정된 경우, LoRA 레이어에 적용되는 scale 항목을 포함할 수 있는 kwargs 사전입니다.
  • return_dict (bool, 기본값 True) — 일반 튜플 대신 MiniMaxH3TransformerOutput을 반환할지 여부.

반환값

MiniMaxH3TransformerOutput 또는 tuple

video_indices 및 audio_indices의 행 순서대로, 모양이 (batch_size, num_video_tokens, in_channels * prod(patch_size))인 비디오 속도 및 모양이 (batch_size, num_audio_tokens, audio_in_channels)인 오디오 속도입니다.

MiniMaxH3TransformerOutput

class diffusers.models.transformers.transformer_minimax_h3.MiniMaxH3TransformerOutput

< >

( sample: Tensoraudio_sample: typing.Optional[torch.Tensor] = None )

매개변수

  • sample (torch.Tensor, shape (batch_size, num_video_tokens, in_channels * prod(patch_size))) — video_indices로 지정된 행에 대한 비디오 속도 예측이며, 동일한 순서로 반환됩니다. 조건부 행은 마스킹되지 않은 상태로 반환되며, 스케줄러 단계 전에 이를 마스킹하는 것은 호출자의 책임입니다.
  • audio_sample (torch.Tensor, shape (batch_size, num_audio_tokens, audio_in_channels), 기본값 None) — audio_indices로 지정된 행에 대한 오디오 속도 예측 값이며, 동일한 순서를 따릅니다. forward는 항상 이 값을 채우며, None이 기본값인 이유는 해당 필드의 일반 dict에서 출력을 재구성할 수 있도록 하기 위해서입니다. 이는 accelerate offload hooks가 BaseOutput을 입력 장치로 되돌리는 방식입니다.

MiniMaxH3Transformer3DModel의 출력입니다.

Update on GitHub