Diffusers documentation
QwenImage21Transformer2DModel
QwenImage21Transformer2DModel
O transformer de fluxo único usado pelo Qwen-Image 2.1. Os latentes de texto e imagem compartilham uma única sequência, e uma única projeção de modulation compartilhada alimenta todos os blocos.
Dois comportamentos distinguem o 2.1 dos transformers QwenImage anteriores:
- Atenção causal por bloco — a atenção segue
(q_idx >= kv_idx) or same_image_block, de modo que a sequência conjunta é causal, enquanto cada bloco de imagem permanece internamente bidirecional.QwenImage21AttnProcessorimplementa isso como uma chamada de atenção por segmento de prefixo e é o padrão.QwenImage21FlexAttnProcessorimplementa isso como uma única chamada deflex_attentiondirigida por umBlockMask, o que é mais rápido uma vez que o modelo é compilado. Ambos produzem os mesmos resultados. causal_condition— os tokens de texto e da imagem de condição são modulados a partir det = 0, em vez do timestep amostrado. Suas ativações são independentes do passo de desruido, de modo que as chaves e valores desse prefixo podem ser armazenados em cache entre os passos por meio do argumentokv_cache.
Carregue-o com:
import torch
from diffusers import QwenImage21Transformer2DModel
transformer = QwenImage21Transformer2DModel.from_pretrained(
"Qwen/Qwen-Image-2.1", subfolder="transformer", dtype=torch.bfloat16
)QwenImage21Transformer2DModel
classe diffusers.QwenImage21Transformer2DModel
< source >( patch_size: int = 1in_channels: int = 64out_channels: int | None = 64num_layers: int = 32attention_head_dim: int = 128num_attention_heads: int = 32context_in_dim: int = 4096mlp_ratio: int = 3axes_dims_rope: tuple = (16, 56, 56)eps: float = 1e-06causal_condition: bool = True )
Parâmetros
- patch_size (
int, padrão1) — Comprimento do lado do patch latente dobrado na dimensão de canal. A versão 2.1 consome latentes sem patch. - in_channels (
int, padrão64) — Canais latentes da entrada. - out_channels (
int, opcional, padrão64) — Canais latentes da saída. Usain_channelscomo padrão. - num_layers (
int, padrão32) — Número de blocos de fluxo único. - attention_head_dim (
int, padrão128) — Canais por cabeça de atenção. - num_attention_heads (
int, padrão32) — Número de cabeças de atenção. - context_in_dim (
int, padrão4096) — Dimensão de canal deencoder_hidden_states. - mlp_ratio (
int, padrão3) — Fator de expansão do feed-forward. - axes_dims_rope (
tuple[int], padrão(16, 56, 56)) — Dimensões rotativas para os eixos de quadro, altura e largura. - eps (
float, padrão1e-6) — Epsilon para as camadas de normalização. - causal_condition (
bool, padrãoTrue) — Modula os tokens de texto e da imagem de condição a partir det = 0. Necessário para o cache de KV.
O Transformer de fluxo único usado pelo Qwen-Image 2.1.
Os latentes de texto e imagem compartilham uma única sequência: os tokens da imagem de condição são substituídos no fluxo de texto nas posições reservadas para eles pelo codificador de visão-linguagem, e os tokens da imagem de destino são anexados. Uma única projeção de modulation compartilhada alimenta todos os blocos, de modo que os blocos não possuem parâmetros de modulação próprios.
Dois comportamentos distinguem a 2.1:
- Atenção causal por bloco — a atenção segue
(q_idx >= kv_idx) or same_image_block, de modo que a sequência é causal enquanto cada bloco de imagem permanece internamente bidirecional. O backend de atençãoflexfornece atenção eficiente em uma única passagem; sem ele, o modelo usa um prefill SDPA exato em múltiplas passagens que processa cada bloco separadamente. causal_condition— os tokens de texto e da imagem de condição são modulados a partir det = 0em vez do timestep amostrado, o que também torna suas ativações independentes do timestep e, portanto, cacheáveis entre as etapas de desruidamento.
build_token_metadata
< source >( image_pad_mask: Tensorimg_shapes: list ) → tuple[torch.Tensor, torch.Tensor]
Parâmetros
- image_pad_mask (
torch.Tensor) —(seq_len,)bool,Truenas posições dos tokens de imagem. - img_shapes (
list[tuple[int, int, int]]) — Por imagem,(frame, height, width)em tokens latentes, com as imagens de condição primeiro e a imagem de destino por último.
Retorna
tuple[torch.Tensor, torch.Tensor]
image_ids (seq_len,) com -1 nas posições de texto e um id único por bloco de imagem, e target_token_mask (seq_len,) marcando os tokens da imagem alvo.
Etiquete cada token da sequência conjunta com o bloco de imagem ao qual ele pertence.
As fronteiras dos blocos vêm das contagens de tokens em img_shapes, não de sequências de True em image_pad_mask: duas imagens de condição que por acaso ficam uma ao lado da outra, sem texto entre elas, formam uma única sequência, mas devem permanecer como blocos separados; caso contrário, elas fariam atenção bidirecional entre si.
forward
< source >( hidden_states: Tensorencoder_hidden_states: Tensortimestep: Tensorimg_shapes: listimg_mask: Tensorencoder_hidden_states_mask: typing.Optional[torch.Tensor] = Noneattention_kwargs: dict[str, typing.Any] | None = Nonekv_cache: diffusers.models.transformers.transformer_qwenimage21.QwenImage21KVCache | None = Nonekv_cache_mode: str | None = Nonereturn_dict: bool = True ) → Transformer2DModelOutput or tuple
Parâmetros
- hidden_states (
torch.Tensorde forma(batch_size, image_sequence_length, in_channels)) — Latentes empacotados, com as imagens de condição primeiro e a imagem de destino por último. - encoder_hidden_states (
torch.Tensorde forma(batch_size, text_sequence_length, context_in_dim)) — Incorporações de texto do codificador de visão-linguagem. - timestep (
torch.Tensor) — Etapa atual de desruidamento, escalada para[0, 1]. - img_shapes (
list[list[tuple[int, int, int]]]) — Lista por amostra de(frame, height, width)em tokens latentes, com as imagens de condição primeiro e a imagem alvo por último. Todas as amostras devem compartilhar um layout. - img_mask (
torch.Tensorde forma(batch_size, vlm_sequence_length)) —Truenos slots de imagem do codificador de visão-linguagem, cada um representando um grupo de2x2tokens latentes. - encoder_hidden_states_mask (
torch.Tensor, opcional) —(batch_size, text_sequence_length)bool que marca os tokens de texto válidos. As posições preenchidas (padding) são excluídas da atenção. - kv_cache (
QwenImage21KVCache, opcional) — Contêiner de cache. Passe junto comkv_cache_modepara habilitar o cache de KV de prefixo. - kv_cache_mode (
str, opcional) —"extract"para pré-preencher o cache (primeira etapa de desruido),"cached"para decodificar a partir dele (etapas posteriores). Exigecausal_condition=True. - attention_kwargs (
dict, opcional) — Encaminhado aos processadores de atenção e carregascalepara as camadas LoRA. - return_dict (
bool, opcional, padrãoTrue) — Se deve ou não retornar um Transformer2DModelOutput em vez de uma tupla simples.
Retorna
Transformer2DModelOutput ou tuple
Transformer2DModelOutput se return_dict for True, caso contrário, uma tuple simples cujo primeiro elemento são os latentes desruídos.
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.