Diffusers documentation

SanaVideoTransformer3DModel

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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

< >

( 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 defecto 16) — El número de canales en la entrada.
  • out_channels (int, opcional, valor predeterminado 16) — El número de canales en la salida.
  • num_attention_heads (int, por defecto 20) — El número de cabezas a utilizar para la atención multi-cabeza.
  • attention_head_dim (int, por defecto 112) — El número de canales en cada cabeza.
  • num_layers (int, por defecto 20) — El número de capas de bloques Transformer a utilizar.
  • num_cross_attention_heads (int, opcional, valor predeterminado 20) — El número de cabezas a utilizar para la atención cruzada.
  • cross_attention_head_dim (int, opcional, valor predeterminado 112) — El número de canales en cada cabeza para la atención cruzada.
  • cross_attention_dim (int, opcional, valor predeterminado 2240) — El número de canales en la salida de la atención cruzada.
  • caption_channels (int, por defecto 2304) — El número de canales en los embeddings de la descripción.
  • mlp_ratio (float, por defecto 2.5) — La proporción de expansión a utilizar en la capa GLUMBConv.
  • dropout (float, por defecto 0.0) — La probabilidad de dropout.
  • attention_bias (bool, por defecto False) — Si se debe usar sesgo en la capa de atención.
  • sample_size (int, por defecto 32) — El tamaño base del latente de entrada.
  • patch_size (int, por defecto 1) — El tamaño de los parches a utilizar en la capa de incrustación de parches.
  • norm_elementwise_affine (bool, por defecto False) — Si se debe usar afinidad por elemento en la capa de normalización.
  • norm_eps (float, por defecto 1e-6) — El valor de epsilon para la capa de normalización.
  • qk_norm (str, opcional, valor predeterminado None) — La normalización a utilizar para la consulta y la clave.

Un modelo Transformer 3D introducido en la familia de modelos Sana-Video.

forward

< >

( 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.Tensor de forma (batch_size, in_channels, num_frames, height, width)) — Entrada hidden_states.
  • encoder_hidden_states (torch.Tensor de 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 a encoder_hidden_states.
  • attention_mask (torch.Tensor, opcional) — Máscara de autoatención aplicada a hidden_states.
  • attention_kwargs (dict, opcional) — Un diccionario de kwargs que, si se especifica, se pasa al AttentionProcessor definido en self.processor dentro de diffusers.models.attention_processor.
  • controlnet_block_samples (tuple de torch.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 predeterminado True) — Indica si se debe devolver un ~models.transformer_2d.Transformer2DModelOutput en lugar de una tupla simple.

El método forward de SanaVideoTransformer3DModel.

Transformer2DModelOutput

clase diffusers.models.modeling_outputs.Transformer2DModelOutput

< >

( sample: torch.Tensor )

Parámetros

  • sample (torch.Tensor de 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 entrada encoder_hidden_states. Si es discreto, devuelve distribuciones de probabilidad para los píxeles latentes sin ruido.

La salida de Transformer2DModel.

Update on GitHub