# 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](https://huggingface.co/papers/2509.24695) に基づく、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 は低コストで高品質な動画生成を可能にします。*

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

```python
from diffusers import SanaVideoTransformer3DModel
import torch

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

## SanaVideoTransformer3DModel[[diffusers.SanaVideoTransformer3DModel]]

#### diffusers.SanaVideoTransformer3DModel[[diffusers.SanaVideoTransformer3DModel]]

```python
diffusers.SanaVideoTransformer3DModel(in_channels: int = 16, out_channels: int | None = 16, num_attention_heads: int = 20, attention_head_dim: int = 112, num_layers: int = 20, num_cross_attention_heads: int | None = 20, cross_attention_head_dim: int | None = 112, cross_attention_dim: int | None = 2240, caption_channels: int = 2304, mlp_ratio: float = 2.5, dropout: float = 0.0, attention_bias: bool = False, sample_size: int = 30, patch_size: tuple[int, int, int] = (1, 2, 2), norm_elementwise_affine: bool = False, norm_eps: float = 1e-06, interpolation_scale: int | None = None, guidance_embeds: bool = False, guidance_embeds_scale: float = 0.1, qk_norm: str | None = 'rms_norm_across_heads', rope_max_seq_len: int = 1024)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/transformer_sana_video.py#L459)

**パラメータ:**

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`) : アテンション層でバイアスを使用するかどうか。

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](https://huggingface.co/papers/2509.24695)モデルファミリーで紹介された3次元Transformerモデルです。

#### forward[[diffusers.SanaVideoTransformer3DModel.forward]]

```python
forward(hidden_states: Tensor, encoder_hidden_states: Tensor, timestep: Tensor, guidance: typing.Optional[torch.Tensor] = None, encoder_attention_mask: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, attention_kwargs: dict[str, typing.Any] | None = None, controlnet_block_samples: tuple[torch.Tensor] | None = None, return_dict: bool = True)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/transformer_sana_video.py#L575)

**パラメータ:**

hidden_states (`torch.Tensor`、shape `(batch_size, in_channels, num_frames, height, width)`) : 入力 `hidden_states`。

encoder_hidden_states (`torch.Tensor`、shape `(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](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py) の `self.processor` で定義されている `AttentionProcessor` に渡される kwargs の辞書です。

controlnet_block_samples (`tuple` of `torch.Tensor`, *optional*) : 指定された場合、transformer ブロックの残差に追加されるテンソルのリスト。

return_dict (`bool`、*任意*、デフォルトは`True`) : プレーンなタプルではなく`~models.transformer_2d.Transformer2DModelOutput`を返すかどうか。

**戻り値:**

`return_dict` が True の場合、`~models.transformer_2d.Transformer2DModelOutput` が返され、それ以外の場合は、最初の要素がサンプルテンソルである `tuple` が返されます。

[SanaVideoTransformer3DModel](/docs/diffusers/v0.43.0/ja/api/models/sana_video_transformer3d#diffusers.SanaVideoTransformer3DModel) の forward メソッドです。

## Transformer2DModelOutput[[diffusers.models.modeling_outputs.Transformer2DModelOutput]]

#### diffusers.models.modeling_outputs.Transformer2DModelOutput[[diffusers.models.modeling_outputs.Transformer2DModelOutput]]

```python
diffusers.models.modeling_outputs.Transformer2DModelOutput(sample: torch.Tensor)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/modeling_outputs.py#L21)

**パラメータ:**

sample (`torch.Tensor`、shape は `(batch_size, num_channels, height, width)`、または [Transformer2DModel](/docs/diffusers/v0.43.0/ja/api/models/transformer2d#diffusers.Transformer2DModel) が離散型の場合 `(batch size, num_vector_embeds - 1, num_latent_pixels)`) : `encoder_hidden_states` 入力を条件とする隠れ状態の出力です。離散型の場合、ノイズ除去されていない潜在ピクセルの確率分布を返します。

[Transformer2DModel](/docs/diffusers/v0.43.0/ja/api/models/transformer2d#diffusers.Transformer2DModel)の出力です。

