Diffusers documentation
MiniMaxH3ImageTransformer2DModel
MiniMaxH3ImageTransformer2DModel
Um modelo Diffusion Transformer para geração e edição de imagens, introduzido em MiniMax-H3-Image pela MiniMax.
É o MiniMaxH3Transformer3DModel sem seu fluxo de áudio: uma única pilha de blocos processa uma sequência 1-D empacotada que contém a condição de texto, as linhas das imagens de referência e as linhas da imagem gerada. 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 dois tensores de índice que endereçam as linhas de imagem e de texto. O MiniMaxH3ImageBlocks constrói tudo isso.
O checkpoint é destilado para seis etapas de amostragem com Parallel Decoding Distillation (PDD), que mantém uma cabeça de saída por etapa. Portanto, forward recebe pdd_step_index, a etapa em execução, e projeta com a cabeça dessa etapa.
import torch
from diffusers import MiniMaxH3ImageTransformer2DModel
transformer = MiniMaxH3ImageTransformer2DModel.from_pretrained(
"MiniMaxAI/MiniMax-H3-Image", subfolder="transformer_diffusers", dtype=torch.bfloat16
).to("cuda") # or "mps", "xpu", "cpu"O checkpoint é de precisão mista: a projeção de entrada do patch, o MLP de timestep e as 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.
MiniMaxH3ImageTransformer2DModel
classe diffusers.MiniMaxH3ImageTransformer2DModel
< 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 = 24patch_size: tuple[int, int, int] = (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-05num_pdd_heads: int = 6 )
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_size. - 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 da imagem. - patch_size (
tuple[int, int, int], padrão(1, 2, 2)) — O patch(t, h, w)usado para empacotar os latentes 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. - num_pdd_heads (
int, padrão6) — O número de etapas de amostragem para as quais o checkpoint foi destilado, cada uma com seu próprio output head.
Um modelo Transformer para geração e edição de imagens, introduzido no MiniMax-H3-Image.
É o transformer MiniMax-H3 sem seu fluxo de áudio: uma única pilha de blocos processa uma sequência 1-D empacotada que contém a condição de texto, as linhas das imagens de referência e as linhas da imagem gerada. A atenção é autoatenção completa sobre essa sequência; não há atenção cruzada. O checkpoint é destilado para um número fixo de etapas de amostragem com Parallel Decoding Distillation (PDD), que mantém uma cabeça de saída por etapa, de modo que forward recebe o índice da etapa em execução.
O chamador é responsável por construir o layout empacotado: aplicar patchify aos latentes, 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, 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 dois tensores de índice) descrevem um único layout empacotado que todos os itens do lote compartilham.
forward
< source >( hidden_states: Tensorencoder_hidden_states: Tensortimestep: Tensortimestep_indices: Tensortoken_tags: Tensorposition_ids: Tensorimage_indices: Tensortext_indices: Tensorpdd_step_index: intreturn_dict: bool = True ) → Transformer2DModelOutput or tuple
Parâmetros
- hidden_states (
torch.Tensorde forma(batch_size, num_image_tokens, in_channels * prod(patch_size))) — Linhas latentes em patches — as linhas das imagens de referência e as linhas da imagem gerada — ordenadas conforme aparecem na sequência empacotada, ou seja, correspondendo aimage_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 passagem de frente atende linhas em diferentes níveis de ruído (linhas geradas, linhas de referência). - 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:0imagem,1texto. - position_ids (
torch.Tensorde forma(seq_len, 3)) — As coordenadas rotacionais(t, h, w)de cada linha da sequência empacotada. - image_indices (
torch.Tensorde forma(num_image_tokens,)) — Posições das linhas de imagem na sequência empacotada. - text_indices (
torch.Tensorde forma(num_text_tokens,)) — Posições das linhas de texto na sequência empacotada. - pdd_step_index (
int) — O passo de amostragem, que seleciona a cabeça de saída. - return_dict (
bool, padrãoTrue) — Se deve retornar um Transformer2DModelOutput em vez de uma tupla simples.
Retorna
Transformer2DModelOutput ou tuple
A velocidade de cada linha de imagem, de forma (batch_size, num_image_tokens, in_channels * prod(patch_size)), na ordem de linha de image_indices.