Diffusers documentation
AnyFlowFARTransformer3DModel
AnyFlowFARTransformer3DModel
المحوّل ثلاثي الأبعاد السببي (FAR) المستخدم في AnyFlowFARPipeline —
وهو متغير FAR من AnyFlow. راجع صفحة AnyFlowFARPipeline للاطلاع على الورقة البحثية والمؤلفين والنقاط الفاحصة (checkpoints) المُطلقة. يمتد هذا النموذج
على هيكل Wan2.1 الإصدار v0.35.1 مع إضافات ثلاث:
- قناع كتلة سببية FAR عبر
torch.nn.attention.flex_attention، مع دعم التوليد الذاتي التتابعي على مستوى المقاطع كما تم تقديمه في FAR. - تضمين البقع للإطارات المضغوطة (
far_patch_embedding) للإطارات السياقية (المولّدة مسبقًا)، مُهيّأة في البداية منpatch_embeddingعالي الدقة عند الإنشاء عبر الاستيفاء ثلاثي الخطية. - تضمين خريطة التدفق بخطوة زمنية مزدوجة (نفس
AnyFlowTransformer3DModel) — كل استدعاء للأمام يشترط على كل من الخطوة الزمنية المصدرtوالخطوة الزمنية الهدفr.
يُخزَّن جدول التقطيع الافتراضي (chunk_partition) في إعدادات النموذج؛ وتستخدم نقاط التفتيش المُطلقة من NVIDIA AnyFlow-FAR [1, 3, 3, 3, 3, 3, 3, 2] للإعداد القياسي المكوّن من 81 إطارًا. يقبل forward تجاوزًا لـchunk_partition لكل استدعاء، مما يتيح لنفس نقطة التفتيش التعامل مع إعدادات أخرى لـnum_frames دون إعادة تدريب.
from diffusers import AnyFlowFARTransformer3DModel
# Causal AnyFlow checkpoint (FAR):
transformer = AnyFlowFARTransformer3DModel.from_pretrained(
"nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", subfolder="transformer"
)AnyFlowFARTransformer3DModel
فئة 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) )
المعاملات
- patch_size (Tuple[int]، القيمة الافتراضية (1, 2, 2)) — أبعاد البقع ثلاثية الأبعاد للقطع ذات الدقة الكاملة.
- compressed_patch_size (Tuple[int]، القيمة الافتراضية (1, 4, 4)) — أبعاد رقعة أكبر للقطع المضغوطة بواسطة FAR (سياق).
- full_chunk_limit (int، القيمة الافتراضية 3) —
الحد الأقصى لعدد مقاطع الدقة الكاملة قبل أن تُخفَّض المقاطع السابقة إلى سياق FAR المضغوط. تستخدم نقاط التفتيش المُصدَّرة
3. - num_attention_heads (int، القيمة الافتراضية 40) — عدد رؤوس الانتباه.
- attention_head_dim (int، القيمة الافتراضية 128) — عدد القنوات في كل رأس.
- in_channels (int، القيمة الافتراضية 16) — عدد القنوات في المدخلات الكامنة.
- out_channels (int، القيمة الافتراضية 16) — عدد القنوات في الكامن الناتج.
- text_dim (int، القيمة الافتراضية 4096) — البُعد المدخل لتضمينات النص (UMT5).
- freq_dim (int، القيمة الافتراضية 256) — البُعد الخاص بالتضمينات الزمنية الجيبية.
- ffn_dim (int، القيمة الافتراضية 13824) — البُعد الوسيط في الشبكة الأمامية.
- num_layers (int، القيمة الافتراضية 40) — عدد كتل التحويل (transformer blocks).
- cross_attn_norm (bool، القيمة الافتراضية True) — تفعيل تطبيع الانتباه المتقاطع.
- eps (float، القيمة الافتراضية 1e-6) — قيمة إبسيلون لطبقات التطبيع.
- image_dim (Optional[int]، اختياري، القيمة الافتراضية None) — أبعاد تضمين الصورة (Image embedding) لتكييف I2V.
- rope_max_seq_len (int، القيمة الافتراضية 1024) — أقصى طول تسلسل يُستخدم لحساب ترددات الموضع الدوراني مسبقًا.
- gate_value (float، القيمة الافتراضية 0.25) — بوابة الخلط بين تمثيلات خطوة المصدر وخطوة الدلتا.
- deltatime_type (str، القيمة الافتراضية ‘r’) —
إما
"r"(حيث يكون الدلتا هو خطوة الزمن المستهدفة) أو"t-r"(حيث يكون الدلتا هو الفاصل المطلق). - chunk_partition (Tuple[int, …]، القيمة الافتراضية (1, 3, 3, 3, 3, 3, 3, 2)) —
عدد الإطارات الافتراضي لكل جزء الذي تستخدمه خط المعالجة. تستهدف نقاط التفتيش (checkpoints) المُصدَّرة من NVIDIA AnyFlow-FAR قيمة
num_frames=81(21 إطارًا كامنًا عند خطوة VAE الزمنية 4) مقسمة إلى1 + 3*6 + 2. يتطلب استخدام قيمة مختلفة لـnum_framesتجاوزًا مطابقًا لـchunk_partitionيُمرَّر إلى AnyFlowFARPipeline.call() (وكذلك إلىforward).
تحويلة ثلاثية الأبعاد سببية (FAR) لعينة خريطة التدفق في AnyFlow مع توليد ذاتي التتابع على مستوى المقاطع.
يمدّد هيكل Wan2.1 الإصدار v0.35.1 بما يلي:
- قناع كتلة سببية FAR عبر
torch.nn.attention.flex_attention، مع دعم التوليد الذاتي التتابعي على مستوى المقاطع (FAR). - تضمين البقع للإطارات المضغوطة
far_patch_embeddingللإطارات السياقية (المولّدة مسبقًا)، مُهيّأ منpatch_embeddingعبر الاستيفاء ثلاثي الخطية بحيث يكون النموذج المُنشأ حديثًا عند نقطة بداية معقولة حتى قبل ضبط LoRA. - تضمين خريطة التدفق بخطوة زمنية مزدوجة لعينة أي خطوة (نفس
AnyFlowTransformer3DModel).
استخدم AnyFlowTransformer3DModel بدلاً من ذلك لتوليد الفيديو من النص ثنائي الاتجاه البسيط — إذ يتخطى هذا المتغير قناع FAR السببي وfar_patch_embedding ويكون أصغر بحوالي 5–10%.
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
المعاملات
- chunk_partition — عدد الإطارات لكل شريحة (يجب أن يكون مجموعها مساويًا لعدد الإطارات الكامنة).
- height, width — الأبعاد المكانية الكامنة.
- has_clean_context —
Trueعندما سيتم تمريرclean_hidden_statesعبرforward(تدريب V2V/I2V)؛ لا يؤثر سوى وجود هذا العلم على تخطيط القناع. - device — الجهاز الخاص بـ
BlockMaskالناتج. لا يتم نقل القناع تلقائيًا بواسطةdevice_map="auto"؛ قم ببنائه على نفس الجهاز الذي ستُستضاف عليه مدخلات المحوّل. - mode —
"train"(يتطابق مع_forward_train) أو"cache"(يتطابق مع_forward_cache). مسار الاستدلال التلقائي التوليدية_forward_inferenceيتعامل عبر ذاكرة KV ولا يحتوي على وضع هنا.
يعيد
~torch.nn.attention.flex_attention.BlockMask
قناع سببي يمتد عبر تخطيط FAR، مع ملء حتى مضاعف لـ 128 على طول بُعد التسلسل (متطلب حجم الكتلة لـ BlockMask).
يرفع
ValueError
ValueError— إذا لم يكنmodeأيًا من"train"أو"cache".
قم ببناء ~torch.nn.attention.flex_attention.BlockMask السببي مسبقًا خارج forward.
مرّر النتيجة عبر معامل attention_mask في forward لجعل المحوّل بالكامل متوافقًا مع torch.compile(fullgraph=True). في غياب قناع مُعدّ مسبقًا، يعود forward إلى بنائه داخليًا — وهذا المسار يستخدم flex_attention.create_block_mask(_compile=False) مما يكسر رسم التجميع.
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
المعاملات
- hidden_states (torch.Tensor) —
مدخل كامن (Latent) من الشكل
(B, F, C, H, W). - timestep (torch.Tensor) — خطوة الزمن t لخريطة التدفق المصدرية (الأكثر ضجيجًا).
- r_timestep (torch.Tensor) — خطوة الزمن r لخريطة التدفق المستهدفة (الأكثر نظافة).
- encoder_hidden_states (torch.Tensor) — تضمينات النص الخاصة بـ UMT5.
- chunk_partition (List[int]) —
عدد الإطارات لكل شريحة؛ يجب أن يتطابق المجموع مع عدد الإطارات الكامنة في
hidden_states. - encoder_hidden_states_image (torch.Tensor، اختياري) — تضمين صورة I2V؛ يُدمج قبل رموز النص عند توفيره.
- clean_hidden_states (torch.Tensor، اختياري) — إطارات التكييف النظيفة (الخالية من الضوضاء) المستخدمة في تمرين التدريب.
- clean_timestep (torch.Tensor، اختياري) — خطوات الزمن للإطارات الشرطية النظيفة في تمرين التدريب.
- kv_cache (List[Dict[str, torch.Tensor]]، اختياري) — ذاكرة KV لكل كتلة للاستدلال التلقائي التوليد. None يختار مسار التدريب.
- kv_cache_flag (Dict[str, Any]، اختياري) —
بيانات وصفية لذاكرة KV-cache (مثل علم
is_cache_stepوعدد الرموز). - attention_mask (BlockMask, اختياري) —
قناع سببي مُعدّ مسبقًا، يُنشأ عادةً عبر
build_attention_mask. يُستهلك في مسارات التدريب ومسارات تعبئة ذاكرة KV؛ بينما يعتمد مسار الاستدلال التلقائي على ذاكرة KV ولا يستخدم قناعًا كاملًا. عند تعيينNone، تُنشئ مسارات التدريب / ذاكرة الكاش القناع داخليًا؛ لكن هذا المسار الاحتياطي غير آمن للتجميع (إذ يُكسر الرسم الأساسي بواسطةflex_attention.create_block_maskعندfullgraph=True)، لذا مرّر قناعًا مُعدًّا مسبقًا دائمًا عند تغليفforwardبـtorch.compile. - attention_kwargs (dict، اختياري) — يُمرَّر إلى معالجات الانتباه.
- return_dict (bool، اختياري، القيمة الافتراضية True) — إذا كانت False، تُرجع مجموعات موضعية (positional tuples) بدلاً من فئة بيانات المخرجات (output dataclass).
يعيد
[~models.transformer_2d.Transformer2DModelOutput]، أو [AnyFlowFARTransformerOutput]، أو tuple
عندما يكون return_dict بقيمة False، يُعاد tuple عادي. وإلا، فإن مسار التدريب السببي (kv_cache is None) يُعيد [~models.transformer_2d.Transformer2DModelOutput]، بينما تُعيد مسارات تعبئة الكاش والاستدلال التلقائي [AnyFlowFARTransformerOutput].
المرور الأمامي السببي في FAR. يُوجَّه إلى أحد المسارات الداخلية الثلاثة:
kv_cache is None→ تمرين سببي (يعيدTransformer2DModelOutput).kv_cache is not Noneوkv_cache_flag["is_cache_step"]→ تعبئة الكاش (يعيدAnyFlowFARTransformerOutputمعsample=None).- في حال العكس → خطوة استنتاج ذاتية التوليد (تعيد
AnyFlowFARTransformerOutput).
AnyFlowFARTransformerOutput
فئة 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 )
المعاملات
- sample (torch.Tensor أو None) —
الهدف المتوقع لإزالة الضوضاء للجزء التوليدي الذاتي.
Noneلمسار تعبئة ذاكرة التخزين المؤقت، الذي يكتب فقط في ذاكرة KV ولا ينتج أي عينة قابلة للاستخدام. - kv_cache (list[dict[str, torch.Tensor]]، اختياري) — حالة ذاكرة KV لكل كتلة تُستخدم في الخطوات التوليدية الذاتية اللاحقة.
فئة بيانات المخرجات لمسارات الأمامية السببية في AnyFlowFARTransformer3DModel.