Diffusers documentation
AnyFlowFARTransformer3DModel
AnyFlowFARTransformer3DModel
El Transformer 3D causal (FAR) utilizado por AnyFlowFARPipeline —
la variante FAR de AnyFlow. Consulte la página de AnyFlowFARPipeline para ver el paper, los autores y los checkpoints publicados. Extiende
el backbone de Wan2.1 v0.35.1 con tres adiciones:
- Máscara de bloques causal de FAR mediante
torch.nn.attention.flex_attention, que admite la generación autoregresiva por fragmentos tal como se introdujo en FAR. - Incrustado de parches de fotogramas comprimidos (
far_patch_embedding) para los fotogramas de contexto (ya generados), inicializado en caliente a partir delpatch_embeddingde resolución completa en el momento de la construcción mediante interpolación trilineal. - Incrustado de flujo-mapa de doble paso temporal (igual que
AnyFlowTransformer3DModel) — cada llamada de adelante se condiciona tanto en el paso temporal de origentcomo en el paso temporal de destinor.
El programa de bloques predeterminado (chunk_partition) se almacena en la configuración del modelo; los puntos de control de NVIDIA AnyFlow-FAR publicados utilizan [1, 3, 3, 3, 3, 3, 3, 2] para la configuración canónica de 81 fotogramas. forward acepta una sobrescritura de chunk_partition por llamada, por lo que el mismo punto de control también maneja otras configuraciones de num_frames sin necesidad de volver a entrenar.
from diffusers import AnyFlowFARTransformer3DModel
# Causal AnyFlow checkpoint (FAR):
transformer = AnyFlowFARTransformer3DModel.from_pretrained(
"nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", subfolder="transformer"
)AnyFlowFARTransformer3DModel
clase diffusers.AnyFlowFARTransformer3DModel
< source >( patch_size: typing.Tuple[int] = (1, 2, 2)compressed_patch_size: typing.Tuple[int] = (1, 4, 4)full_chunk_limit: int = 3num_attention_heads: int = 40attention_head_dim: int = 128in_channels: int = 16out_channels: int = 16text_dim: int = 4096freq_dim: int = 256ffn_dim: int = 13824num_layers: int = 40cross_attn_norm: bool = Trueeps: float = 1e-06image_dim: typing.Optional[int] = Nonerope_max_seq_len: int = 1024gate_value: float = 0.25deltatime_type: str = 'r'chunk_partition: typing.Tuple[int, ...] = (1, 3, 3, 3, 3, 3, 3, 2) )
Parámetros
- patch_size (Tuple[int], por defecto (1, 2, 2)) — Dimensiones del parche 3D para fragmentos a resolución completa.
- compressed_patch_size (Tuple[int], por defecto (1, 4, 4)) — Dimensiones de parche más grandes para los fragmentos comprimidos FAR (contexto).
- full_chunk_limit (int, por defecto 3) —
Número máximo de fragmentos a resolución completa antes de que los fragmentos anteriores se degraden a contexto FAR comprimido. Los
puntos de control publicados utilizan
3. - num_attention_heads (int, por defecto 40) — Número de cabezas de atención.
- attention_head_dim (int, por defecto 128) — El número de canales en cada cabeza.
- in_channels (int, por defecto 16) — El número de canales en el latente de entrada.
- out_channels (int, por defecto 16) — El número de canales en el latente de salida.
- text_dim (int, por defecto 4096) — Dimensión de entrada para los embeddings de texto (UMT5).
- freq_dim (int, por defecto 256) — Dimensión para las incrustaciones sinusoidales de tiempo.
- ffn_dim (int, por defecto 13824) — Dimensión intermedia en la red feed-forward.
- num_layers (int, por defecto 40) — Número de bloques de transformer.
- cross_attn_norm (bool, por defecto True) — Habilita la normalización de atención cruzada.
- eps (float, por defecto 1e-6) — Epsilon para las capas de normalización.
- image_dim (Optional[int], opcional, por defecto None) — Dimensión de la incrustación de imagen para el condicionamiento I2V.
- rope_max_seq_len (int, por defecto 1024) — Longitud máxima de secuencia utilizada para precalcular las frecuencias de posición rotativa.
- gate_value (float, por defecto 0.25) — Puerta de mezcla entre las incrustaciones del paso de tiempo de origen y las del paso de tiempo delta.
- deltatime_type (str, por defecto ‘r’) —
O bien
"r"(delta es el paso de tiempo objetivo) o"t-r"(delta es el intervalo absoluto). - chunk_partition (Tuple[int, …], por defecto (1, 3, 3, 3, 3, 3, 3, 2)) —
Números de fotogramas por bloque utilizados por defecto en el pipeline. Los puntos de control NVIDIA AnyFlow-FAR publicados apuntan a
num_frames=81(21 fotogramas latentes con un paso temporal de VAE de 4) divididos como1 + 3*6 + 2. Unnum_framesdiferente requiere una coincidencia dechunk_partitionpasada a AnyFlowFARPipeline.call() (y de igual manera aforward).
Transformador 3D causal (FAR) para el muestreo de mapas de flujo de AnyFlow con generación autoregresiva por bloques.
Extiende el backbone de Wan2.1 v0.35.1 con:
- Máscara de bloque causal FAR mediante
torch.nn.attention.flex_attention, con soporte para generación autoregresiva por bloques (FAR). - Incrustado de parches de fotogramas comprimidos
far_patch_embeddingpara los fotogramas de contexto (ya generados), inicializado a partir depatch_embeddingmediante interpolación trilineal, de modo que un modelo recién construido ya parte de un punto de partida razonable incluso antes del ajuste fino con LoRA. - Incrustado de flujo-mapa de doble paso de tiempo para muestreo de cualquier paso (igual que
AnyFlowTransformer3DModel).
Usa AnyFlowTransformer3DModel en su lugar para T2V bidireccional simple: esa variante omite el enmascaramiento causal de FAR y far_patch_embedding, y es un 5–10 % más pequeña.
build_attention_mask
< source >( chunk_partition: typing.List[int]height: intwidth: inthas_clean_context: bool = Falsedevice: typing.Optional[torch.device] = Nonemode: str = 'train' ) → ~torch.nn.attention.flex_attention.BlockMask
Parámetros
- chunk_partition — número de fotogramas por chunk (debe sumar el número total de fotogramas latentes).
- height, width — dimensiones espaciales latentes.
- has_clean_context —
Truecuandoclean_hidden_statesse pasará a través deforward(entrenamiento V2V/I2V); solo esta bandera de presencia afecta al diseño de la máscara. - device — dispositivo para el
BlockMaskresultante. La máscara no se mueve automáticamente condevice_map="auto"; créala en el mismo dispositivo donde estarán las entradas del transformer. - mode —
"train"(corresponde a_forward_train) o"cache"(corresponde a_forward_cache). La ruta de inferencia autoregresiva_forward_inferenceatiende a través de la caché KV y no tiene modo aquí.
Devuelve
~torch.nn.attention.flex_attention.BlockMask
máscara causal que abarca el diseño FAR, rellena hasta un múltiplo de 128 a lo largo de la dimensión de secuencia (el requisito de tamaño de bloque de BlockMask).
Lanza
ValueError
ValueError— simodeno es ni"train"ni"cache".
Construya previamente la ~torch.nn.attention.flex_attention.BlockMask causal fuera de forward.
Pase el resultado a través del argumento attention_mask de forward para hacer que todo el transformador sea compatible con torch.compile(fullgraph=True). Sin una máscara preestablecida, forward recurre a construirla internamente; esa ruta utiliza flex_attention.create_block_mask(_compile=False) y rompe el grafo de compilación.
forward
< source >( hidden_states: Tensortimestep: Tensorr_timestep: Tensorencoder_hidden_states: Tensorchunk_partition: typing.List[int]encoder_hidden_states_image: typing.Optional[torch.Tensor] = Noneclean_hidden_states: typing.Optional[torch.Tensor] = Noneclean_timestep: typing.Optional[torch.Tensor] = Nonekv_cache: typing.Optional[typing.List[typing.Dict[str, torch.Tensor]]] = Nonekv_cache_flag: typing.Optional[typing.Dict[str, typing.Any]] = Noneattention_mask: typing.Optional[torch.nn.attention.flex_attention.BlockMask] = Noneattention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = Nonereturn_dict: bool = True ) → [~models.transformer_2d.Transformer2DModelOutput], [AnyFlowFARTransformerOutput] or tuple
Parámetros
- hidden_states (torch.Tensor) —
Entrada latente de forma
(B, F, C, H, W). - timestep (torch.Tensor) — Paso de tiempo t del mapa de flujo de origen (más ruidoso).
- r_timestep (torch.Tensor) — Paso de tiempo r del mapa de flujo objetivo (más limpio).
- encoder_hidden_states (torch.Tensor) — Incrustaciones de texto de UMT5.
- chunk_partition (List[int]) —
Número de fotogramas por bloque; el total debe coincidir con el número de fotogramas latentes en
hidden_states. - encoder_hidden_states_image (torch.Tensor, opcional) — Incrustado de imagen I2V; se concatena antes de los tokens de texto cuando se proporciona.
- clean_hidden_states (torch.Tensor, opcional) — Fotogramas de condicionamiento limpios (sin ruido) utilizados por el despliegue de entrenamiento.
- clean_timestep (torch.Tensor, opcional) — Pasos de tiempo para los fotogramas de condicionamiento limpios en el despliegue de entrenamiento.
- kv_cache (List[Dict[str, torch.Tensor]], opcional) — Caché KV por bloque para inferencia autoregresiva. None selecciona la ruta de entrenamiento.
- kv_cache_flag (Dict[str, Any], opcional) —
Metadatos de la caché KV (p. ej., la bandera
is_cache_stepy los recuentos de tokens). - attention_mask (BlockMask, opcional) —
Máscara causal predefinida, generalmente construida mediante
build_attention_mask. La consumen las rutas de entrenamiento y de prellenado de la caché KV; la ruta de inferencia autoregresiva atiende a través de la caché KV y no utiliza una máscara completa. CuandoNone, las rutas de entrenamiento / caché construyen la máscara internamente; esa alternativa no es segura para la compilación (la función subyacenteflex_attention.create_block_maskrompe el grafo bajofullgraph=True), por lo que pase una máscara predefinida siempre que envuelvaforwardentorch.compile. - attention_kwargs (dict, opcional) — Se reenvía a los procesadores de atención.
- return_dict (bool, opcional, valor predeterminado True) — Si es False, devuelve tuplas posicionales en lugar de una dataclass de salida.
Devuelve
[~models.transformer_2d.Transformer2DModelOutput], [AnyFlowFARTransformerOutput] o tuple
Cuando return_dict es False, se devuelve una tuple simple. En caso contrario, el despliegue de entrenamiento causal (kv_cache is None) devuelve un [~models.transformer_2d.Transformer2DModelOutput], mientras que las rutas de prellenado de caché e inferencia autoregresiva devuelven un [AnyFlowFARTransformerOutput].
Paso de propagación hacia adelante causal de FAR. Se despacha a una de tres rutas internas:
kv_cache is None→ despliegue de entrenamiento causal (devuelveTransformer2DModelOutput).kv_cache is not Noneykv_cache_flag["is_cache_step"]→ cache-prefill (devuelveAnyFlowFARTransformerOutputconsample=None).- En caso contrario → paso de inferencia autoregresivo (devuelve
AnyFlowFARTransformerOutput).
AnyFlowFARTransformerOutput
clase diffusers.models.transformers.transformer_anyflow_far.AnyFlowFARTransformerOutput
< source >( sample: typing.Optional[torch.Tensor] = Nonekv_cache: typing.Optional[typing.List[typing.Dict[str, torch.Tensor]]] = None )
Parámetros
- sample (torch.Tensor o None) —
Objetivo de desruido predicho para el fragmento autoregresivo.
Nonepara la ruta de prellenado de caché, que solo escribe la caché KV y no produce ninguna muestra utilizable. - kv_cache (list[dict[str, torch.Tensor]], opcional) — Estado de la caché KV por bloque utilizado por los pasos autoregresivos posteriores.
Dataclass de salida para las rutas de propagación causal de AnyFlowFARTransformer3DModel.