Diffusers documentation
SanaVideoTransformer3DModel
SanaVideoTransformer3DModel
Un modelo Diffusion Transformer para datos 3D (vídeo) de SANA-Video: Efficient Video Generation with Block Linear Diffusion Transformer de NVIDIA y 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.
El resumen del artículo es:
Presentamos SANA-Video, un modelo de difusión pequeño que puede generar videos de forma eficiente hasta una resolución de 720x1280 y una duración de un minuto. SANA-Video sintetiza videos de alta resolución, alta calidad y larga duración con una fuerte alineación texto-video a una velocidad notablemente rápida, y es desplegable en una GPU RTX 5090. Dos diseños centrales garantizan nuestra generación de video eficiente, efectiva y de larga duración: (1) Linear DiT: aprovechamos la atención lineal como operación central, que es más eficiente que la atención estándar dado el gran número de tokens procesados en la generación de video. (2) KV cache de memoria constante para Block Linear Attention: diseñamos un enfoque autoregresivo por bloques para la generación de video de larga duración empleando un estado de memoria constante, derivado de las propiedades acumulativas de la atención lineal. Este KV cache proporciona al Linear DiT un contexto global a un costo de memoria fijo, eliminando la necesidad de un KV cache tradicional y permitiendo una generación de video de un minuto de duración de forma eficiente. Además, exploramos filtros de datos efectivos y estrategias de entrenamiento del modelo, reduciendo el costo de entrenamiento a 12 días en 64 GPUs H100, lo que representa solo el 1% del costo de MovieGen. Dado su bajo costo, SANA-Video logra un rendimiento competitivo en comparación con los modelos de difusión pequeños modernos de última generación (p. ej., Wan 2.1-1.3B y SkyReel-V2-1.3B) mientras es 16 veces más rápido en latencia medida. Además, SANA-Video puede desplegarse en GPUs RTX 5090 con precisión NVFP4, acelerando la velocidad de inferencia para generar un video de 5 segundos en 720p de 71s a 29s (aceleración de 2.4x). En resumen, SANA-Video permite la generación de video de alta calidad y bajo costo.
El modelo se puede cargar con el siguiente fragmento 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
clase 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, por defecto16) — El número de canales en la entrada. - out_channels (
int, opcional, valor predeterminado16) — El número de canales en la salida. - num_attention_heads (
int, por defecto20) — El número de cabezas a utilizar para la atención multi-cabeza. - attention_head_dim (
int, por defecto112) — El número de canales en cada cabeza. - num_layers (
int, por defecto20) — El número de capas de bloques Transformer a utilizar. - num_cross_attention_heads (
int, opcional, valor predeterminado20) — El número de cabezas a utilizar para la atención cruzada. - cross_attention_head_dim (
int, opcional, valor predeterminado112) — El número de canales en cada cabeza para la atención cruzada. - cross_attention_dim (
int, opcional, valor predeterminado2240) — El número de canales en la salida de la atención cruzada. - caption_channels (
int, por defecto2304) — El número de canales en los embeddings de la descripción. - mlp_ratio (
float, por defecto2.5) — La proporción de expansión a utilizar en la capa GLUMBConv. - dropout (
float, por defecto0.0) — La probabilidad de dropout. - attention_bias (
bool, por defectoFalse) — Si se debe usar sesgo en la capa de atención. - sample_size (
int, por defecto32) — El tamaño base del latente de entrada. - patch_size (
int, por defecto1) — El tamaño de los parches a utilizar en la capa de incrustación de parches. - norm_elementwise_affine (
bool, por defectoFalse) — Si se debe usar afinidad por elemento en la capa de normalización. - norm_eps (
float, por defecto1e-6) — El valor de epsilon para la capa de normalización. - qk_norm (
str, opcional, valor predeterminadoNone) — La normalización a utilizar para la consulta y la clave.
Un modelo Transformer 3D introducido en la familia 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)) — Entradahidden_states. - encoder_hidden_states (
torch.Tensorde forma(batch_size, sequence_len, embed_dims)) — Incrustaciones condicionales (incrustaciones calculadas a partir de las condiciones de entrada, como los prompts) que se deben utilizar. - timestep (
torch.LongTensor) — Se utiliza para indicar el paso de desruido. - guidance (
torch.Tensor, opcional) — Incrustación de escala de orientación. - encoder_attention_mask (
torch.Tensor, opcional) — Máscara de atención cruzada aplicada aencoder_hidden_states. - attention_mask (
torch.Tensor, opcional) — Máscara de autoatención aplicada ahidden_states. - attention_kwargs (
dict, opcional) — Un diccionario de kwargs que, si se especifica, se pasa alAttentionProcessordefinido enself.processordentro de diffusers.models.attention_processor. - controlnet_block_samples (
tupledetorch.Tensor, opcional) — Una lista de tensores que, si se especifica, se añaden a los residuos de los bloques del transformer. - return_dict (
bool, opcional, valor predeterminadoTrue) — Indica si se debe devolver un~models.transformer_2d.Transformer2DModelOutputen lugar de una tupla simple.
El método forward de SanaVideoTransformer3DModel.
Transformer2DModelOutput
clase diffusers.models.modeling_outputs.Transformer2DModelOutput
< source >( sample: torch.Tensor )
Parámetros
- sample (
torch.Tensorde forma(batch_size, num_channels, height, width)o(batch size, num_vector_embeds - 1, num_latent_pixels)si Transformer2DModel es discreto) — La salida de estados ocultos condicionada a la entradaencoder_hidden_states. Si es discreto, devuelve distribuciones de probabilidad para los píxeles latentes sin ruido.
La salida de Transformer2DModel.