Diffusers documentation
MiniMaxH3Transformer3DModel
MiniMaxH3Transformer3DModel
Um modelo Diffusion Transformer para geração conjunta de vídeo e áudio, introduzido em MiniMax-H3 pela MiniMax.
MiniMax-H3 executa uma única pilha de blocos sobre uma sequência 1-D empacotada que contém, de uma só vez, o condicionamento de texto, as linhas da imagem de condicionamento e do vídeo, as linhas de áudio e as linhas do vídeo de destino. A atenção é autoatenção completa sobre essa sequência, portanto não há atenção cruzada nem pesos de bloco por modalidade. O comportamento específico de cada modalidade vem apenas das duas projeções de patch de entrada, da tag de modalidade por linha que seleciona os parâmetros de modulação AdaLN e das duas cabeças de saída.
A construção do layout empacotado é responsabilidade do chamador, motivo pelo qual a assinatura do forward recebe o layout separado dos latentes: a grade de posições (t, h, w), as tags de modalidade por linha, os índices de timestep por linha e os três tensores de índice que endereçam as linhas de vídeo, áudio e texto. MiniMaxH3Blocks e MiniMaxH3Ref2VABlocks constroem tudo isso.
Um layout que carrega linhas de padding (tag -1) precisa de um backend de atenção mascarada, pois essas linhas são mantidas em seu próprio documento de atenção por uma máscara booleana; uma sequência sem padding não precisa de máscara e mantém todos os backends disponíveis.
Um repositório contém as partições de checkpoint liberadas, portanto, a subpasta é o que seleciona a tarefa: transformer/ para as tarefas de texto e keyframe, transformer_ref/ para a tarefa omni-reference.
import torch
from diffusers import MiniMaxH3Transformer3DModel
transformer = MiniMaxH3Transformer3DModel.from_pretrained(
"MiniMaxAI/MiniMax-H3", subfolder="transformer", dtype=torch.bfloat16
).to("cuda") # or "mps", "xpu", "cpu"O checkpoint é de precisão mista: as duas projeções de entrada de patch, o MLP de timestep e as duas saídas são float32, enquanto a pilha de blocos é bfloat16. from_pretrained mantém esse layout por meio de _keep_in_fp32_modules, então passe dtype=torch.bfloat16 e deixe que ele posicione os módulos float32, em vez de converter o modelo com .to(torch.bfloat16) depois.
MiniMaxH3Transformer3DModel
classe diffusers.MiniMaxH3Transformer3DModel
< source >( 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 )
Parâmetros
- num_attention_heads (
int, padrão56) — O número de cabeças a serem usadas para a atenção multi-cabeça. - attention_head_dim (
int, padrão128) — O número de canais em cada cabeça de atenção. Observe quenum_attention_heads * attention_head_dimé maior quehidden_sizeno MiniMax-H3. - hidden_size (
int, padrão5376) — O número de canais da sequência empacotada (o fluxo residual). - num_layers (
int, padrão50) — O número de blocos de transformer. - num_refiner_layers (
int, padrão2) — O número de blocos de refinamento de tokens aplicados ao fluxo de texto projetado. - ffn_dim (
int, padrão14336) — A dimensão interna das camadas feed-forward SwiGLU. - in_channels (
int, padrão24) — O número de canais dos latentes do vídeo. - audio_in_channels (
int, padrão32) — O número de canais dos latentes de áudio. - patch_size (
tuple[int, int, int], padrão(1, 2, 2)) — O patch(t, h, w)usado para empacotar os latentes do vídeo em linhas. - text_dim (
int, padrão5120) — O número de canais da condição de texto produzida pelo codificador de texto. - freq_dim (
int, padrão256) — A dimensão do embedding sinusoidal de timestep. Os timesteps são consumidos sem escala em[0, 1]. - time_embed_hidden_dim (
int, padrão5376) — A dimensão interna do MLP de passo de tempo. - time_embed_dim (
int, padrão2688) — A dimensão de saída do MLP de timestep, ou seja, a entrada de cada projeção AdaLN. - rope_freq_dim (
int, padrão16) — O número de frequências rotativas por eixo. Os eixos(t, h, w)compartilham um bufferinv_freqdeste comprimento e2 * 3 * rope_freq_dimdos canais deattention_head_dimsão rotacionados. - rope_theta (
float, padrão10000.0) — A base do agendamento de frequência rotativa a partir do qual o bufferrope.inv_freqé calculado. - norm_eps (
float, padrão1e-5) — Epsilon das normalizações pré-atenção e pré-feed-forward. - qk_norm_eps (
float, padrão1e-5) — Epsilon das normalizações de query/key por cabeça. - final_norm_eps (
float, padrão1e-5) — Epsilon da normalização da saída do refinador de tokens e denorm_out.
Um modelo Transformer para geração conjunta de vídeo + áudio, introduzido no MiniMax-H3.
MiniMax-H3 executa uma única pilha de blocos sobre uma sequência 1-D empacotada que contém a condição de texto, as linhas da imagem/vídeo de condicionamento, as linhas de áudio e as linhas do vídeo alvo. A atenção é autoatenção completa sobre essa sequência; não há atenção cruzada nem pesos de bloco por modalidade. O comportamento específico de cada modalidade vem apenas das duas projeções de patch de entrada, da tag de modalidade AdaLN por linha e dos dois cabeçalhos de saída.
O chamador é responsável por construir o layout empacotado: aplicar patchify aos latentes do vídeo, ordenar as linhas e produzir a grade de posições (t, h, w), as tags de modalidade por linha e os índices de timestep por linha. A sequência não possui padding — a implementação de referência faz padding até um múltiplo de 64 para o FlashAttention e separa o final com cu_seqlens = [0, used, S], o que esta portabilidade não utiliza —, portanto, a atenção é executada sem máscara sobre um único documento e todos os backends de atenção permanecem disponíveis.
O eixo de lote é um eixo de replicação pura: os argumentos estruturais (timestep, timestep_indices, token_tags, position_ids e os três tensores de índice) descrevem um único layout empacotado que todos os itens do lote compartilham, e cada item é um único documento de atenção.
forward
< source >( 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
Parâmetros
- hidden_states (
torch.Tensorde forma(batch_size, num_video_tokens, in_channels * prod(patch_size))) — Linhas latentes de vídeo em patches — linhas de condicionamento e linhas de alvo — ordenadas conforme aparecem na sequência empacotada, ou seja, correspondendo avideo_indices. - audio_hidden_states (
torch.Tensorde forma(batch_size, num_audio_tokens, audio_in_channels)) — Linhas latentes de áudio, ordenadas para corresponder aaudio_indices. - encoder_hidden_states (
torch.Tensorde forma(batch_size, num_text_tokens, text_dim)) — Condição de texto, ordenada para corresponder atext_indices. - timestep (
torch.Tensorde forma(num_timesteps,)) — Os valores de timestep distintos presentes na sequência empacotada, em[0, 1]e sem escala. Uma única forward atende linhas em diferentes níveis de ruído (vídeo alvo, áudio alvo, linhas de condicionamento). - timestep_indices (
torch.Tensorde forma(seq_len,)) — Para cada linha da sequência empacotada, o índice do seu timestep emtimestep. - token_tags (
torch.Tensorde forma(seq_len,)) — Para cada linha da sequência empacotada, sua modalidade:0vídeo,1texto,2áudio. - position_ids (
torch.Tensorde forma(seq_len, 3)) — As coordenadas rotacionais(t, h, w)de cada linha da sequência empacotada. - video_indices (
torch.Tensorde forma(num_video_tokens,)) — Posições das linhas de vídeo na sequência empacotada. - audio_indices (
torch.Tensorde forma(num_audio_tokens,)) — Posições das linhas de áudio na sequência empacotada. - text_indices (
torch.Tensorde forma(num_text_tokens,)) — Posições das linhas de texto na sequência empacotada. - attention_kwargs (
dict, opcional) — Um dicionário de kwargs que, se especificado, pode conter uma entradascaleque é aplicada às camadas LoRA. - return_dict (
bool, padrãoTrue) — Se deve retornar umMiniMaxH3TransformerOutputem vez de uma tupla simples.
Retorna
MiniMaxH3TransformerOutput ou tuple
A velocidade do vídeo de forma (batch_size, num_video_tokens, in_channels * prod(patch_size)) e a
velocidade do áudio de forma (batch_size, num_audio_tokens, audio_in_channels), na ordem das linhas de
video_indices e audio_indices.
MiniMaxH3TransformerOutput
classe diffusers.models.transformers.transformer_minimax_h3.MiniMaxH3TransformerOutput
< source >( sample: Tensoraudio_sample: typing.Optional[torch.Tensor] = None )
Parâmetros
- sample (
torch.Tensorde forma(batch_size, num_video_tokens, in_channels * prod(patch_size))) — A predição de velocidade do vídeo para as linhas endereçadas porvideo_indices, na mesma ordem. As linhas de condicionamento são retornadas sem máscara — mascará-las antes do passo do scheduler é responsabilidade do chamador. - audio_sample (
torch.Tensorde forma(batch_size, num_audio_tokens, audio_in_channels), padrãoNone) — A predição de velocidade do áudio para as linhas endereçadas poraudio_indices, na mesma ordem.forwardsempre preenche esse campo; ele só tem valor padrãoNonepara que a saída possa ser reconstruída a partir de um dicionário simples de seus campos, que é a forma como os hooks de offload do accelerate movem umBaseOutputde volta para o dispositivo de entrada.
A saída de MiniMaxH3Transformer3DModel.