Diffusers documentation
QwenImage21Transformer2DModel
QwenImage21Transformer2DModel
Transformer single-stream yang digunakan oleh Qwen-Image 2.1. Laten teks dan gambar berbagi satu urutan, dan satu proyeksi modulation bersama memberi makan setiap blok.
Dua perilaku membedakan 2.1 dari transformer QwenImage sebelumnya:
- Atensi kausal blok — atensi mengikuti
(q_idx >= kv_idx) or same_image_block, sehingga urutan gabungan bersifat kausal sementara setiap blok gambar tetap bidireksional secara internal.QwenImage21AttnProcessormengimplementasikannya sebagai satu panggilan atensi per segmen prefiks dan merupakan default.QwenImage21FlexAttnProcessormengimplementasikannya sebagai satu panggilanflex_attentionyang digerakkan olehBlockMask, yang lebih cepat setelah model dikompilasi. Keduanya menghasilkan hasil yang sama. causal_condition— token teks dan gambar kondisi dimodulasi darit = 0, bukan dari timestep yang disampel. Aktivasi mereka independen dari langkah denoising, sehingga kunci dan nilai dari prefiks tersebut dapat di-cache melintasi langkah-langkah melalui argumenkv_cache.
Muat dengan:
import torch
from diffusers import QwenImage21Transformer2DModel
transformer = QwenImage21Transformer2DModel.from_pretrained(
"Qwen/Qwen-Image-2.1", subfolder="transformer", dtype=torch.bfloat16
)QwenImage21Transformer2DModel
kelas 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 )
Parameter
- patch_size (
int, defaultnya1) — Panjang sisi dari patch laten yang dilipat ke dimensi channel. Versi 2.1 mengonsumsi laten tanpa patch. - in_channels (
int, defaultnya64) — Saluran laten dari input. - out_channels (
int, opsional, defaultnya64) — Saluran laten dari output. Kembali kein_channels. - num_layers (
int, defaultnya32) — Jumlah blok single-stream. - attention_head_dim (
int, defaultnya128) — Jumlah channel per kepala perhatian. - num_attention_heads (
int, defaultnya32) — Jumlah kepala perhatian (attention heads). - context_in_dim (
int, defaultnya4096) — Dimensi channel dariencoder_hidden_states. - mlp_ratio (
int, defaultnya3) — Faktor ekspansi feed-forward. - axes_dims_rope (
tuple[int], defaultnya(16, 56, 56)) — Dimensi rotasi untuk sumbu frame, tinggi, dan lebar. - eps (
float, defaultnya1e-6) — Epsilon untuk lapisan norm. - causal_condition (
bool, defaultnyaTrue) — Modulasi token teks dan gambar kondisi darit = 0. Diperlukan untuk KV caching.
Transformer single-stream yang digunakan oleh Qwen-Image 2.1.
Latent teks dan gambar berbagi satu urutan: token gambar kondisi disubstitusikan ke dalam aliran teks pada posisi yang telah disediakan oleh encoder vision-language, dan token gambar target ditambahkan di akhir. Satu proyeksi modulation bersama memberi makan setiap blok, sehingga blok tidak memiliki parameter modulasi miliknya sendiri.
Dua perilaku yang membedakan 2.1:
- Atensi blok-kausal — atensi mengikuti
(q_idx >= kv_idx) or same_image_block, sehingga sekuens bersifat kausal sementara setiap blok gambar tetap bidireksional secara internal. Backend atensiflexmemberikan atensi satu-lintas yang efisien; tanpanya, model menggunakan prefill SDPA multi-lintas yang tepat yang memproses setiap blok secara terpisah. causal_condition— token teks dan gambar kondisi dimodulasi darit = 0alih-alih timestep yang disampelkan, yang juga membuat aktivasi mereka tidak bergantung pada timestep sehingga dapat di-cache di antara langkah-langkah denoising.
build_token_metadata
< source >( image_pad_mask: Tensorimg_shapes: list ) → tuple[torch.Tensor, torch.Tensor]
Parameter
- image_pad_mask (
torch.Tensor) —(seq_len,)bool,Truepada posisi token gambar. - img_shapes (
list[tuple[int, int, int]]) —(frame, height, width)per gambar dalam token laten, dengan gambar kondisi di depan dan gambar target di akhir.
Mengembalikan
tuple[torch.Tensor, torch.Tensor]
image_ids (seq_len,) dengan -1 pada posisi teks dan id unik per blok gambar, serta target_token_mask (seq_len,) yang menandai token dari gambar target.
Label setiap token dari urutan gabungan dengan blok gambar yang menjadi keanggotaannya.
Batas blok berasal dari jumlah token dalam img_shapes, bukan dari rangkaian True dalam image_pad_mask: dua gambar kondisi yang kebetulan bersebelahan tanpa teks di antaranya membentuk satu rangkaian tetapi harus tetap menjadi blok terpisah, jika tidak mereka akan saling memperhatikan secara bidireksional.
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
Parameter
- hidden_states (
torch.Tensordengan bentuk(batch_size, image_sequence_length, in_channels)) — Latents yang dikemas, dengan gambar kondisi di awal dan gambar target di akhir. - encoder_hidden_states (
torch.Tensordengan bentuk(batch_size, text_sequence_length, context_in_dim)) — Embedding teks dari encoder vision-language. - timestep (
torch.Tensor) — Langkah denoising saat ini, diskalakan ke[0, 1]. - img_shapes (
list[list[tuple[int, int, int]]]) — Daftar per sampel berisi(frame, height, width)dalam token laten, dengan gambar kondisi di awal dan gambar target di akhir. Semua sampel harus berbagi tata letak yang sama. - img_mask (
torch.Tensordengan bentuk(batch_size, vlm_sequence_length)) —Truepada slot gambar dari encoder vision-language, di mana masing-masing mewakili kelompok2x2token laten. - encoder_hidden_states_mask (
torch.Tensor, opsional) —(batch_size, text_sequence_length)bool yang menandai token teks yang valid. Posisi yang di-*pad* dikecualikan dari perhatian (*attention*). - kv_cache (
QwenImage21KVCache, opsional) — Wadah cache. Sampaikan bersamakv_cache_modeuntuk mengaktifkan prefix KV caching. - kv_cache_mode (
str, opsional) —"extract"untuk prefill cache (langkah denoising pertama),"cached"untuk decode darinya (langkah berikutnya). Memerlukancausal_condition=True. - attention_kwargs (
dict, opsional) — Diteruskan ke prosesor perhatian, dan membawascaleuntuk lapisan LoRA. - return_dict (
bool, opsional, defaultnyaTrue) — Apakah akan mengembalikan Transformer2DModelOutput alih-alih tuple biasa.
Mengembalikan
Transformer2DModelOutput atau tuple
Transformer2DModelOutput jika return_dict bernilai True, selain itu berupa tuple biasa yang elemen pertamanya adalah latents yang telah didenoise.
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.