Diffusers documentation

SanaVideoTransformer3DModel

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

SanaVideoTransformer3DModel

NVIDIA と MIT HAN Lab の Junsong Chen、Yuyang Zhao、Jincheng Yu、Ruihang Chu、Junyu Chen、Shuai Yang、Xianbang Wang、Yicheng Pan、Daquan Zhou、Huan Ling、Haozhe Liu、Hongwei Yi、Hao Zhang、Muyang Li、Yukang Chen、Han Cai、Sanja Fidler、Ping Luo、Song Han、Enze Xie による SANA-Video: Efficient Video Generation with Block Linear Diffusion Transformer に基づく、3D データ(動画)向けの Diffusion Transformer モデルです。

論文の抄録は以下の通りです:

SANA-Video を紹介します。これは、最大 720x1280 の解像度と分単位の長さの動画を効率的に生成できる小型の拡散モデルです。SANA-Video は、RTX 5090 GPU にデプロイ可能であり、驚くほど高速な速度で、テキストと動画の整合性が強く、高解像度・高品質・長時間の動画を合成します。効率的かつ効果的な長時間動画生成を実現する 2 つの核心的な設計があります。(1) Linear DiT: 動画生成では大量のトークンを処理するため、バニラアテンションよりも効率的な線形アテンションをコア操作として活用しています。(2) Block Linear Attention 向けの定数メモリ KV キャッシュ: 線形アテンションの累積特性から導出される定数メモリ状態を採用することで、ブロック単位の自己回帰アプローチを設計し、長時間の動画生成を実現しています。この KV キャッシュにより、Linear DiT は固定のメモリコストでグローバルコンテキストを確保でき、従来の KV キャッシュの必要性を排除し、効率的な分単位の動画生成を可能にします。さらに、効果的なデータフィルタとモデル学習戦略を探索し、64 枚の H100 GPU での学習コストを 12 日間に縮小しました。これは MovieGen のコストのわずか 1% に相当します。この低コストにもかかわらず、SANA-Video は、最新の最先端の小型拡散モデル(例: Wan 2.1-1.3B や SkyReel-V2-1.3B)と比較して競争力のある性能を達成すると同時に、測定されたレイテンシでは 16 倍高速です。さらに、SANA-Video は NVFP4 精度で RTX 5090 GPU にデプロイでき、5 秒間の 720p 動画の生成における推論速度を 71 秒から 29 秒(2.4 倍高速化)に加速します。要するに、SANA-Video は低コストで高品質な動画生成を可能にします。

モデルは、以下のコードスニペットで読み込むことができます。

from diffusers import SanaVideoTransformer3DModel
import torch

transformer = SanaVideoTransformer3DModel.from_pretrained("Efficient-Large-Model/SANA-Video_2B_480p_diffusers", subfolder="transformer", dtype=torch.bfloat16)

SanaVideoTransformer3DModel

class diffusers.SanaVideoTransformer3DModel

< >

( in_channels: int = 16out_channels: int | None = 16num_attention_heads: int = 20attention_head_dim: int = 112num_layers: int = 20num_cross_attention_heads: int | None = 20cross_attention_head_dim: int | None = 112cross_attention_dim: int | None = 2240caption_channels: int = 2304mlp_ratio: float = 2.5dropout: float = 0.0attention_bias: bool = Falsesample_size: int = 30patch_size: tuple[int, int, int] = (1, 2, 2)norm_elementwise_affine: bool = Falsenorm_eps: float = 1e-06interpolation_scale: int | None = Noneguidance_embeds: bool = Falseguidance_embeds_scale: float = 0.1qk_norm: str | None = 'rms_norm_across_heads'rope_max_seq_len: int = 1024 )

パラメータ

  • in_channels (int, デフォルトは 16) — 入力におけるチャネル数。
  • out_channels (int、任意、デフォルトは 16) — 出力のチャネル数です。
  • num_attention_heads (int、デフォルトは20) — マルチヘッドアテンションに使用するヘッドの数。
  • attention_head_dim (int、デフォルトは 112) — 各ヘッドのチャネル数です。
  • num_layers (int、デフォルトは20) — 使用する Transformer ブロックの層数です。
  • num_cross_attention_heads (int、任意、デフォルトは20) — クロスアテンションに使用するヘッド数。
  • cross_attention_head_dim (int、任意、デフォルトは 112) — クロスアテンションにおける各ヘッドのチャネル数です。
  • cross_attention_dim (int、任意、デフォルトは2240) — クロスアテンションの出力のチャネル数です。
  • caption_channels (int、デフォルトは 2304) — キャプション埋め込みのチャネル数です。
  • mlp_ratio (float、デフォルト値は2.5) — GLUMBConv層で使用する拡張比率です。
  • dropout (float、デフォルト値は 0.0) — Dropout の確率です。
  • attention_bias (bool、デフォルトはFalse) — attention層でbiasを使用するかどうか。
  • sample_size (int、デフォルトは32) — 入力潜在変数の基本サイズです。
  • patch_size (int、デフォルトは1) — パッチ埋め込み層で使用するパッチのサイズです。
  • norm_elementwise_affine (bool、デフォルトは False) — 正規化層で要素ごとのアフィニティを使用するかどうか。
  • norm_eps (float、デフォルトは 1e-6) — 正規化レイヤーの epsilon 値です。
  • qk_norm (str、任意、デフォルトは None) — クエリとキーに使用する正規化です。

Sana-Videoモデルファミリーで紹介された3次元Transformerモデルです。

forward

< >

( hidden_states: Tensorencoder_hidden_states: Tensortimestep: Tensorguidance: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneattention_kwargs: dict[str, typing.Any] | None = Nonecontrolnet_block_samples: tuple[torch.Tensor] | None = Nonereturn_dict: bool = True )

パラメータ

  • hidden_states(torch.Tensor、形状 (batch_size, in_channels, num_frames, height, width))— 入力となる hidden_states。
  • encoder_hidden_states (torch.Tensor、形状 (batch_size, sequence_len, embed_dims)) — 使用する条件埋め込み(プロンプトなどの入力条件から計算される埋め込み)。
  • timestep (torch.LongTensor) — デノイジングステップを示すために使用されます。
  • guidance (torch.Tensor、任意) — ガイダンススケール埋め込み。
  • encoder_attention_mask (torch.Tensor, 任意) — encoder_hidden_states に適用されるクロスアテンションマスク。
  • attention_mask (torch.Tensor, 任意) — hidden_states に適用される自己注意マスク。
  • attention_kwargs (dict, 省略可) — 指定された場合、diffusers.models.attention_processor で定義されている self.processor 内の AttentionProcessor に渡される kwargs 辞書です。
  • controlnet_block_samples (tuple of torch.Tensor, optional) — 指定された場合、transformer ブロックの残差に追加されるテンソルのリストです。
  • return_dict (bool、任意、デフォルトは True) — プレーンなタプルではなく ~models.transformer_2d.Transformer2DModelOutput を返すかどうか。

SanaVideoTransformer3DModel の forward メソッドです。

Transformer2DModelOutput

クラス diffusers.models.modeling_outputs.Transformer2DModelOutput

< >

( sample: torch.Tensor )

パラメータ

  • sample (torch.Tensor、形状 (batch_size, num_channels, height, width)、または Transformer2DModel が離散型の場合 (batch size, num_vector_embeds - 1, num_latent_pixels)) — encoder_hidden_states 入力を条件とする隠れ状態の出力です。離散型の場合、ノイズ除去されていない潜在ピクセルの確率分布を返します。

Transformer2DModelの出力です。

Update on GitHub