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

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: Efficient Video Generation with Block Linear Diffusion Transformer의 3D 데이터(비디오)용 Diffusion Transformer 모델입니다.

해당 논문의 초록은 다음과 같습니다:

SANA-Video를 소개합니다. SANA-Video는 최대 720x1280 해상도와 분 단위 길이의 영상을 효율적으로 생성할 수 있는 소형 diffusion 모델입니다. SANA-Video는 놀라울 정도로 빠른 속도로 텍스트-영상 정합성이 강한 고해상도, 고품질, 장시간 영상을 합성하며, RTX 5090 GPU에 배포할 수 있습니다. 효율적이고 효과적이며 긴 영상 생성을 보장하는 두 가지 핵심 설계가 있습니다. (1) Linear DiT: 영상 생성에서 처리되는 토큰 수가 많기 때문에, 기존 attention보다 효율적인 linear attention을 핵심 연산으로 활용합니다. (2) Block Linear Attention을 위한 Constant-Memory KV cache: linear attention의 누적 특성에서 파생된 constant-memory state를 사용하여 장시간 영상 생성을 위한 블록 단위 자기회귀(block-wise autoregressive) 접근법을 설계했습니다. 이 KV cache는 고정된 메모리 비용으로 Linear DiT에 전역 컨텍스트를 제공하여, 기존 KV cache의 필요성을 제거하고 효율적인 분 단위 영상 생성을 가능하게 합니다. 또한, 효과적인 데이터 필터와 모델 학습 전략을 탐구하여 64개의 H100 GPU에서 학습 비용을 12일로 줄였으며, 이는 MovieGen 비용의 1%에 불과합니다. 이러한 낮은 비용에도 불구하고, SANA-Video는 측정된 지연 시간에서 16배 더 빠른 속도로, 최신 state-of-the-art 소형 diffusion 모델(예: Wan 2.1-1.3B 및 SkyReel-V2-1.3B)과 경쟁하는 성능을 달성합니다. 나아가, SANA-Video는 NVFP4 정밀도로 RTX 5090 GPU에 배포할 수 있으며, 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

< >

( 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 )

매개변수

  • 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_dim (int, 선택 사항, 기본값 2240) — 크로스 어텐션 출력의 채널 수입니다.
  • caption_channels (int, 기본값 2304) — 캡션 임베딩의 채널 수입니다.
  • mlp_ratio (float, 기본값 2.5) — GLUMBConv 레이어에서 사용할 확장 비율입니다.
  • dropout (float, 기본값 0.0) — Dropout 확률입니다.
  • attention_bias (bool, 기본값 False) — attention 레이어에서 bias를 사용할지 여부.
  • sample_size (int, 기본값 32) — 입력 latent의 기본 크기입니다.
  • patch_size (int, 기본값 1) — 패치 임베딩 레이어에서 사용할 패치의 크기입니다.
  • norm_elementwise_affine (bool, 기본값 False) — 정규화 레이어에서 elementwise affinity를 사용할지 여부입니다.
  • norm_eps (float, 기본값 1e-6) — 정규화 레이어에 사용되는 epsilon 값입니다.
  • qk_norm (str, 선택 사항, 기본값 None) — 쿼리와 키에 사용할 정규화입니다.

Sana-Video 모델 계열에서 소개된 3D Transformer 모델입니다.

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 )

매개변수

  • hidden_states (torch.Tensor, shape (batch_size, in_channels, num_frames, height, width)) — 입력 hidden_states.
  • encoder_hidden_states (torch.Tensor, shape (batch_size, sequence_len, embed_dims)) — 사용할 조건 임베딩(프롬프트와 같은 입력 조건에서 계산된 임베딩).
  • timestep (torch.LongTensor) — 디노이징 단계를 나타내는 데 사용됩니다.
  • guidance (torch.Tensor, 선택 사항) — Guidance scale 임베딩.
  • encoder_attention_mask (torch.Tensor, 선택 사항) — encoder_hidden_states에 적용되는 크로스 어텐션 마스크.
  • attention_mask (torch.Tensor, 선택 사항) — hidden_states에 적용되는 셀프 어텐션 마스크.
  • attention_kwargs (dict, 선택 사항) — 지정된 경우 diffusers.models.attention_processor의 self.processor에서 정의된 AttentionProcessor로 전달되는 kwargs 사전입니다.
  • controlnet_block_samples (tuple of torch.Tensor, 선택 사항) — 지정된 경우 transformer 블록의 잔차에 추가되는 텐서 목록입니다.
  • return_dict (bool, 선택 사항, 기본값 True) — 단순 tuple 대신 ~models.transformer_2d.Transformer2DModelOutput를 반환할지 여부.

SanaVideoTransformer3DModel의 forward 메서드입니다.

Transformer2DModelOutput

클래스 diffusers.models.modeling_outputs.Transformer2DModelOutput

< >

( sample: torch.Tensor )

매개변수

  • sample (torch.Tensor, shape (batch_size, num_channels, height, width) 또는 Transformer2DModel이 discrete인 경우 (batch size, num_vector_embeds - 1, num_latent_pixels)) — encoder_hidden_states 입력에 조건부인 hidden states 출력입니다. discrete인 경우, 노이즈가 제거된 latent 픽셀에 대한 확률 분포를 반환합니다.

Transformer2DModel의 출력입니다.

Update on GitHub