Diffusers documentation
SanaWMLTX2RefinerTransformer3DModel
SanaWMLTX2RefinerTransformer3DModel
O refiner DiT autoregressivo causal por blocos usado como etapa 2 do SanaWMPipeline, dirigido por SanaWMLTX2Refiner.
Ele é arquitetonicamente idêntico ao LTX2VideoTransformer3DModel — mesmos argumentos de configuração, mesmos submódulos, mesmos nomes de parâmetros — de modo que um checkpoint LTX-2 publicado é carregado nele sem alterações. A passagem para frente difere:
- somente o fluxo de vídeo é executado (os ramos de atenção cruzada de áudio e áudio/vídeo são ignorados),
- o self-attention é executado contra um cache KV de janela deslizante explícito (
SanaWMRefinerKVCache) que armazena o sink de atenção e o histórico refinado recente, de modo que o cálculo por bloco é limitado e o custo total de refinamento escala linearmente com o comprimento do vídeo, - o chamador fornece o RoPE do vídeo, o que permite que cada janela autoregressiva mantenha o índice absoluto de cada quadro no vídeo de origem (veja SanaWMLTX2RefinerTransformer3DModel.build_rotary_emb_for_absolute_positions()).
O modelo pode ser carregado com:
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
classe 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 = (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 )
Parâmetros
- in_channels (
int, padrão128) — O número de canais na entrada. - out_channels (
int, padrão128) — O número de canais na saída. - patch_size (
int, padrão1) — O tamanho dos patches espaciais a serem usados na camada de incorporação de patches. - patch_size_t (
int, padrão1) — O tamanho dos patches temporais a serem usados na camada de incorporação de patches. - num_attention_heads (
int, padrão32) — O número de cabeças a serem usadas para a atenção multi-cabeça. - attention_head_dim (
int, padrão128) — O número de canais em cada head. - cross_attention_dim (
int, padrão4096) — O número de canais para as cabeças de atenção cruzada. - num_layers (
int, padrão48) — O número de blocos de camadas de Transformer a serem usados. - activation_fn (
str, padrão"gelu-approximate") — Função de ativação a ser usada no feed-forward. - qk_norm (
str, padrão"rms_norm_across_heads") — A camada de normalização a ser usada. - rope_type (
str, padrão"interleaved") — Qual aplicação de RoPE usar ("interleaved"ou"split").
O transformer autoregressivo refinador causal por blocos usado como etapa 2 do SANA-WM.
Arquiteturalmente idêntico a LTX2VideoTransformer3DModel — mesmos argumentos de configuração, mesmos submódulos, mesmos nomes de parâmetros — de modo que um checkpoint LTX-2 publicado é carregado nele sem alterações. O que difere é o forward pass:
- somente o fluxo de vídeo é executado (os ramos de atenção cruzada de áudio e áudio/vídeo são ignorados),
- o self-attention é executado contra um cache KV de janela deslizante explícito (
SanaWMRefinerKVCache) que armazena o sink de atenção e o histórico refinado recente, de modo que o custo de refinamento é limitado por bloco AR e escala linearmente com o comprimento do vídeo, - o chamador fornece o RoPE do vídeo, o que permite que cada janela AR mantenha o índice absoluto de cada quadro no vídeo de origem (veja build_rotary_emb_for_absolute_positions()).
Os argumentos restantes espelham os de LTX2VideoTransformer3DModel um a um. Os argumentos e submódulos do lado de áudio são mantidos puramente para que os pesos de áudio do checkpoint façam ida e volta; eles não são usados pelo forward do refiner.
build_rotary_emb_for_absolute_positions
< source >( batch_size: intframe_positions: listheight: intwidth: intdevice: devicefps: float ) → tuple[torch.Tensor, torch.Tensor]
Parâmetros
- batch_size (
int) — Tamanho do lote para o qual as coordenadas devem ser transmitidas. - frame_positions (
list[int]) — Índices absolutos de quadros latentes cobertos por esta janela. - height (
int), width (int) — Resolução espacial latente. - device (
torch.device) — Dispositivo em que as coordenadas serão construídas. - fps (
float) — Taxa de quadros do vídeo, que controla a escalação do RoPE temporal do LTX-2.
Retorna
tuple[torch.Tensor, torch.Tensor]
a tupla RoPE (cos, sin).
Construa o RoPE de vídeo para uma lista explícita de índices absolutos de quadros latentes.
SanaWMLTX2AudioVideoRotaryPosEmbed.prepare_video_coords pressupõe um torch.arange(num_frames) contíguo,
o que é adequado para inferência bidirecional. O refinador AR de janela deslizante, por sua vez, precisa manter o
índice absoluto de cada quadro no vídeo de origem, para que o RoPE capture a fase temporal correta ao longo da janela [sink + recent + active].
forward
< source >( hidden_states: Tensorencoder_hidden_states: Tensortimestep: Tensorvideo_rotary_emb: tupleencoder_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
Parâmetros
- hidden_states (
torch.Tensor) — Latentes de vídeo em patches do bloco ativo, com forma(batch_size, num_video_tokens, in_channels). - encoder_hidden_states (
torch.Tensor) — Incorporações de texto com forma(batch_size, text_seq_len, caption_channels). - timestep (
torch.Tensor) — Timestep de forma(batch_size, num_video_tokens), já escalado porself.config.timestep_scale_multiplier. - video_rotary_emb (
tuple[torch.Tensor, torch.Tensor]) — O RoPE(cos, sin)para as posições absolutas do quadro ativo, conforme retornado por build_rotary_emb_for_absolute_positions(). - encoder_attention_mask (
torch.Tensor, opcional) — Máscara de atenção multiplicativa do texto com forma(batch_size, text_seq_len). - kv_cache (
SanaWMRefinerKVCache, opcional) — Cache KV de janela deslizante que armazena o attention sink por camada e o histórico refinado recente, além dosink_peRoPE compartilhado. Obrigatório sempre quekv_cache_modeestiver definido. - kv_cache_mode (
str, opcional) — Um dos seguintes:"inject": atende a[sink + history + current]K/V (as etapas de desruido)."capture_pre_rope": sem prefixo; registra o K/V pré-RoPE deste forward no cache (usado uma vez para semeiar o attention sink a partir dos latentes brutos do estágio 1)."inject_and_capture_post_rope": atenda a[sink + history + current]K/V e registre o K/V pós-RoPE deste bloco no cache para que ele possa ser adicionado ao histórico.
Quando
None, o bloco executa uma autoatenção completa simples apenas sobre os tokens atuais. - attention_kwargs (
dict, opcional) — Kwargs opcionais encaminhados para o tratamento da escala do LoRA. - return_dict (
bool, opcional, padrãoTrue) — Se deve retornar um Transformer2DModelOutput em vez de uma tupla simples.
Retorna
Transformer2DModelOutput ou tuple
a velocidade prevista para o bloco ativo, de forma (batch_size, num_video_tokens, out_channels).
Passada de propagação direta apenas de vídeo sobre um único bloco AR.
SanaWMRefinerKVCache
classe diffusers.models.transformers.transformer_sana_wm_refiner.SanaWMRefinerKVCache
< source >( num_layers: int )
Contêiner que mantém uma [SanaWMRefinerKVLayerCache] por bloco do transformer, além do RoPE de sink compartilhado.
Isso implementa o contrato de KV-cache rf_shifted_sink com o qual o refinador do estágio 2 do SANA-WM foi treinado. O refinamento é causal por blocos: block_size quadros latentes são desruidos de cada vez, enquanto prestam atenção a uma janela limitada de [attention sink + histórico recente + bloco ativo] K/V.
sink_pe: a tupla RoPE (cos, sin) para os quadros de sink, reconstruída a cada janela de AR nosink_rope_offsetdeslizante, de modo que o sink fique imediatamente antes do cache de trabalho limitado. Compartilhada entre as camadas, pois o RoPE não depende da camada.
SanaWMRefinerKVLayerCache
classe diffusers.models.transformers.transformer_sana_wm_refiner.SanaWMRefinerKVLayerCache
< source >( )
Cache de KV por camada para o refinador AR causal por blocos do estágio 2 do SANA-WM.
Contém as duas metades do prefixo da janela deslizante ao qual a autoatenção do refiner presta atenção, além de um slot para ler de volta o K/V capturado pelo último forward. Todos os tensors são (batch_size, num_tokens, inner_dim) (ou seja, antes do unflatten por cabeça), correspondendo ao layout que a autoatenção do refiner concatena.
sink_k_pre/sink_v: pre-RoPE K/V dos quadros de attention-sink, capturados uma única vez dos latentes brutos da etapa 1. Eles são armazenados pré-RoPE para que cada janela AR possa reaplicar o RoPE em seu próprio deslocamento de sink (SanaWMRefinerKVCache.sink_pe).history_k/history_v: K/V post-RoPE dos quadros recentes já refinados, prontos para serem concatenados diretamente.captured_k_pre/captured_v_preecaptured_k_post/captured_v_post: slots de leitura gravados pelos modos de capturakv_cache_mode.
Extrair o K/V pós-RoPE capturado pelo último forward.
Pegue o K/V pré-RoPE capturado pelo último forward.
Retorna o K/V do histórico recente pós-RoPE, ou None se estiver vazio.
Retorna o K/V de sink pré-RoPE, ou None se ele não tiver sido capturado (ou estiver vazio).
Armazene o K/V pós-RoPE produzido pelo forward atual.
Armazene o K/V pré-RoPE produzido pelo forward atual.
Armazene o K/V do histórico recente pós-RoPE.
Armazene o K/V do sink pré-RoPE.
Transformer2DModelOutput
classe diffusers.models.modeling_outputs.Transformer2DModelOutput
< source >( sample: torch.Tensor )
Parâmetros
- sample (
torch.Tensorde forma(batch_size, num_channels, height, width)ou(batch size, num_vector_embeds - 1, num_latent_pixels)se Transformer2DModel for discreto) — A saída dos estados ocultos condicionada à entradaencoder_hidden_states. Se discreto, retorna distribuições de probabilidade para os pixels latentes sem ruído.
A saída de Transformer2DModel.