# SanaVideoTransformer3DModel

Модель Diffusion Transformer для 3D-данных (видео) из [SANA-Video: Efficient Video Generation with Block Linear Diffusion Transformer](https://huggingface.co/papers/2509.24695) от 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 — небольшую диффузионную модель, способную эффективно генерировать видео с разрешением до 720x1280 и длительностью до минуты. SANA-Video синтезирует видео высокого разрешения, высокого качества и длительной продолжительности с сильной согласованностью текста и видео на удивительно высокой скорости, и может быть развернута на GPU RTX 5090. Два ключевых решения обеспечивают эффективную, результативную и длительную генерацию видео: (1) Linear DiT: мы используем линейное внимание как базовую операцию, что эффективнее стандартного внимания с учетом большого количества токенов, обрабатываемых при генерации видео. (2) KV-кэш с постоянной памятью для Block Linear Attention: мы разработали блочный авто-регрессивный подход для генерации длинных видео, используя состояние с постоянной памятью, выведенное из кумулятивных свойств линейного внимания. Этот KV-кэш предоставляет Linear DiT глобальный контекст при фиксированных затратах памяти, устраняя необходимость в традиционном KV-кэше и позволяя эффективно генерировать видео длительностью в минуту. Кроме того, мы исследуем эффективные фильтры данных и стратегии обучения модели, сокращая стоимость обучения до 12 дней на 64 GPU H100, что составляет лишь 1% от стоимости MovieGen. Благодаря низкой стоимости SANA-Video демонстрирует конкурентоспособные результаты по сравнению с современными передовыми небольшими диффузионными моделями (например, Wan 2.1-1.3B и SkyReel-V2-1.3B), при этом будучи в 16 раз быстрее по измеренной задержке. Более того, SANA-Video может быть развернута на GPU RTX 5090 с точностью NVFP4, что ускоряет инференс генерации 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`) : Количество головок для использования в механизме multi-head attention.

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`) : Использовать ли смещение (bias) в слое внимания.

sample_size (`int`, по умолчанию `32`) : Базовый размер входного латента.

patch_size (`int`, по умолчанию `1`) : Размер патчей, используемых в слое встраивания патчей.

norm_elementwise_affine (`bool`, по умолчанию `False`) : Использовать ли поэлементное сродство в слое нормализации.

norm_eps (`float`, по умолчанию `1e-6`) : Значение эпсилона для слоя нормализации.

qk_norm (`str`, *необязательный*, по умолчанию `None`) : Нормализация, используемая для запроса и ключа.

Трёхмерная модель Transformer, представленная в семействе моделей [Sana-Video](https://huggingface.co/papers/2509.24695).

#### 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` формы `(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`, *необязательный*) : Словарь kwargs, который при указании передается в `AttentionProcessor`, определенный в `self.processor` в [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

controlnet_block_samples (`tuple` из `torch.Tensor`, *необязательный*) : Список тензоров, которые при указании добавляются к остаточным связям блоков трансформера.

return_dict (`bool`, *необязательный*, по умолчанию `True`) : Возвращать ли `~models.transformer_2d.Transformer2DModelOutput` вместо обычного кортежа.

**Возвращает:**

Если `return_dict` равно True, возвращается `~models.transformer_2d.Transformer2DModelOutput`, иначе — `tuple`, первым элементом которого является тензор выборки.

Метод forward модели [SanaVideoTransformer3DModel](/docs/diffusers/v0.43.0/ru/api/models/sana_video_transformer3d#diffusers.SanaVideoTransformer3DModel).

## 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` формы `(batch_size, num_channels, height, width)` или `(batch size, num_vector_embeds - 1, num_latent_pixels)`, если [Transformer2DModel](/docs/diffusers/v0.43.0/ru/api/models/transformer2d#diffusers.Transformer2DModel) дискретный): выходные скрытые состояния, обусловленные входом `encoder_hidden_states`. Если модель дискретная, возвращает распределения вероятностей для ненашумленных латентных пикселей.

Вывод [Transformer2DModel](/docs/diffusers/v0.43.0/ru/api/models/transformer2d#diffusers.Transformer2DModel).

