Diffusers documentation
QwenImage21Transformer2DModel
QwenImage21Transformer2DModel
المحوّل أحادي التدفق المستخدم في Qwen-Image 2.1. تتشارك كامنات النص والصورة تسلسلاً واحداً، وتُغذّي إسقاط modulation مشترك واحد كل كتلة.
يتميز حوّل QwenImage الإصدار 2.1 عن الإصدارات السابقة بسلوكين:
- انتباه سببي على مستوى الكتل — يتبع الانتباه
(q_idx >= kv_idx) or same_image_block، لذا فإن التسلسل المشترك يكون سببيًا بينما تبقى كل كتلة صورة ثنائية الاتجاه داخليًا. ينفذQwenImage21AttnProcessorذلك كنداء انتباه واحد لكل مقطع بادئة، وهو الإعداد الافتراضي. ينفذQwenImage21FlexAttnProcessorذلك كنداء واحد لـflex_attentionيقودهBlockMask، وهو أسرع بعد تجميع النموذج. ينتج كلاهما نفس النتائج. causal_condition— تُعدَّل رموز النص ورموز صورة الشرط منt = 0بدلاً من خطوة الزمن المُستخرجة. تكون تنشيطاتها مستقلة عن خطوة إزالة الضوضاء، لذا يمكن تخزين مفاتيح وقيم ذلك البادئة عبر الخطوات عبر حجةkv_cache.
حمّله باستخدام:
import torch
from diffusers import QwenImage21Transformer2DModel
transformer = QwenImage21Transformer2DModel.from_pretrained(
"Qwen/Qwen-Image-2.1", subfolder="transformer", dtype=torch.bfloat16
)QwenImage21Transformer2DModel
فئة 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 )
المعاملات
- patch_size (
int، القيمة الافتراضية1) — طول جانب البقعة الكامنة المطوية إلى بُعد القناة. يستهلك الإصدار 2.1 الكامنات دون تقطيع. - in_channels (
int، القيمة الافتراضية64) — قنوات الكامنة للمدخل. - out_channels (
int، اختياري، القيمة الافتراضية64) — قنوات الكامنة للمخرجات. إذا لم تُحدد، تُستخدمin_channelsبدلاً منها. - num_layers (
int، القيمة الافتراضية32) — عدد كتل التدفق الأحادي. - attention_head_dim (
int، القيمة الافتراضية128) — عدد القنوات لكل رأس انتباه. - num_attention_heads (
int، القيمة الافتراضية32) — عدد رؤوس الانتباه. - context_in_dim (
int، القيمة الافتراضية4096) — بعد القناة الخاص بـencoder_hidden_states. - mlp_ratio (
int، القيمة الافتراضية3) — معامل توسيع الشبكة العصبية الأمامية. - axes_dims_rope (
tuple[int])، القيمة الافتراضية(16, 56, 56)) — الأبعاد الدوارة لمحاور الإطار والارتفاع والعرض. - eps (
float، القيمة الافتراضية1e-6) — قيمة إبسيلون لطبقات المعايير. - causal_condition (
bool، القيمة الافتراضيةTrue) — تعديل رموز النص ورموز صورة الشرط بدءًا منt = 0. مطلوب لتخزين KV.
نموذج Transformer ذو تدفق واحد تستخدمه Qwen-Image 2.1.
تشارك كامنات النص والصورة تسلسلًا واحدًا: تُستبدل رموز صورة الشرط في تدفق النص في المواضع التي خصصها مشفّر اللغة-الرؤية لها، وتُضاف رموز الصورة المستهدفة. يغذّي إسقاط modulation مشترك واحد كل كتلة، لذا لا تحتفظ الكتل بأي معاملات تعديل خاصة بها.
يتميز الإصدار 2.1 بسلوكين:
- انتباه سببي على مستوى الكتل — يتبع الانتباه
(q_idx >= kv_idx) or same_image_block، لذا تكون التسلسلية سببية بينما تبقى كل كتلة صورة ثنائية الاتجاه داخلياً. يمنح واجهةflexللانتباه انتباهاً بكفاءة في مسار واحد؛ وبدونها يستخدم النموذج تعبئة SDPA متعددة المسارات دقيقة تعالج كل كتلة على حدة. causal_condition— يتم تعديل رموز النص ورموز صورة الشرط منt = 0بدلاً من خطوة الزمن المُستخرجة، مما يجعل تفعيلاتها مستقلة عن خطوة الزمن وبالتالي قابلة للتخزين المؤقت عبر خطوات إزالة الضوضاء.
build_token_metadata
< source >( image_pad_mask: Tensorimg_shapes: list ) → tuple[torch.Tensor, torch.Tensor]
المعاملات
- image_pad_mask (
torch.Tensor) —(seq_len,)من نوع bool، حيث تكون القيمةTrueفي مواضع رموز الصور. - img_shapes (
list[tuple[int, int, int]]) — لكل صورة(frame, height, width)في الرموز الكامنة، حيث تُوضع صور الشرط أولاً والصورة المستهدفة في النهاية.
يعيد
tuple[torch.Tensor, torch.Tensor]
image_ids (seq_len,) حيث تكون القيمة -1 في مواضع النص، مع معرّف فريد لكل كتلة صورة، وtarget_token_mask (seq_len,) لتحديد رموز الصورة المستهدفة.
وسِّم كل رمز في التسلسل المشترك بالكتلة الصورية التي ينتمي إليها.
تأتي حدود الكتل من أعداد الرموز في img_shapes، وليس من التتابعات المتتالية لقيمة True في image_pad_mask: فصورتا شرط متجاورتان بالصدفة دون وجود نص بينهما تشكّلان تتابعاً واحداً، لكن يجب أن تظل كتلتين منفصلتين، وإلا فإنهما ستتعاملان مع بعضهما البعض بشكل ثنائي الاتجاه.
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
المعاملات
- hidden_states (
torch.Tensorمن الشكل(batch_size, image_sequence_length, in_channels)) — كعوب مكدّسة، حيث تُوضع صور الشروط أولاً والصورة المستهدفة في النهاية. - encoder_hidden_states (
torch.Tensorمن الشكل(batch_size, text_sequence_length, context_in_dim)) — تمثيلات النص من مُشفِّر الرؤية واللغة. - timestep (
torch.Tensor) — خطوة إزالة الضوضاء الحالية، مُقيّسة إلى[0, 1]. - img_shapes (
list[list[tuple[int, int, int]]]) — قائمة لكل عينة من(frame, height, width)بوحدات الكامنة، حيث تأتي صور الشرط أولاً والصورة المستهدفة في النهاية. يجب أن تشارك جميع العينات نفس التخطيط. - img_mask (
torch.Tensorمن الشكل(batch_size, vlm_sequence_length)) —Trueفي مواضع الصور داخل مُشفِّر اللغة-الرؤية، حيث يمثل كل موضع مجموعة من2x2من الرموز الكامنة. - encoder_hidden_states_mask (
torch.Tensor، اختياري) —(batch_size, text_sequence_length)قيمة منطقية (bool) تُحدد الرموز النصية الصالحة. يتم استبعاد المواضع المعبّأة (padded) من الانتباه (attention). - kv_cache (
QwenImage21KVCache، اختياري) — حاوية التخزين المؤقت. مرّره معkv_cache_modeلتفعيل تخزين KV البادئة. - kv_cache_mode (
str، اختياري) —"extract"لملء ذاكرة التخزين المؤقت مسبقًا (خطوة إزالة الضوضاء الأولى)، و"cached"لفك الترميز منها (الخطوات اللاحقة). يتطلبcausal_condition=True. - attention_kwargs (
dict، اختياري) — يُمرَّر إلى معالجات الانتباه، ويحملscaleلطبقات LoRA. - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع Transformer2DModelOutput بدلاً من tuple عادي.
يعيد
Transformer2DModelOutput أو tuple
Transformer2DModelOutput إذا كان return_dict هو True، وإلا فسيكون tuple بسيطاً يكون عنصره الأول هو الكمونيات المُزالة الضوضاء.
Transformer2DModelOutput
فئة diffusers.models.modeling_outputs.Transformer2DModelOutput
< source >( sample: torch.Tensor )
المعاملات
- sample (
torch.Tensorمن الشكل(batch_size, num_channels, height, width)أو(batch size, num_vector_embeds - 1, num_latent_pixels)إذا كان Transformer2DModel منفصلاً) — مخرجات الحالات المخفية المشروطة على مدخلencoder_hidden_states. إذا كان منفصلاً، يعيد توزيعات الاحتمال للبكسلات الكامنة غير الملوثة.
مخرجات Transformer2DModel.