Diffusers documentation

MiniMaxH3Transformer3DModel

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

MiniMaxH3Transformer3DModel

一种用于联合生成视频和音频的 Diffusion Transformer 模型,由 MiniMax 在 MiniMax-H3 中提出。

MiniMax-H3 在一个单一的块堆栈上运行,该堆栈处理一个打包的一维序列,该序列同时包含文本条件、条件图像和视频行、音频行以及目标视频行。注意力机制是对该序列的完整自注意力,因此不存在交叉注意力,也不存在按模态划分的块权重。模态特定的行为仅来自两个输入补丁投影、用于选择 AdaLN 调制参数的逐行模态标签,以及两个输出头。

构建打包布局是调用方的职责,因此 forward 签名将布局与潜变量分开接收:即 (t, h, w) 位置网格、每行的模态标签、每行的时间步索引,以及用于寻址视频、音频和文本行的三个索引张量。MiniMaxH3Blocks 和 MiniMaxH3Ref2VABlocks 会构建所有这些内容。

带有填充行(标签为 -1)的布局需要支持掩码的注意力后端,因为这些行通过布尔掩码保留在各自的注意力文档中;无填充的序列不需要掩码,因此所有后端均可用。

同一个仓库同时存放了已发布的检查点分区,因此子文件夹用于选择任务:transformer/ 用于文本和关键帧任务,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"

该检查点采用混合精度:两个输入 patch 投影、时间步 MLP 以及两个输出头为 float32,而 block 堆栈为 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[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-05 )

参数

  • num_attention_heads (int,默认为 56) — 多头注意力机制中使用的注意力头数量。
  • attention_head_dim(int,默认为 128)— 每个注意力头中的通道数。请注意,在 MiniMax-H3 中,num_attention_heads * attention_head_dim 的值 大于 hidden_size。
  • hidden_size (int,默认为 5376) — 打包序列的通道数(即残差流)。
  • num_layers (int,默认为 50) — Transformer 块的数量。
  • num_refiner_layers (int,默认为 2) — 应用于投影文本流的 token refiner 块的数量。
  • ffn_dim (int,默认为 14336) — SwiGLU 前馈层的内部维度。
  • in_channels (int,默认为 24) — 视频潜变量的通道数。
  • audio_in_channels (int,默认为 32) — 音频潜变量的通道数。
  • 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) — 时间步 MLP 的内部维度。
  • time_embed_dim (int,默认为 2688) — 时间步 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) — 注意力前和前馈层前的归一化 epsilon。
  • qk_norm_eps (float,默认为 1e-5) — 每个头 query/key 范数的 epsilon。
  • final_norm_eps (float,默认为 1e-5) — token refiner 输出归一化以及 norm_out 的 epsilon。

一种用于联合视频 + 音频生成的 Transformer 模型,在 MiniMax-H3 中引入。

MiniMax-H3 在 一个打包的一维序列 上运行单一的块堆栈,该序列包含文本条件、条件图像/视频行、音频行以及目标视频行。注意力机制是该序列上的完整自注意力;没有交叉注意力,也没有按模态区分的块权重。模态特定的行为仅来自两个输入补丁投影、每行的 AdaLN 模态标签以及两个输出头。

调用方负责构建打包布局:对视频潜变量进行分块(patchify)、对行进行排序,并生成 (t, h, w) 位置网格、每行的模态标签以及每行的时间步索引。序列不包含填充——参考实现会将其填充为 64 的倍数以适配 FlashAttention,并通过 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(形状为 (batch_size, num_video_tokens, in_channels * prod(patch_size)) 的 torch.Tensor)— 经过分块处理的视频潜在行——包括条件行和目标行——按照其在打包序列中出现的顺序排列,即与 video_indices 相匹配。
  • audio_hidden_states(形状为 (batch_size, num_audio_tokens, audio_in_channels) 的 torch.Tensor)— 音频潜在行,其顺序与 audio_indices 相匹配。
  • encoder_hidden_states(形状为 (batch_size, num_text_tokens, text_dim) 的 torch.Tensor)— 文本条件,其顺序与 text_indices 相匹配。
  • timestep(形状为 (num_timesteps,) 的 torch.Tensor)— 打包序列中存在的不同时间步值,取值范围为 [0, 1] 且未进行缩放。一次前向传播处理处于不同噪声水平的行(目标视频、目标音频、条件行)。
  • timestep_indices(形状为 (seq_len,) 的 torch.Tensor)— 对于打包序列的每一行,其在 timestep 中对应的时间步索引。
  • token_tags(形状为 (seq_len,) 的 torch.Tensor)— 对于打包序列的每一行,其模态:0 视频,1 文本,2 音频。
  • position_ids(形状为 (seq_len, 3) 的 torch.Tensor)— 打包序列中每一行的 (t, h, w) 旋转坐标。
  • video_indices(形状为 (num_video_tokens,) 的 torch.Tensor)— 视频行在打包序列中的位置。
  • audio_indices(形状为 (num_audio_tokens,) 的 torch.Tensor)— 音频行在打包序列中的位置。
  • text_indices(形状为 (num_text_tokens,) 的 torch.Tensor)— 文本行在打包序列中的位置。
  • attention_kwargs (dict, 可选) — 一个 kwargs 字典,如果指定,可以包含一个 scale 条目,该条目将应用于 LoRA 层。
  • return_dict (bool,默认为 True) — 是否返回 MiniMaxH3TransformerOutput 而不是普通元组。

返回值

MiniMaxH3TransformerOutput 或 tuple

形状为 (batch_size, num_video_tokens, in_channels * prod(patch_size)) 的视频速度,以及形状为 (batch_size, num_audio_tokens, audio_in_channels) 的音频速度,其行顺序遵循 video_indices 和 audio_indices。

MiniMaxH3TransformerOutput

class diffusers.models.transformers.transformer_minimax_h3.MiniMaxH3TransformerOutput

< >

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

参数

  • sample (torch.Tensor,形状为 (batch_size, num_video_tokens, in_channels * prod(patch_size))) — 由 video_indices 所指定行的视频速度预测,顺序相同。条件行以未掩码的形式返回——在调度器步骤之前将其掩码掉是调用方的职责。
  • audio_sample (torch.Tensor,形状为 (batch_size, num_audio_tokens, audio_in_channels),默认值为 None) — audio_indices 所指定行的音频速度预测值,顺序相同。forward 始终会填充该值;其默认值仅为 None,以便可以从其字段的普通字典中重建输出,这正是 accelerate offload hooks 将 BaseOutput 移回输入设备的方式。

MiniMaxH3Transformer3DModel 的输出。

Update on GitHub