Diffusers documentation
MiniMaxH3ImageTransformer2DModel
MiniMaxH3ImageTransformer2DModel
Un modèle Diffusion Transformer pour la génération et l'édition d'images, introduit dans MiniMax-H3-Image par MiniMax.
Il s’agit du MiniMaxH3Transformer3DModel sans son flux audio : une seule pile de blocs traite une séquence 1-D compacte qui contient le conditionnement texte, les lignes des images de référence et les lignes de l’image générée. La construction de la disposition compacte est à la charge de l’appelant, c’est pourquoi la signature de la méthode forward reçoit la disposition séparément des latents : la grille de positions (t, h, w), les étiquettes de modalité par ligne, les indices de timestep par ligne et les deux tenseurs d’index qui adressent les lignes d’image et de texte. MiniMaxH3ImageBlocks construit l’ensemble.
Le point de contrôle est distillé en six étapes d’échantillonnage au moyen de la distillation par décodage parallèle (PDD), qui conserve une tête de sortie par étape. forward prend donc en paramètre pdd_step_index, l’étape en cours d’exécution, et projette avec la tête de cette étape.
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"Le point de contrôle est en précision mixte : la projection des patches d’entrée, le MLP de pas de temps et les têtes de sortie sont en float32, tandis que la pile de blocs est en bfloat16. from_pretrained conserve cette organisation grâce à _keep_in_fp32_modules ; passez donc dtype=torch.bfloat16 et laissez-le placer les modules en float32, plutôt que de convertir le modèle avec .to(torch.bfloat16) par la suite.
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 )
Paramètres
- num_attention_heads (
int, par défaut56) — Le nombre de têtes à utiliser pour l'attention multi-têtes. - attention_head_dim (
int, par défaut128) — Le nombre de canaux dans chaque tête d'attention. Notez quenum_attention_heads * attention_head_dimest supérieur àhidden_size. - hidden_size (
int, par défaut5376) — Le nombre de canaux de la séquence compactée (le flux résiduel). - num_layers (
int, par défaut50) — Le nombre de blocs de transformeur. - num_refiner_layers (
int, par défaut2) — Le nombre de blocs de raffinement de jetons appliqués au flux de texte projeté. - ffn_dim (
int, par défaut14336) — La dimension interne des couches feed-forward SwiGLU. - in_channels (
int, par défaut24) — Le nombre de canaux des latents de l'image. - patch_size (
tuple[int, int, int], par défaut(1, 2, 2)) — Le patch(t, h, w)utilisé pour regrouper les latents en lignes. - text_dim (
int, par défaut5120) — Le nombre de canaux de la condition de texte produite par l’encodeur de texte. - freq_dim (
int, par défaut256) — La dimension de l’encodage sinusoïdal des pas de temps. Les pas de temps sont consommés non mis à l’échelle dans[0, 1]. - time_embed_hidden_dim (
int, par défaut5376) — La dimension interne du MLP de pas de temps. - time_embed_dim (
int, par défaut2688) — La dimension de sortie du MLP de pas de temps, c'est-à-dire l'entrée de chaque projection AdaLN. - rope_freq_dim (
int, par défaut16) — Le nombre de fréquences rotatives par axe. Les axes(t, h, w)partagent un tamponinv_freqde cette longueur et2 * 3 * rope_freq_dimdes canauxattention_head_dimsont rotés. - rope_theta (
float, par défaut10000.0) — La base du calendrier de fréquences rotatives à partir duquel le tamponrope.inv_freqest calculé. - norm_eps (
float, par défaut1e-5) — Epsilon des normalisations avant l'attention et avant le réseau de feed-forward. - qk_norm_eps (
float, par défaut1e-5) — Epsilon des normes de requête/clé par tête. - final_norm_eps (
float, par défaut1e-5) — Epsilon de la norme de sortie du raffineur de jetons et denorm_out. - num_pdd_heads (
int, par défaut6) — Le nombre d'étapes d'échantillonnage auxquelles le point de contrôle a été distillé, chacune ayant sa propre tête de sortie.
Un modèle Transformer pour la génération et l'édition d'images, introduit dans MiniMax-H3-Image.
Il s’agit du transformeur MiniMax-H3 sans son flux audio : une seule pile de blocs traite une séquence 1-D compacte qui contient la condition texte, les lignes des images de référence et les lignes de l’image générée. L’attention est une auto-attention complète sur cette séquence ; il n’y a pas d’attention croisée. Le point de contrôle est distillé vers un nombre fixe d’étapes d’échantillonnage via la Parallel Decoding Distillation (PDD), qui conserve une tête de sortie par étape, de sorte que forward reçoit l’indice de l’étape en cours d’exécution.
L'appelant est responsable de la construction de la mise en page compacte : patchification des latents, ordonnancement des lignes et production de la grille de positions (t, h, w), des étiquettes de modalité par ligne et des indices de pas de temps par ligne. La séquence ne contient aucun bourrage, de sorte que l'attention s'exécute sans masque sur un seul document et que tous les backends d'attention restent disponibles.
L'axe de lot est un axe de pure réplication : les arguments structurels (timestep, timestep_indices, token_tags, position_ids et les deux tenseurs d'indices) décrivent une mise en page compacte unique partagée par tous les éléments du lot.
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
Paramètres
- hidden_states (
torch.Tensorde forme(batch_size, num_image_tokens, in_channels * prod(patch_size))) — Lignes latentes patchifiées — les lignes des images de référence et les lignes de l'image générée — ordonnées tel qu'elles apparaissent dans la séquence packée, c'est-à-dire correspondant àimage_indices. - encoder_hidden_states (
torch.Tensorde forme(batch_size, num_text_tokens, text_dim)) — Conditionnement par le texte, ordonné pour correspondre àtext_indices. - timestep (
torch.Tensorde forme(num_timesteps,)) — Les valeurs de timestep distinctes présentes dans la séquence packée, dans[0, 1]et non échelonnées. Un seul passage en avant sert des lignes à différents niveaux de bruit (lignes générées, lignes de référence). - timestep_indices (
torch.Tensorde forme(seq_len,)) — Pour chaque ligne de la séquence compactée, l'index de son pas de temps danstimestep. - token_tags (
torch.Tensorde forme(seq_len,)) — Pour chaque ligne de la séquence compactée, sa modalité :0image,1texte. - position_ids (
torch.Tensorde forme(seq_len, 3)) — Les coordonnées rotatives(t, h, w)de chaque ligne de la séquence compactée. - image_indices (
torch.Tensorde forme(num_image_tokens,)) — Positions des lignes d’image dans la séquence compactée. - text_indices (
torch.Tensorde forme(num_text_tokens,)) — Positions des lignes de texte dans la séquence compactée. - pdd_step_index (
int) — L'indice de l'étape d'échantillonnage, qui sélectionne la tête de sortie. - return_dict (
bool, par défautTrue) — Indique s'il faut retourner un Transformer2DModelOutput plutôt qu'un simple tuple.
Retourne
Transformer2DModelOutput ou tuple
La vitesse de chaque ligne d'image, de forme (batch_size, num_image_tokens, in_channels * prod(patch_size)), dans l'ordre des lignes de image_indices.