Diffusers documentation
SanaWMLTX2RefinerTransformer3DModel
SanaWMLTX2RefinerTransformer3DModel
Refiner DiT autoregresif kausal-chunk yang digunakan sebagai tahap 2 dari SanaWMPipeline, digerakkan oleh SanaWMLTX2Refiner.
Secara arsitektur, model ini identik dengan LTX2VideoTransformer3DModel — argumen konfigurasi yang sama, submodul yang sama, nama parameter yang sama — sehingga checkpoint LTX-2 yang dirilis dapat dimuat ke dalamnya tanpa perubahan. Jalur forward-nya berbeda:
- hanya stream video yang dijalankan (cabang cross-attention audio dan audio/video dilewati),
- self-attention berjalan terhadap KV cache sliding-window eksplisit (
SanaWMRefinerKVCache) yang menyimpan attention sink serta riwayat refined terbaru, sehingga komputasi per blok dibatasi dan total biaya refinement berskala linear dengan panjang video, - pemanggil menyediakan video RoPE, yang memungkinkan setiap jendela autoregresif mempertahankan indeks absolut setiap frame dalam video sumber (lihat SanaWMLTX2RefinerTransformer3DModel.build_rotary_emb_for_absolute_positions()).
Model dapat dimuat dengan:
import torch
from diffusers import SanaWMLTX2RefinerTransformer3DModel
transformer = SanaWMLTX2RefinerTransformer3DModel.from_pretrained(
"Efficient-Large-Model/SANA-WM_bidirectional-diffusers",
subfolder="refiner/transformer",
torch_dtype=torch.bfloat16,
)SanaWMLTX2RefinerTransformer3DModel
kelas diffusers.SanaWMLTX2RefinerTransformer3DModel
< source >( in_channels: int = 128out_channels: int | None = 128patch_size: int = 1patch_size_t: int = 1num_attention_heads: int = 32attention_head_dim: int = 128cross_attention_dim: int = 4096vae_scale_factors: tuple[int, int, int] = (8, 32, 32)pos_embed_max_pos: int = 20base_height: int = 2048base_width: int = 2048gated_attn: bool = Falsecross_attn_mod: bool = Falseaudio_in_channels: int = 128audio_out_channels: int | None = 128audio_patch_size: int = 1audio_patch_size_t: int = 1audio_num_attention_heads: int = 32audio_attention_head_dim: int = 64audio_cross_attention_dim: int = 2048audio_scale_factor: int = 4audio_pos_embed_max_pos: int = 20audio_sampling_rate: int = 16000audio_hop_length: int = 160audio_gated_attn: bool = Falseaudio_cross_attn_mod: bool = Falsenum_layers: int = 48activation_fn: str = 'gelu-approximate'qk_norm: str = 'rms_norm_across_heads'norm_elementwise_affine: bool = Falsenorm_eps: float = 1e-06caption_channels: int = 3840attention_bias: bool = Trueattention_out_bias: bool = Truerope_theta: float = 10000.0rope_double_precision: bool = Truecausal_offset: int = 1timestep_scale_multiplier: int = 1000cross_attn_timestep_scale_multiplier: int = 1000rope_type: str = 'interleaved'use_prompt_embeddings = Trueperturbed_attn: bool = Falseff_bias: bool = Trueaudio_ff_bias: bool = Trueuse_prompt_adaln_single: bool = Trueuse_keyframes_abs_pos_embedding: bool = False )
Parameter
- in_channels (
int, defaultnya128) — Jumlah channel pada input. - out_channels (
int, defaultnya128) — Jumlah channel pada output. - patch_size (
int, defaultnya1) — Ukuran patch spasial yang akan digunakan di lapisan patch embedding. - patch_size_t (
int, defaultnya1) — Ukuran patch temporal yang akan digunakan di lapisan patch embedding. - num_attention_heads (
int, defaultnya32) — Jumlah head yang digunakan untuk multi-head attention. - attention_head_dim (
int, defaultnya128) — Jumlah saluran di setiap head. - cross_attention_dim (
int, defaultnya4096) — Jumlah saluran untuk kepala cross attention. - num_layers (
int, defaultnya48) — Jumlah lapisan blok Transformer yang akan digunakan. - activation_fn (
str, defaultnya"gelu-approximate") — Fungsi aktivasi yang digunakan dalam feed-forward. - qk_norm (
str, default"rms_norm_across_heads") — Lapisan normalisasi yang digunakan. - rope_type (
str, defaultnya"interleaved") — Aplikasi RoPE mana yang akan digunakan ("interleaved"atau"split").
Transformer autoregresif penyempurna kausal-chunk yang digunakan sebagai tahap 2 SANA-WM.
Secara arsitektur identik dengan LTX2VideoTransformer3DModel — argumen config yang sama, submodule yang sama, nama parameter yang sama — sehingga checkpoint LTX-2 yang dirilis dapat dimuat ke dalamnya tanpa perubahan. Yang berbeda adalah forward pass:
- hanya stream video yang dijalankan (cabang cross-attention audio dan audio/video dilewati),
- self-attention berjalan terhadap cache KV sliding-window eksplisit (
SanaWMRefinerKVCache) yang menyimpan attention sink serta riwayat refined terbaru, sehingga biaya refinement dibatasi per blok AR dan berskala linear dengan panjang video, - pemanggil menyediakan RoPE video, yang memungkinkan setiap jendela AR mempertahankan indeks absolut setiap frame dalam video sumber (lihat build_rotary_emb_for_absolute_positions()).
Argumen yang tersisa mencerminkan LTX2VideoTransformer3DModel satu per satu. Argumen dan submodul sisi audio dipertahankan murni agar bobot audio checkpoint dapat diproses bolak-balik; mereka tidak digunakan oleh forward refiner.
build_rotary_emb_for_absolute_positions
< source >( batch_size: intframe_positions: list[int]height: intwidth: intdevice: devicefps: float ) → tuple[torch.Tensor, torch.Tensor]
Parameter
- batch_size (
int) — Ukuran batch untuk menyiarkan koordinat. - frame_positions (
list[int]) — Indeks frame laten absolut yang dicakup oleh jendela ini. - height (
int), width (int) — Resolusi spasial laten. - device (
torch.device) — Perangkat untuk membangun koordinat di atasnya. - fps (
float) — Laju bingkai video, yang menggerakkan penskalaan RoPE temporal LTX-2.
Mengembalikan
tuple[torch.Tensor, torch.Tensor]
tuple RoPE (cos, sin).
Bangun video RoPE untuk daftar eksplisit indeks frame laten absolut.
SanaWMLTX2AudioVideoRotaryPosEmbed.prepare_video_coords mengasumsikan torch.arange(num_frames) yang berurutan,
yang tidak masalah untuk inferensi bidireksional. Refiner AR sliding-window justru perlu mempertahankan indeks
absolut setiap frame dalam video sumber, sehingga RoPE menangkap fase temporal yang benar di seluruh jendela [sink + recent + active].
forward
< source >( hidden_states: Tensorencoder_hidden_states: Tensortimestep: Tensorvideo_rotary_emb: tuple[torch.Tensor, torch.Tensor]encoder_attention_mask: typing.Optional[torch.Tensor] = Nonekv_cache: diffusers.models.transformers.transformer_sana_wm_refiner.SanaWMRefinerKVCache | None = Nonekv_cache_mode: str | None = Noneattention_kwargs: dict | None = Nonereturn_dict: bool = True ) → Transformer2DModelOutput or tuple
Parameter
- hidden_states (
torch.Tensor) — Latens video yang telah dipatch dari blok aktif, dengan bentuk(batch_size, num_video_tokens, in_channels). - encoder_hidden_states (
torch.Tensor) — Embedding teks dengan bentuk(batch_size, text_seq_len, caption_channels). - timestep (
torch.Tensor) — Timestep dengan bentuk(batch_size, num_video_tokens), yang sudah diskalakan olehself.config.timestep_scale_multiplier. - video_rotary_emb (
tuple[torch.Tensor, torch.Tensor]) —(cos, sin)RoPE untuk posisi frame absolut dari blok aktif, sebagaimana dikembalikan oleh build_rotary_emb_for_absolute_positions(). - encoder_attention_mask (
torch.Tensor, opsional) — Mask perhatian teks multiplikatif dengan bentuk(batch_size, text_seq_len). - kv_cache (
SanaWMRefinerKVCache, opsional) — KV cache sliding-window yang menyimpan attention sink per-layer dan riwayat refined terbaru, sertasink_peRoPE bersama. Wajib diisi setiap kalikv_cache_modedisetel. - kv_cache_mode (
str, opsional) — Salah satu dari:"inject": perhatikan K/V[sink + history + current](langkah-langkah denoising)."capture_pre_rope": tanpa awalan; catat K/V pre-RoPE dari forward ini ke dalam cache (digunakan sekali untuk menabur benih attention sink dari latens stage-1 mentah)."inject_and_capture_post_rope": perhatikan[sink + history + current]K/V dan catat K/V post-RoPE blok ini ke dalam cache agar dapat ditambahkan ke history.
Ketika
None, blok menjalankan full self-attention biasa hanya pada token saat ini. - attention_kwargs (
dict, opsional) — Kwargs opsional yang diteruskan ke penanganan skala LoRA. - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikan Transformer2DModelOutput alih-alih tuple biasa.
Mengembalikan
Transformer2DModelOutput atau tuple
kecepatan yang diprediksi untuk blok aktif, dengan bentuk (batch_size, num_video_tokens, out_channels).
Lewatan maju hanya video atas satu blok AR.
SanaWMRefinerKVCache
kelas diffusers.models.transformers.transformer_sana_wm_refiner.SanaWMRefinerKVCache
< source >( num_layers: int )
Wadah yang menyimpan satu [SanaWMRefinerKVLayerCache] per blok transformer, ditambah sink RoPE bersama.
Ini mengimplementasikan kontrak KV-cache rf_shifted_sink yang digunakan saat pelatihan refiner stage-2 SANA-WM. Penyempurnaan bersifat chunk-causal: block_size frame laten didenoise sekaligus sambil memperhatikan jendela terbatas dari [attention sink + riwayat terbaru + blok aktif] K/V.
sink_pe: tuple RoPE (cos, sin) untuk frame sink, dibangun ulang per jendela AR padasink_rope_offsetyang bergeser sehingga sink berada tepat sebelum cache kerja yang terbatas. Dibagikan antar lapisan karena RoPE tidak bergantung pada lapisan.
SanaWMRefinerKVLayerCache
kelas diffusers.models.transformers.transformer_sana_wm_refiner.SanaWMRefinerKVLayerCache
< source >( )
Cache KV per layer untuk refiner AR chunk-causal tahap-2 SANA-WM.
Menyimpan dua bagian dari prefix sliding-window yang menjadi fokus self-attention refiner, ditambah slot untuk membaca kembali K/V yang ditangkap oleh forward terakhir. Semua tensor berukuran (batch_size, num_tokens, inner_dim) (yaitu sebelum unflatten per-head), sesuai dengan layout yang digabungkan oleh self-attention refiner.
sink_k_pre/sink_v: pre-RoPE K/V dari frame attention-sink, diambil sekali dari latens stage-1 mentah. Nilai ini disimpan dalam bentuk pre-RoPE sehingga setiap jendela AR dapat menerapkan ulang RoPE pada offset sink yang digeser sesuai posisinya (SanaWMRefinerKVCache.sink_pe).history_k/history_v: post-RoPE K/V dari frame-frame terbaru yang sudah disempurnakan, siap untuk digabungkan apa adanya.captured_k_pre/captured_v_predancaptured_k_post/captured_v_post: slot readback yang ditulis olehkv_cache_modecapture.
Ambil K/V pasca-RoPE yang ditangkap oleh forward terakhir.
Ambil K/V pra-RoPE yang ditangkap oleh forward terakhir.
Kembalikan K/V riwayat-recent pasca-RoPE, atau None jika kosong.
Kembalikan sink K/V pre-RoPE, atau None jika belum ditangkap (atau kosong).
Simpan K/V pasca-RoPE yang dihasilkan oleh forward saat ini.
Simpan K/V pra-RoPE yang dihasilkan oleh forward saat ini.
Simpan K/V riwayat terbaru pasca-RoPE.
Simpan K/V sink pra-RoPE.
Transformer2DModelOutput
kelas diffusers.models.modeling_outputs.Transformer2DModelOutput
< source >( sample: torch.Tensor )
Parameter
- sample (
torch.Tensordengan bentuk(batch_size, num_channels, height, width)atau(batch size, num_vector_embeds - 1, num_latent_pixels)jika Transformer2DModel bersifat diskrit) — Output hidden states yang dikondisikan pada inputencoder_hidden_states. Jika diskrit, mengembalikan distribusi probabilitas untuk latent pixels yang tidak berisik.
Output dari Transformer2DModel.