Diffusers documentation
SanaVideoTransformer3DModel
SanaVideoTransformer3DModel
Một mô hình Diffusion Transformer cho dữ liệu 3D (video) từ SANA-Video: Efficient Video Generation with Block Linear Diffusion Transformer của NVIDIA và MIT HAN Lab, bởi 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.
Tóm tắt từ bài báo là:
Chúng tôi giới thiệu SANA-Video, một mô hình khuếch tán nhỏ có khả năng tạo video hiệu quả với độ phân giải lên đến 720x1280 và thời lượng dài tới vài phút. SANA-Video tổng hợp các video độ phân giải cao, chất lượng cao và dài với sự tương thích mạnh mẽ giữa văn bản và video ở tốc độ nhanh đáng kể, có thể triển khai trên GPU RTX 5090. Hai thiết kế cốt lõi đảm bảo việc tạo video hiệu quả, hiệu suất cao và dài của chúng tôi: (1) Linear DiT: Chúng tôi tận dụng chú ý tuyến tính (linear attention) làm thao tác cốt lõi, hiệu quả hơn so với chú ý thông thường (vanilla attention) khi xử lý số lượng token lớn trong tạo video. (2) Bộ nhớ đệm KV có bộ nhớ không đổi cho Block Linear Attention: chúng tôi thiết kế phương pháp tự hồi quy theo khối (block-wise autoregressive) cho việc tạo video dài bằng cách sử dụng trạng thái bộ nhớ không đổi, được suy ra từ các tính chất tích lũy của chú ý tuyến tính. Bộ nhớ đệm KV này cung cấp ngữ cảnh toàn cục cho Linear DiT với chi phí bộ nhớ cố định, loại bỏ nhu cầu về bộ nhớ đệm KV truyền thống và cho phép tạo video dài vài phút một cách hiệu quả. Ngoài ra, chúng tôi khám phá các bộ lọc dữ liệu và chiến lược huấn luyện mô hình hiệu quả, thu hẹp chi phí huấn luyện xuống còn 12 ngày trên 64 GPU H100, chỉ bằng 1% chi phí của MovieGen. Với chi phí thấp, SANA-Video đạt hiệu suất cạnh tranh so với các mô hình khuếch tán nhỏ tiên tiến hiện đại (ví dụ: Wan 2.1-1.3B và SkyReel-V2-1.3B) trong khi nhanh hơn 16 lần về độ trễ đo được. Hơn nữa, SANA-Video có thể được triển khai trên GPU RTX 5090 với độ chính xác NVFP4, tăng tốc độ suy luận khi tạo video 720p dài 5 giây từ 71 giây xuống 29 giây (tăng tốc 2,4 lần). Tóm lại, SANA-Video cho phép tạo video chất lượng cao với chi phí thấp.
Mô hình có thể được tải bằng đoạn mã sau.
from diffusers import SanaVideoTransformer3DModel
import torch
transformer = SanaVideoTransformer3DModel.from_pretrained("Efficient-Large-Model/SANA-Video_2B_480p_diffusers", subfolder="transformer", dtype=torch.bfloat16)SanaVideoTransformer3DModel
lớp 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 )
Tham số
- in_channels (
int, mặc định là16) — Số lượng kênh trong đầu vào. - out_channels (
int, tùy chọn, mặc định là16) — Số lượng kênh trong đầu ra. - num_attention_heads (
int, mặc định là20) — Số lượng đầu (heads) được sử dụng cho cơ chế chú ý đa đầu (multi-head attention). - attention_head_dim (
int, mặc định là112) — Số lượng kênh trong mỗi head. - num_layers (
int, mặc định là20) — Số lượng lớp khối Transformer cần sử dụng. - num_cross_attention_heads (
int, tùy chọn, mặc định là20) — Số lượng heads sử dụng cho cross-attention. - cross_attention_head_dim (
int, tùy chọn, mặc định là112) — Số lượng kênh trong mỗi head cho cross-attention. - cross_attention_dim (
int, tùy chọn, mặc định là2240) — Số lượng kênh trong đầu ra của cross-attention. - caption_channels (
int, mặc định là2304) — Số lượng kênh trong các embedding mô tả. - mlp_ratio (
float, mặc định là2.5) — Tỷ lệ mở rộng được sử dụng trong lớp GLUMBConv. - dropout (
float, mặc định là0.0) — Xác suất dropout. - attention_bias (
bool, mặc định làFalse) — Có sử dụng bias trong lớp attention hay không. - sample_size (
int, mặc định là32) — Kích thước cơ bản của latent đầu vào. - patch_size (
int, mặc định là1) — Kích thước của các patch được sử dụng trong lớp nhúng patch. - norm_elementwise_affine (
bool, mặc định làFalse) — Có sử dụng tính liên kết từng phần tử trong lớp chuẩn hóa hay không. - norm_eps (
float, mặc định là1e-6) — Giá trị epsilon cho lớp chuẩn hóa. - qk_norm (
str, tùy chọn, mặc định làNone) — Phương pháp chuẩn hóa được sử dụng cho query và key.
Mô hình Transformer 3D được giới thiệu trong dòng mô hình 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 )
Tham số
- hidden_states (
torch.Tensorcó hình dạng(batch_size, in_channels, num_frames, height, width)) —hidden_statesđầu vào. - encoder_hidden_states (
torch.Tensorcó hình dạng(batch_size, sequence_len, embed_dims)) — Các embedding điều kiện (embedding được tính từ các điều kiện đầu vào như prompt) cần sử dụng. - timestep (
torch.LongTensor) — Dùng để chỉ bước khử nhiễu. - guidance (
torch.Tensor, tùy chọn) — Nhúng thang độ hướng dẫn. - encoder_attention_mask (
torch.Tensor, tùy chọn) — Mặt nạ cross-attention được áp dụng choencoder_hidden_states. - attention_mask (
torch.Tensor, tùy chọn) — Mặt nạ self-attention được áp dụng chohidden_states. - attention_kwargs (
dict, tùy chọn) — Một từ điển kwargs, nếu được chỉ định, sẽ được truyền đếnAttentionProcessornhư đã định nghĩa dướiself.processortrong diffusers.models.attention_processor. - controlnet_block_samples (
tuplecủatorch.Tensor, tùy chọn) — Một danh sách các tensor mà nếu được chỉ định sẽ được cộng vào phần dư (residuals) của các khối transformer. - return_dict (
bool, tùy chọn, mặc định làTrue) — Có nên trả về một~models.transformer_2d.Transformer2DModelOutputthay vì một tuple thông thường hay không.
Phương thức forward của SanaVideoTransformer3DModel.
Transformer2DModelOutput
lớp diffusers.models.modeling_outputs.Transformer2DModelOutput
< source >( sample: torch.Tensor )
Tham số
- sample (
torch.Tensorcó hình dạng(batch_size, num_channels, height, width)hoặc(batch size, num_vector_embeds - 1, num_latent_pixels)nếu Transformer2DModel là rời rạc) — Trạng thái ẩn đầu ra được điều kiện bởi đầu vàoencoder_hidden_states. Nếu là rời rạc, trả về các phân phối xác suất cho các pixel tiềm ẩn không nhiễu.
Đầu ra của Transformer2DModel.