Diffusers documentation
SanaVideoTransformer3DModel
SanaVideoTransformer3DModel
Модель Diffusion Transformer для 3D-данных (видео) из SANA-Video: Efficient Video Generation with Block Linear Diffusion Transformer от 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 обеспечивает генерацию видео высокого качества при низких затратах.
Модель можно загрузить с помощью следующего фрагмента кода.
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
< source >( 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. - cross_attention_head_dim (
int, необязательный, по умолчанию112) — Количество каналов в каждой голове для cross-attention. - 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.
forward
< source >( 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, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processorв diffusers.models.attention_processor. - controlnet_block_samples (
tupleизtorch.Tensor, необязательный) — Список тензоров, которые при указании добавляются к остаткам блоков трансформера. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращать~models.transformer_2d.Transformer2DModelOutputвместо обычного кортежа.
Метод forward модели SanaVideoTransformer3DModel.
Transformer2DModelOutput
класс diffusers.models.modeling_outputs.Transformer2DModelOutput
< source >( sample: torch.Tensor )
Параметры
- sample (
torch.Tensorформы(batch_size, num_channels, height, width)или(batch size, num_vector_embeds - 1, num_latent_pixels), если Transformer2DModel дискретный) — Выходные скрытые состояния, обусловленные входомencoder_hidden_states. Если модель дискретная, возвращает распределения вероятностей для латентных пикселей без шума.
Вывод Transformer2DModel.