Diffusers documentation
SanaVideoTransformer3DModel
SanaVideoTransformer3DModel
Um modelo Diffusion Transformer para dados 3D (vídeo) de SANA-Video: Efficient Video Generation with Block Linear Diffusion Transformer da NVIDIA e MIT HAN Lab, por 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.
O resumo do artigo é:
Apresentamos o SANA-Video, um pequeno modelo de difusão capaz de gerar vídeos de forma eficiente, com resolução de até 720x1280 e duração de até um minuto. O SANA-Video sintetiza vídeos de alta resolução, alta qualidade e longa duração, com forte alinhamento entre texto e vídeo, a uma velocidade notavelmente rápida, podendo ser implantado em GPUs RTX 5090. Dois designs centrais garantem a geração de vídeos eficiente, eficaz e longa: (1) Linear DiT: utilizamos a atenção linear como operação central, que é mais eficiente que a atenção convencional, dado o grande número de tokens processados na geração de vídeos. (2) Cache KV de memória constante para Block Linear Attention: projetamos uma abordagem autoregressiva por blocos para a geração de vídeos longos, empregando um estado de memória constante, derivado das propriedades cumulativas da atenção linear. Esse cache KV fornece ao Linear DiT contexto global a um custo de memória fixo, eliminando a necessidade de um cache KV tradicional e permitindo a geração eficiente de vídeos de longa duração. Além disso, exploramos filtros de dados eficazes e estratégias de treinamento do modelo, reduzindo o custo de treinamento para 12 dias em 64 GPUs H100, o que representa apenas 1% do custo do MovieGen. Dado seu baixo custo, o SANA-Video alcança desempenho competitivo em comparação com modelos de difusão pequenos e modernos do estado da arte (por exemplo, Wan 2.1-1.3B e SkyReel-V2-1.3B), sendo 16x mais rápido em latência medida. Além disso, o SANA-Video pode ser implantado em GPUs RTX 5090 com precisão NVFP4, acelerando a velocidade de inferência para a geração de um vídeo 720p de 5 segundos de 71s para 29s (aceleração de 2.4x). Em resumo, o SANA-Video permite a geração de vídeos de alta qualidade a baixo custo.
O modelo pode ser carregado com o seguinte trecho de código.
from diffusers import SanaVideoTransformer3DModel
import torch
transformer = SanaVideoTransformer3DModel.from_pretrained("Efficient-Large-Model/SANA-Video_2B_480p_diffusers", subfolder="transformer", dtype=torch.bfloat16)SanaVideoTransformer3DModel
classe 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 = (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 )
Parâmetros
- in_channels (
int, padrão16) — O número de canais na entrada. - out_channels (
int, opcional, padrão16) — O número de canais na saída. - num_attention_heads (
int, padrão20) — O número de cabeças a serem usadas para a atenção multi-cabeça. - attention_head_dim (
int, padrão112) — O número de canais em cada cabeça. - num_layers (
int, padrão20) — O número de blocos de camadas de Transformer a serem usados. - num_cross_attention_heads (
int, opcional, padrão20) — O número de cabeças a serem usadas para cross-attention. - cross_attention_head_dim (
int, opcional, padrão112) — O número de canais em cada cabeça para a atenção cruzada. - cross_attention_dim (
int, opcional, padrão2240) — O número de canais na saída da cross-attention. - caption_channels (
int, padrão2304) — O número de canais nos embeddings de legenda. - mlp_ratio (
float, padrão2.5) — A razão de expansão a ser usada na camada GLUMBConv. - dropout (
float, padrão0.0) — A probabilidade de dropout. - attention_bias (
bool, padrãoFalse) — Se deve usar viés na camada de atenção. - sample_size (
int, padrão32) — O tamanho base do latente de entrada. - patch_size (
int, padrão1) — O tamanho dos patches a serem usados na camada de incorporação de patches. - norm_elementwise_affine (
bool, padrãoFalse) — Se deve usar afinidade elementar na camada de normalização. - norm_eps (
float, padrão1e-6) — O valor de epsilon para a camada de normalização. - qk_norm (
str, opcional, padrãoNone) — A normalização a ser usada para a query e a key.
Um modelo Transformer 3D introduzido na família de modelos 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 )
Parâmetros
- hidden_states (
torch.Tensorde forma(batch_size, in_channels, num_frames, height, width)) —hidden_statesde entrada. - encoder_hidden_states (
torch.Tensorde forma(batch_size, sequence_len, embed_dims)) — Incorporações condicionais (incorporações calculadas a partir das condições de entrada, como prompts) a serem usadas. - timestep (
torch.LongTensor) — Usado para indicar o passo de desruido. - guidance (
torch.Tensor, opcional) — Embedding de escala de orientação. - encoder_attention_mask (
torch.Tensor, opcional) — Máscara de atenção cruzada aplicada aencoder_hidden_states. - attention_mask (
torch.Tensor, opcional) — Máscara de autoatenção aplicada ahidden_states. - attention_kwargs (
dict, opcional) — Um dicionário de kwargs que, se especificado, é passado aoAttentionProcessorconforme definido emself.processorem diffusers.models.attention_processor. - controlnet_block_samples (
tupledetorch.Tensor, opcional) — Uma lista de tensores que, se especificada, é adicionada aos resíduos dos blocos do transformer. - return_dict (
bool, opcional, padrãoTrue) — Se deve ou não retornar um~models.transformer_2d.Transformer2DModelOutputem vez de uma tupla simples.
O método forward do SanaVideoTransformer3DModel.
Transformer2DModelOutput
classe diffusers.models.modeling_outputs.Transformer2DModelOutput
< source >( sample: torch.Tensor )
Parâmetros
- sample (
torch.Tensorde forma(batch_size, num_channels, height, width)ou(batch size, num_vector_embeds - 1, num_latent_pixels)se Transformer2DModel for discreto) — A saída dos estados ocultos condicionada à entradaencoder_hidden_states. Se discreto, retorna distribuições de probabilidade para os pixels latentes sem ruído.
A saída de Transformer2DModel.