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つのパックされた1次元シーケンスに対して、単一のブロックスタックを実行します。アテンションはこのシーケンス全体に対するフルセルフアテンションであるため、クロスアテンションやモダリティごとのブロック重みは存在しません。モダリティ固有の挙動は、2つの入力パッチ投影、AdaLNのモジュレーションパラメータを選択する行ごとのモダリティタグ、および2つの出力ヘッドからのみ生じます。

パック済みレイアウトの構築は呼び出し側の責務です。そのため、forward のシグネチャでは、潜在変数とは別にレイアウトを受け取ります。具体的には、(t, h, w) の位置グリッド、行ごとのモダリティタグ、行ごとのタイムステップインデックス、そして動画・音声・テキストの行を参照するための3つのインデックステンソルです。MiniMaxH3Blocks と MiniMaxH3Ref2VABlocks がこれらすべてを構築します。

-1 のタグを持つパディング行を含むレイアウトでは、これらの行がブールマスクによって独自のアテンションドキュメントに保持されるため、マスク付きアテンションバックエンドが必要です。一方、パディングのないシーケンスではマスクが不要であり、すべてのバックエンドが利用可能です。

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"

チェックポイントは混合精度です。2 つの入力パッチ投影、タイムステップ MLP、および 2 つの出力ヘッドは 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) — 各アテンションヘッドのチャネル数です。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) — 動画の潜在変数のチャネル数です。
  • 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 バッファを 1 つ共有し、attention_head_dim チャネルのうち 2 * 3 * rope_freq_dim 分が回転されます。
  • rope_theta (float、デフォルト値は 10000.0) — rope.inv_freq バッファの計算に用いられる、ロータリー周波数スケジュールの基数です。
  • norm_eps (float、デフォルトは 1e-5) — アテンション前およびフィードフォワード前の正規化におけるエプシロン。
  • qk_norm_eps (float, デフォルトは 1e-5) — ヘッドごとのクエリ/キーノルムのエプシロン。
  • final_norm_eps (float、デフォルトは 1e-5) — トークンリファイナー出力のノルムおよび norm_out のエプシロン。

MiniMax-H3 で紹介された、動画と音声の同時生成を行う Transformer モデルです。

MiniMax-H3 は、テキスト条件、条件付け画像/動画の行、オーディオの行、およびターゲット動画の行を保持する1 つのパックされた 1 次元シーケンスに対して、単一のブロックスタックを実行します。アテンションは、そのシーケンス全体に対する完全な自己アテンションであり、クロスアテンションやモダリティごとのブロック重みは存在しません。モダリティ固有の挙動は、2 つの入力パッチ射影、行ごとの AdaLN モダリティタグ、および 2 つの出力ヘッドからのみ生じます。

呼び出し側がパックされたレイアウトを構築する責任を負います。具体的には、動画の潜在変数をパッチ化し、行の順序を決定し、(t, h, w) の位置グリッド、行ごとのモダリティタグ、および行ごとのタイムステップインデックスを生成します。シーケンスにはパディングが含まれていません。参照実装では FlashAttention 向けに 64 の倍数までパディングし、cu_seqlens = [0, used, S] を用いて末尾を切り離していましたが、この移植版ではそれを使用しません。そのため、アテンションは 1 つのドキュメントに対してマスクなしで実行され、すべてのアテンションバックエンドが利用可能になります。

バッチ軸は純粋なレプリケーション軸です。構造引数(timestep、timestep_indices、token_tags、position_ids および 3 つのインデックステンソル)は、すべてのバッチ項目が共有する 1 つのパック済みレイアウトを記述し、各項目は単一のアテンション文書です。

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))) — パッチ化された動画の潜在行列 — 条件行とターゲット行 — packed シーケンスに現れる順序で並べられており、video_indices と一致します。
  • audio_hidden_states (torch.Tensor、形状 (batch_size, num_audio_tokens, audio_in_channels)) — audio_indices と一致する順序で並べられた、オーディオの潜在行です。
  • encoder_hidden_states (torch.Tensor、形状 (batch_size, num_text_tokens, text_dim)) — text_indices と一致する順序で並べられたテキストの条件付けです。
  • timestep (torch.Tensor、shape (num_timesteps,)) — パックされたシーケンスに存在する個別のタイムステップ値です。[0, 1]の範囲で、スケーリングされていません。1回のフォワードで、異なるノイズレベルの行(ターゲット動画、ターゲット音声、条件付け行)を処理します。
  • timestep_indices (torch.Tensor、shape (seq_len,)) — パックされたシーケンスの各行について、timestep におけるそのタイムステップのインデックスです。
  • token_tags (torch.Tensor、shape (seq_len,)) — パックされたシーケンスの各行について、そのモダリティを指定します: 0 ビデオ、1 テキスト、2 オーディオ。
  • position_ids (torch.Tensor、形状 (seq_len, 3)) — パックされたシーケンスの各行の (t, h, w) 回転座標です。
  • video_indices (torch.Tensor、形状 (num_video_tokens,)) — パックされたシーケンスにおける動画行の位置です。
  • audio_indices (torch.Tensor、shape (num_audio_tokens,)) — パックされたシーケンスにおけるオーディオ行の位置です。
  • text_indices (torch.Tensor、形状 (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、形状 (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 のオフロードフックが BaseOutput を入力デバイスに戻す際にこの方法が使われます。

MiniMaxH3Transformer3DModelの出力です。

Update on GitHub