Buckets:
| # طرق التخزين المؤقت | |
| تُسرع طرق التخزين المؤقت (Cache) محولات الانتشار (diffusion transformers) من خلال تخزين المخرجات الوسيطة للطبقات المحددة، مثل طبقات الانتباه (attention) وطبقات التغذية الأمامية (feedforward)، وإعادة استخدامها بدلاً من إعادة حسابها في كل خطوة من خطوات الاستدلال. | |
| ## CacheMixin[[diffusers.CacheMixin]] | |
| #### diffusers.CacheMixin[[diffusers.CacheMixin]] | |
| ```python | |
| diffusers.CacheMixin() | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/cache_utils.py#L23) | |
| فئة لتفعيل/تعطيل تقنيات التخزين المؤقت على نماذج الانتشار. | |
| تقنيات التخزين المؤقت المدعومة: | |
| - [بث الانتباه الهرمي](https://huggingface.co/papers/2408.12588) | |
| - [FasterCache](https://huggingface.co/papers/2410.19355) | |
| - [FirstBlockCache](https://github.com/chengzeyi/ParaAttention/blob/7a266123671b55e7e5a2fe9af3121f07a36afc78/README.md#first-block-cache-our-dynamic-caching) | |
| - [SeaCache](https://huggingface.co/papers/2602.18993) | |
| #### cache_context[[diffusers.CacheMixin.cache_context]] | |
| ```python | |
| cache_context(name: str, **kwargs) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/cache_utils.py#L181) | |
| مدير سياق يوفر معلومات لإدارة ذاكرة التخزين المؤقت. | |
| `name` هو اسم استدعاء إزالة الضوضاء، وعادةً ما يكون `"cond"` أو `"uncond"`. تصف الحُجج ذات الكلمات المفتاحية موقع حلقة إزالة الضوضاء — راجع `CacheContext` لمعرفة الحقول المقبولة، مثل `cache_context("cond", step_index=i, sigma=sigma)`. | |
| #### enable_cache[[diffusers.CacheMixin.enable_cache]] | |
| ```python | |
| enable_cache(config) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/cache_utils.py#L40) | |
| **المعاملات:** | |
| config (`PyramidAttentionBroadcastConfig | FasterCacheConfig | FirstBlockCacheConfig | SeaCacheConfig | TextKVCacheConfig`) : إعدادات تطبيق تقنية التخزين المؤقت. تقنيات التخزين المؤقت المدعومة حاليًا هي: - [PyramidAttentionBroadcastConfig](/docs/diffusers/v0.43.0/ar/api/cache#diffusers.PyramidAttentionBroadcastConfig) - [FasterCacheConfig](/docs/diffusers/v0.43.0/ar/api/cache#diffusers.FasterCacheConfig) - [FirstBlockCacheConfig](/docs/diffusers/v0.43.0/ar/api/cache#diffusers.FirstBlockCacheConfig) - [SeaCacheConfig](/docs/diffusers/v0.43.0/ar/api/cache#diffusers.SeaCacheConfig) - `TextKVCacheConfig` | |
| تفعيل تقنيات التخزين المؤقت على النموذج. | |
| مثال: | |
| ```python | |
| >>> import torch | |
| >>> from diffusers import CogVideoXPipeline, PyramidAttentionBroadcastConfig | |
| >>> pipe = CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-5b", torch_dtype=torch.bfloat16) | |
| >>> pipe.to("cuda") | |
| >>> config = PyramidAttentionBroadcastConfig( | |
| ... spatial_attention_block_skip_range=2, | |
| ... spatial_attention_timestep_skip_range=(100, 800), | |
| ... current_timestep_callback=lambda: pipe.current_timestep, | |
| ... ) | |
| >>> pipe.transformer.enable_cache(config) | |
| ``` | |
| ## PyramidAttentionBroadcastConfig[[diffusers.PyramidAttentionBroadcastConfig]] | |
| #### diffusers.PyramidAttentionBroadcastConfig[[diffusers.PyramidAttentionBroadcastConfig]] | |
| ```python | |
| diffusers.PyramidAttentionBroadcastConfig(spatial_attention_block_skip_range: int | None = None, temporal_attention_block_skip_range: int | None = None, cross_attention_block_skip_range: int | None = None, spatial_attention_timestep_skip_range: tuple[int, int] = (100, 800), temporal_attention_timestep_skip_range: tuple[int, int] = (100, 800), cross_attention_timestep_skip_range: tuple[int, int] = (100, 800), spatial_attention_block_identifiers: tuple[str, ...] = ('blocks', 'transformer_blocks', 'single_transformer_blocks', 'layers', 'visual_transformer_blocks'), temporal_attention_block_identifiers: tuple[str, ...] = ('temporal_transformer_blocks',), cross_attention_block_identifiers: tuple[str, ...] = ('blocks', 'transformer_blocks', 'layers'), current_timestep_callback: typing.Callable[[], int] = None) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/hooks/pyramid_attention_broadcast.py#L40) | |
| **المعاملات:** | |
| spatial_attention_block_skip_range (`int`, *اختياري*, القيمة الافتراضية `None`) : عدد المرات التي يُتخطى فيها بث الانتباه المكاني المحدد قبل حساب حالات الانتباه لإعادة استخدامها. إذا تم تعيين هذه القيمة إلى `N`، فسيتم تخطي حساب الانتباه `N - 1` مرة (أي سيتم إعادة استخدام حالات الانتباه القديمة) قبل حساب حالات الانتباه الجديدة مرة أخرى. | |
| temporal_attention_block_skip_range (`int`, *اختياري*، القيمة الافتراضية `None`) : عدد المرات التي يُتخطى فيها بث الانتباه الزمني المحدد قبل حساب حالات الانتباه لإعادة استخدامها. إذا تم تعيين هذه القيمة إلى `N`، فسيتم تخطي حساب الانتباه `N - 1` مرة (أي سيتم إعادة استخدام حالات الانتباه القديمة) قبل حساب حالات الانتباه الجديدة مرة أخرى. | |
| cross_attention_block_skip_range (`int`, *اختياري*، القيمة الافتراضية `None`) : عدد المرات التي يُتخطى فيها بث الانتباه المتقاطع (cross-attention) المحدد قبل حساب حالات الانتباه لإعادة استخدامها. إذا تم تعيين هذه القيمة إلى `N`، فسيتم تخطي حساب الانتباه `N - 1` مرة (أي سيتم إعادة استخدام حالات الانتباه القديمة) قبل حساب حالات الانتباه الجديدة مرة أخرى. | |
| spatial_attention_timestep_skip_range (`tuple[int, int]`، القيمة الافتراضية `(100, 800)`) : نطاق خطوات الزمن التي سيتم تجاوزها في طبقة الانتباه المكاني. سيتم تجاوز عمليات الانتباه بشكل شرطي إذا كانت خطوة الزمن الحالية ضمن النطاق المحدد. | |
| temporal_attention_timestep_skip_range (`tuple[int, int]`، القيمة الافتراضية `(100, 800)`) : نطاق خطوات الزمن التي سيتم تجاوزها في طبقة الانتباه الزمني. سيتم تجاوز عمليات الانتباه بشكل شرطي إذا كانت خطوة الزمن الحالية ضمن النطاق المحدد. | |
| cross_attention_timestep_skip_range (`tuple[int, int]`، القيمة الافتراضية `(100, 800)`) : نطاق خطوات الزمن التي سيتم تجاوزها في طبقة الانتباه المتقاطع. سيتم تجاوز عمليات الانتباه بشكل مشروط إذا كانت خطوة الزمن الحالية ضمن النطاق المحدد. | |
| spatial_attention_block_identifiers (`tuple[str, ...]`) : المعرِّفات التي تُطابَق مع أسماء الطبقات لتحديد ما إذا كانت الطبقة هي طبقة انتباه مكاني. | |
| temporal_attention_block_identifiers (`tuple[str, ...]`) : المعرِّفات التي تُطابَق مع أسماء الطبقات لتحديد ما إذا كانت الطبقة هي طبقة انتباه زمني. | |
| cross_attention_block_identifiers (`tuple[str, ...]`) : المعرِّفات التي تُطابَق مع أسماء الطبقات لتحديد ما إذا كانت الطبقة طبقة انتباه متقاطع. | |
| إعدادات لبث انتباه الهرم. | |
| #### diffusers.apply_pyramid_attention_broadcast[[diffusers.apply_pyramid_attention_broadcast]] | |
| ```python | |
| diffusers.apply_pyramid_attention_broadcast(module: Module, config: PyramidAttentionBroadcastConfig) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/hooks/pyramid_attention_broadcast.py#L181) | |
| **المعاملات:** | |
| module (`torch.nn.Module`) : الوحدة التي سيتم تطبيق Pyramid Attention Broadcast عليها. | |
| config (`PyramidAttentionBroadcastConfig | None`, `optional`, defaults to `None`) : The configuration to use for Pyramid Attention Broadcast. | |
| تطبيق [Pyramid Attention Broadcast](https://huggingface.co/papers/2408.12588) على خط أنابيب معيّن. | |
| PAB هو طريقة تقريب للانتباه تستفيد من التشابه في حالات الانتباه بين خطوات الزمن لتقليل التكلفة الحسابية لحساب الانتباه. الفكرة الرئيسية المستخلصة من الورقة البحثية هي أن تشابه الانتباه في طبقات الانتباه المتقاطع بين خطوات الزمن يكون مرتفعاً، يليه تشابه أقل في الطبقات الزمنية والمكانية. وهذا يتيح تجاوز حساب الانتباه في طبقات الانتباه المتقاطع بشكل أكثر تكراراً مقارنة بالطبقات الزمنية والمكانية. وبالتالي، فإن تطبيق PAB سيُسرع عملية الاستدلال. | |
| مثال: | |
| ```python | |
| >>> import torch | |
| >>> from diffusers import CogVideoXPipeline, PyramidAttentionBroadcastConfig, apply_pyramid_attention_broadcast | |
| >>> from diffusers.utils import export_to_video | |
| >>> pipe = CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-5b", torch_dtype=torch.bfloat16) | |
| >>> pipe.to("cuda") | |
| >>> config = PyramidAttentionBroadcastConfig( | |
| ... spatial_attention_block_skip_range=2, | |
| ... spatial_attention_timestep_skip_range=(100, 800), | |
| ... current_timestep_callback=lambda: pipe.current_timestep, | |
| ... ) | |
| >>> apply_pyramid_attention_broadcast(pipe.transformer, config) | |
| ``` | |
| ## FasterCacheConfig[[diffusers.FasterCacheConfig]] | |
| #### diffusers.FasterCacheConfig[[diffusers.FasterCacheConfig]] | |
| ```python | |
| diffusers.FasterCacheConfig(spatial_attention_block_skip_range: int = 2, temporal_attention_block_skip_range: int | None = None, spatial_attention_timestep_skip_range: tuple[int, int] = (-1, 681), temporal_attention_timestep_skip_range: tuple[int, int] = (-1, 681), low_frequency_weight_update_timestep_range: tuple[int, int] = (99, 901), high_frequency_weight_update_timestep_range: tuple[int, int] = (-1, 301), alpha_low_frequency: float = 1.1, alpha_high_frequency: float = 1.1, unconditional_batch_skip_range: int = 5, unconditional_batch_timestep_skip_range: tuple[int, int] = (-1, 641), spatial_attention_block_identifiers: tuple[str, ...] = ('^blocks.*attn', '^transformer_blocks.*attn', '^single_transformer_blocks.*attn'), temporal_attention_block_identifiers: tuple[str, ...] = ('^temporal_transformer_blocks.*attn',), attention_weight_callback: typing.Callable[[torch.nn.Module], float] = None, low_frequency_weight_callback: typing.Callable[[torch.nn.Module], float] = None, high_frequency_weight_callback: typing.Callable[[torch.nn.Module], float] = None, tensor_format: str = 'BCFHW', is_guidance_distilled: bool = False, current_timestep_callback: typing.Callable[[], int] = None, _unconditional_conditional_input_kwargs_identifiers: list[str] = ('hidden_states', 'encoder_hidden_states', 'timestep', 'attention_mask', 'encoder_attention_mask')) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/hooks/faster_cache.py#L50) | |
| **المعاملات:** | |
| spatial_attention_block_skip_range (`int`، القيمة الافتراضية هي `2`) : يُحسب حالات الانتباه كل `N` تكرارات. إذا تم ضبط هذا على `N`، فسيتم تخطي حساب الانتباه `N - 1` مرة (أي، سيتم إعادة استخدام حالات الانتباه المخزنة مؤقتًا) قبل حساب حالات الانتباه الجديدة مرة أخرى. | |
| temporal_attention_block_skip_range (`int`, *اختياري*، القيمة الافتراضية `None`) : حساب حالات الانتباه كل `N` تكرارات. إذا تم ضبط هذا على `N`، فسيتم تخطي حساب الانتباه `N - 1` مرة (أي، سيتم إعادة استخدام حالات الانتباه المخزنة مؤقتًا) قبل حساب حالات الانتباه الجديدة مرة أخرى. | |
| spatial_attention_timestep_skip_range (`tuple[float, float]`، القيمة الافتراضية `(-1, 681)`) : نطاق خطوات الزمن الذي يمكن فيه تجاوز حساب الانتباه المكاني دون فقدان كبير في الجودة. يتعيّن على المستخدم تحديد هذا النطاق بناءً على النموذج الأساسي. القيمة الأولى في المجموعة هي الحد الأدنى والقيمة الثانية هي الحد الأقصى. عادةً، تكون خطوات الزمن للتخفيف من الضوضاء في نطاق معكوس من 0 إلى 1000 (أي أن التخفيف من الضوضاء يبدأ عند خطوة الزمن 1000 وينتهي عند خطوة الزمن 0). بالنسبة للقيم الافتراضية، يعني ذلك أن تجاوز حساب الانتباه المكاني سيُطبَّق فقط بعد الوصول إلى خطوة التخفيف من الضوضاء 681، ويستمر حتى نهاية عملية التخفيف من الضوضاء. | |
| temporal_attention_timestep_skip_range (`tuple[float, float]`، *اختياري*، القيمة الافتراضية `None`) : نطاق خطوات الزمن الذي يمكن فيه تجاوز حساب الانتباه الزمني دون فقدان كبير في الجودة. يتعيّن على المستخدم تحديد هذا النطاق بناءً على النموذج الأساسي. القيمة الأولى في المجموعة هي الحد الأدنى والقيمة الثانية هي الحد الأقصى. عادةً، تكون خطوات الانتشار لإزالة الضوضاء في نطاق معكوس من 0 إلى 1000 (أي أن إزالة الضوضاء تبدأ عند الخطوة الزمنية 1000 وتنتهي عند الخطوة الزمنية 0). | |
| low_frequency_weight_update_timestep_range (`tuple[int, int]`، القيمة الافتراضية `(99, 901)`) : نطاق خطوات الزمن الذي تُطبَّق فيه عملية تحديث مقياس أوزان التردد المنخفض. القيمة الأولى في المجموعة هي الحد الأدنى والقيمة الثانية هي الحد الأعلى لنطاق خطوات الزمن. يُستدعى دالة الاستدعاء (callback) الخاصة بالتحديث فقط ضمن هذا النطاق. | |
| high_frequency_weight_update_timestep_range (`tuple[int, int]`، القيمة الافتراضية `(-1, 301)`) : نطاق خطوات الزمن الذي تُطبَّق فيه عملية تحديث توسيع الأوزان عالية التردد. القيمة الأولى في المجموعة هي الحد الأدنى والقيمة الثانية هي الحد الأعلى لنطاق خطوات الزمن. يُستدعى دالة الاستدعاء (callback) الخاصة بالتحديث فقط ضمن هذا النطاق. | |
| alpha_low_frequency (`float`، القيمة الافتراضية `1.1`) : الوزن الذي يُستخدم لتقليص تحديثات التردد المنخفض. يُستخدم هذا الوزن لتقريب الفرع غير الشرطي من مخرجات الفرع الشرطي. | |
| alpha_high_frequency (`float`، القيمة الافتراضية `1.1`) : الوزن الذي يُستخدم لتقليص تحديثات الترددات العالية. يُستخدم هذا الوزن لتقريب الفرع غير الشرطي من مخرجات الفرع الشرطي. | |
| unconditional_batch_skip_range (`int`، القيمة الافتراضية `5`) : معالجة التفرّع غير الشرطي كل `N` تكرار. إذا تم ضبط هذا على `N`، فسيتم تخطي حساب التفرّع غير الشرطي `N - 1` مرة (أي سيتم إعادة استخدام حالات التفرّع غير الشرطي المخزنة مؤقتًا) قبل حساب حالات التفرّع غير الشرطي الجديدة مرة أخرى. | |
| unconditional_batch_timestep_skip_range (`tuple[float, float]`، القيمة الافتراضية `(-1, 641)`) : نطاق خطوات الزمن الذي يمكن فيه تجاوز حساب الفرع غير الشرطي دون فقدان كبير في الجودة. يتعيّن على المستخدم تحديد هذا النطاق بناءً على النموذج الأساسي. القيمة الأولى في المجموعة هي الحد الأدنى والقيمة الثانية هي الحد الأقصى. | |
| spatial_attention_block_identifiers (`tuple[str, ...]`، القيمة الافتراضية هي `("blocks.*attn1", "transformer_blocks.*attn1", "single_transformer_blocks.*attn1")`) : المعرّفات التي تُطابَق مع كتل الانتباه المكاني في النموذج. إذا احتوى اسم الكتلة على أيٍّ من هذه المعرّفات، فسيتم تطبيق FasterCache على تلك الكتلة. يمكن أن تكون هذه المعرّفات أسماءً كاملة للطبقات، أو أسماءً جزئية، أو أنماطًا مطابقة (regex). ستتم عملية المطابقة دائمًا باستخدام مطابقة regex. | |
| temporal_attention_block_identifiers (`tuple[str, ...]`، القيمة الافتراضية هي `("temporal_transformer_blocks.*attn1",)`) : المعرّفات التي تُطابَق مع كتل الانتباه الزمني في النموذج. إذا احتوى اسم الكتلة على أيٍّ من هذه المعرّفات، فسيتم تطبيق FasterCache على تلك الكتلة. يمكن أن تكون هذه المعرّفات أسماءً كاملة للطبقات، أو أسماءً جزئية للطبقات، أو أنماطًا مطابقة (regex). ستتم عملية المطابقة دائمًا باستخدام مطابقة regex. | |
| attention_weight_callback (`Callable[[torch.nn.Module], float]`، القيمة الافتراضية `None`) : دالة الاستدعاء لتحديد الوزن الذي يُستخدم لتوسيع مخرجات الانتباه. يجب أن تستقبل هذه الدالة وحدة الانتباه كمدخل وتعيد قيمة من نوع float. تُستخدم هذه الدالة لتقريب الفرع غير الشرطي من مخرجات الفرع الشرطي. إذا لم تُوفَّر، فإن الوزن الافتراضي هو 0.5 لجميع خطوات الزمن. وعادةً، كما هو موضح في الورقة البحثية، يجب أن يزداد هذا الوزن تدريجياً من 0 إلى 1 مع تقدم الاستدلال. يُشجع المستخدمون على التجربة وتوفير جداول أوزان مخصصة تأخذ في الاعتبار عدد خطوات الاستدلال وسلوك النموذج الأساسي مع تقدم إزالة الضوضاء. | |
| low_frequency_weight_callback (`Callable[[torch.nn.Module], float]`، القيمة الافتراضية `None`) : دالة الاستدعاء لتحديد الوزن الذي يُستخدم لتعديل التحديثات منخفضة التردد. إذا لم تُقدَّم، فإن الوزن الافتراضي هو 1.1 للخطوات الزمنية ضمن النطاق المحدد (كما هو موضح في الورقة البحثية). | |
| high_frequency_weight_callback (`Callable[[torch.nn.Module], float]`، القيمة الافتراضية `None`) : دالة الاستدعاء لتحديد الوزن الذي يُستخدم لتعديل التحديثات عالية التردد. إذا لم تُقدَّم، فإن الوزن الافتراضي هو 1.1 للخطوات الزمنية ضمن النطاق المحدد (كما هو موضح في الورقة البحثية). | |
| tensor_format (`str`، الافتراضي `"BCFHW"`) : تنسيق المصفوفات المدخلة. يجب أن يكون أحد `"BCFHW"` أو `"BFCHW"` أو `"BCHW"`. يُستخدم هذا التنسيق لتقسيم الإطارات الكامنة الفردية حتى يمكن حساب المكونات ذات التردد المنخفض والعالي. | |
| is_guidance_distilled (`bool`، القيمة الافتراضية `False`) : ما إذا كان النموذج مُقَطَّرًا بالإرشاد أم لا. إذا كان النموذج مُقَطَّرًا بالإرشاد، فلن يُطبَّق FasterCache على مستوى مُزيل الضوضاء لتخطي حساب الفرع غير الشرطي (لأنه غير موجود). | |
| _unconditional_conditional_input_kwargs_identifiers (`list[str]`، القيمة الافتراضية هي `("hidden_states", "encoder_hidden_states", "timestep", "attention_mask", "encoder_attention_mask")`) : المعرّفات المطابقة لـ kwargs المدخلات التي تحتوي على المدخلات غير الشرطية والشرطية المُدمجة على مستوى الدفعة. إذا احتوى اسم kwargs المدخلات على أي من هذه المعرّفات، سيقوم FasterCache بتقسيم المدخلات إلى فرعين: غير شرطي وشرطي. يجب أن يكون هذا قائمة بأسماء kwargs المدخلات الدقيقة التي تحتوي على المدخلات غير الشرطية والشرطية المُدمجة على مستوى الدفعة. | |
| إعدادات [FasterCache](https://huggingface.co/papers/2410.19355). | |
| #### diffusers.apply_faster_cache[[diffusers.apply_faster_cache]] | |
| ```python | |
| diffusers.apply_faster_cache(module: Module, config: FasterCacheConfig) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/hooks/faster_cache.py#L486) | |
| **المعاملات:** | |
| module (`torch.nn.Module`) : وحدة pytorch التي سيتم تطبيق FasterCache عليها. عادةً، يجب أن تكون هذه الوحدة معمارية transformer مدعومة في Diffusers، مثل `CogVideoXTransformer3DModel`، لكن من الممكن أيضًا أن تعمل التطبيقات الخارجية. | |
| config (`FasterCacheConfig`) : الإعدادات المستخدمة لـ FasterCache. | |
| يطبّق [FasterCache](https://huggingface.co/papers/2410.19355) على خط أنابيب معيّن. | |
| مثال: | |
| ```python | |
| >>> import torch | |
| >>> from diffusers import CogVideoXPipeline, FasterCacheConfig, apply_faster_cache | |
| >>> pipe = CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-5b", torch_dtype=torch.bfloat16) | |
| >>> pipe.to("cuda") | |
| >>> config = FasterCacheConfig( | |
| ... spatial_attention_block_skip_range=2, | |
| ... spatial_attention_timestep_skip_range=(-1, 681), | |
| ... low_frequency_weight_update_timestep_range=(99, 641), | |
| ... high_frequency_weight_update_timestep_range=(-1, 301), | |
| ... spatial_attention_block_identifiers=["transformer_blocks"], | |
| ... attention_weight_callback=lambda _: 0.3, | |
| ... tensor_format="BFCHW", | |
| ... ) | |
| >>> apply_faster_cache(pipe.transformer, config) | |
| ``` | |
| ## FirstBlockCacheConfig[[diffusers.FirstBlockCacheConfig]] | |
| #### diffusers.FirstBlockCacheConfig[[diffusers.FirstBlockCacheConfig]] | |
| ```python | |
| diffusers.FirstBlockCacheConfig(threshold: float = 0.05) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/hooks/first_block_cache.py#L33) | |
| **المعاملات:** | |
| threshold (`float`، القيمة الافتراضية `0.05`) : العتبة التي تُحدَّد بناءً عليها ما إذا كان من الضروري إجراء تمرير أمامي عبر جميع طبقات النموذج أم لا. عادةً ما تؤدي عتبة أعلى إلى تمرير أمامي عبر عدد أقل من الطبقات واستدلال أسرع، لكنها قد تؤدي إلى جودة توليد أدنى. وقد لا تؤدي عتبة أدنى إلى تسريع ملحوظ في التوليد. تُقارَن العتبة مع فرق absmean بين بقايا المخرجات الحالية والمخرجات المخزنة مؤقتًا من كتلة الترانسفورمر الأولى. إذا كان الفرق أقل من العتبة، يتم تخطي التمرير الأمامي. | |
| إعدادات [First Block Cache](https://github.com/chengzeyi/ParaAttention/blob/7a266123671b55e7e5a2fe9af3121f07a36afc78/README.md#first-block-cache-our-dynamic-caching). | |
| #### diffusers.apply_first_block_cache[[diffusers.apply_first_block_cache]] | |
| ```python | |
| diffusers.apply_first_block_cache(module: Module, config: FirstBlockCacheConfig) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/hooks/first_block_cache.py#L193) | |
| **المعاملات:** | |
| module (`torch.nn.Module`) : وحدة pytorch التي سيتم تطبيق FBCache عليها. عادةً، يجب أن تكون هذه الوحدة معمارية transformer مدعومة في Diffusers، مثل `CogVideoXTransformer3DModel`، لكن من الممكن أيضًا أن تعمل التطبيقات الخارجية. | |
| config (`FirstBlockCacheConfig`) : الإعدادات المستخدمة لتطبيق طريقة FBCache. | |
| يطبّق [First Block Cache](https://github.com/chengzeyi/ParaAttention/blob/4de137c5b96416489f06e43e19f2c14a772e28fd/README.md#first-block-cache-our-dynamic-caching) على وحدة محددة. | |
| يعتمد First Block Cache على أفكار [TeaCache](https://huggingface.co/papers/2411.19108). وهو أبسط بكثير في التنفيذ بشكل عام لمجموعة واسعة من النماذج، وقد تم دمجه أولاً لأغراض تجريبية. | |
| مثال: | |
| ```python | |
| >>> import torch | |
| >>> from diffusers import CogView4Pipeline | |
| >>> from diffusers.hooks import apply_first_block_cache, FirstBlockCacheConfig | |
| >>> pipe = CogView4Pipeline.from_pretrained("THUDM/CogView4-6B", torch_dtype=torch.bfloat16) | |
| >>> pipe.to("cuda") | |
| >>> apply_first_block_cache(pipe.transformer, FirstBlockCacheConfig(threshold=0.2)) | |
| >>> prompt = "A photo of an astronaut riding a horse on mars" | |
| >>> image = pipe(prompt, generator=torch.Generator().manual_seed(42)).images[0] | |
| >>> image.save("output.png") | |
| ``` | |
| ## TaylorSeerCacheConfig[[diffusers.TaylorSeerCacheConfig]] | |
| #### diffusers.TaylorSeerCacheConfig[[diffusers.TaylorSeerCacheConfig]] | |
| ```python | |
| diffusers.TaylorSeerCacheConfig(cache_interval: int = 5, disable_cache_before_step: int = 3, disable_cache_after_step: int | None = None, max_order: int = 1, taylor_factors_dtype: typing.Optional[torch.dtype] = torch.bfloat16, skip_predict_identifiers: list[str] | None = None, cache_identifiers: list[str] | None = None, use_lite_mode: bool = False) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/hooks/taylorseer_cache.py#L26) | |
| **المعاملات:** | |
| cache_interval (`int`، القيمة الافتراضية `5`) : الفترة بين خطوات الحساب الكاملة. بعد الحساب الكامل، تُعاد استخدام المخرجات المخزنة (المُقدَّرة) لهذا العدد من خطوات إزالة الضوضاء اللاحقة قبل تحديثها بمرور أمامي كامل جديد. | |
| disable_cache_before_step (`int`، القيمة الافتراضية `3`) : فهرس خطوة إزالة الضوضاء التي يُعطَّل التخزين المؤقت قبلها، مما يعني أن الحساب الكامل يُنفَّذ للخطوات الأولية (0 حتى disable_cache_before_step - 1) لجمع البيانات اللازمة لتقريبات متسلسلة تايلور. خلال هذه الخطوات، يتم تحديث معاملات تايلور، لكن التخزين المؤقت/التنبؤات لا تُطبَّق. يبدأ التخزين المؤقت من هذه الخطوة. | |
| disable_cache_after_step (`int`, *اختياري*, القيمة الافتراضية `None`) : فهرس خطوة إزالة الضوضاء التي يُعطَّل بعدها التخزين المؤقت. إذا تم ضبطه، فبالنسبة للخطوات >= هذه القيمة، ستقوم جميع الوحدات بتنفيذ الحسابات الكاملة دون تنبؤات أو تحديثات للحالة، مما يضمن الدقة في المراحل اللاحقة عند الحاجة. | |
| max_order (`int`، القيمة الافتراضية `1`) : أعلى ترتيب في توسيع متسلسلة تايلور لتقريب مخرجات الوحدة. توفر الترتيبات الأعلى تقريبات أدق لكنها تزيد من حجم الحسابات واستهلاك الذاكرة. | |
| taylor_factors_dtype (`torch.dtype`، الافتراضي هو `torch.bfloat16`) : نوع البيانات المستخدم لتخزين وحساب عوامل متسلسلة تايلور. تقلل الدقة المنخفضة من الذاكرة لكنها قد تؤثر على الاستقرار؛ بينما تحسّن الدقة العالية الدقة على حساب المزيد من الذاكرة. | |
| skip_predict_identifiers (`list[str]`، *اختياري*، القيمة الافتراضية `None`) : أنماط تعبيرية منتظمة (باستخدام `re.fullmatch`) لأسماء الوحدات التي يجب وضعها في وضع "تخطي" ضمن وضع "التخزين المؤقت". في هذا الوضع، تُحسب الوحدة بالكامل خلال خطوات التهيئة أو التحديث، لكنها تُرجع متجهًا صفريًا (يطابق الشكل المسجَّل) خلال خطوات التنبؤ لتخطي الحساب بكفاءة. | |
| cache_identifiers (`list[str]`، *اختياري*، القيمة الافتراضية `None`) : أنماط تعبيرية منتظمة (باستخدام `re.fullmatch`) لأسماء الوحدات التي يجب وضعها في وضع التخزين المؤقت لسلاسل تايلور، حيث تُقَرَّب المخرجات وتُخزَّن مؤقتًا لإعادة الاستخدام. | |
| use_lite_mode (`bool`، *اختياري*، القيمة الافتراضية `False`) : يُفعّل نسخة خفيفة من TaylorSeer تقلل من استهلاك الذاكرة من خلال تطبيق أنماط محددة مسبقًا للتخطي والتخزين المؤقت (مثل تخطي الكتل وتخزين الإسقاطات مؤقتًا). يتجاوز هذا الإعداد أي قيم مخصصة لـ `inactive_identifiers` أو `active_identifiers`. | |
| إعدادات ذاكرة TaylorSeer. انظر: https://huggingface.co/papers/2503.06923 | |
| ملاحظات: | |
| - تتم مطابقة الأنماط باستخدام `re.fullmatch` على اسم الوحدة. | |
| - إذا تم توفير `skip_predict_identifiers` أو `cache_identifiers`، فإن الوحدات المطابقة فقط هي التي تُستهدف بالتدخل. | |
| - إذا لم يُوفَّر أيٌّ منهما، تُربط جميع الوحدات المشابهة للانتباه افتراضيًا. | |
| مثال على الاستخدام غير النشط والنشط: | |
| ```py | |
| def forward(x): | |
| x = self.module1(x) # inactive module: returns zeros tensor based on shape recorded during full compute | |
| x = self.module2(x) # active module: caches output here, avoiding recomputation of prior steps | |
| return x | |
| ``` | |
| #### bfloat16[[diffusers.TaylorSeerCacheConfig.taylor_factors_dtype]] | |
| ```python | |
| bfloat16(*args, **kwargs) | |
| ``` | |
| قيمة وهمية لمسار منقّط (مثل `torch.float32`): سلاسل الوصول إلى السمات، والاستدعاءات تتصرف كمُزيّنات (decorators) مرّرة، و`repr` هو المسار المنقّط، وعند استخدامه كصنف أساسي يُستبدل بصنف أساسي من نوع `type` عادي (بموجب `__mro_entries__` في PEP 560)، بحيث تحتفظ الصنوف الفرعية الحقيقية بفئة ميتا (metaclass) عادية، وتقرأ `inspect.signature` دالة `__init__` الحقيقية الخاصة بها بدلاً من تلك الوهمية. | |
| #### diffusers.apply_taylorseer_cache[[diffusers.apply_taylorseer_cache]] | |
| ```python | |
| diffusers.apply_taylorseer_cache(module: Module, config: TaylorSeerCacheConfig) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/hooks/taylorseer_cache.py#L261) | |
| **المعاملات:** | |
| module (torch.nn.Module) : فرع النموذج الذي سيتم تطبيق الخطافات عليه. | |
| config (tN)TaylorSeerCacheConfig : إعدادات ذاكرة التخزين المؤقت. | |
| يطبّق ذاكرة TaylorSeer على خط أنابيب معيّن (عادةً المحوّل / UNet). | |
| تُربط هذه الدوال الوحدات المحددة في النموذج لتفعيل التخزين المؤقت أو التخطي بناءً على الإعدادات المقدمة، مما يقلل من الحسابات المكررة في حلقات إزالة الضوضاء في الانتشار. | |
| مثال: | |
| ```python | |
| >>> import torch | |
| >>> from diffusers import FluxPipeline, TaylorSeerCacheConfig | |
| >>> pipe = FluxPipeline.from_pretrained( | |
| ... "black-forest-labs/FLUX.1-dev", | |
| ... torch_dtype=torch.bfloat16, | |
| ... ) | |
| >>> pipe.to("cuda") | |
| >>> config = TaylorSeerCacheConfig( | |
| ... cache_interval=5, | |
| ... max_order=1, | |
| ... disable_cache_before_step=3, | |
| ... taylor_factors_dtype=torch.float32, | |
| ... ) | |
| >>> pipe.transformer.enable_cache(config) | |
| ``` | |
| ## MagCacheConfig[[diffusers.MagCacheConfig]] | |
| #### diffusers.MagCacheConfig[[diffusers.MagCacheConfig]] | |
| ```python | |
| diffusers.MagCacheConfig(threshold: float = 0.06, max_skip_steps: int = 3, retention_ratio: float = 0.2, num_inference_steps: int = 28, mag_ratios: typing.Union[torch.Tensor, typing.List[float], NoneType] = None, calibrate: bool = False) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/hooks/mag_cache.py#L84) | |
| **المعاملات:** | |
| threshold (`float`، القيمة الافتراضية `0.06`) : عتبة الخطأ المتراكم. إذا كان الخطأ المتراكم أقل من هذه العتبة، يتم تجاوز حساب الكتلة. تسمح عتبة أعلى بتجاوز أكثر عدوانية (أسرع) لكنها قد تُضعف الجودة. | |
| max_skip_steps (`int`، القيمة الافتراضية `3`) : الحد الأقصى لعدد الخطوات المتتالية التي يمكن تخطيها (K في الورقة البحثية). | |
| retention_ratio (`float`، القيمة الافتراضية `0.2`) : نسبة الخطوات الأولية التي يُعطل فيها التخطي لضمان الاستقرار. على سبيل المثال، إذا كانت `num_inference_steps` تساوي 28 وكانت `retention_ratio` تساوي 0.2، فلن يتم تخطي الخطوات الست الأولى أبدًا. | |
| num_inference_steps (`int`، القيمة الافتراضية `28`) : عدد خطوات الاستدلال المستخدمة في خط الأنابيب. هذا مطلوب لاستيفاء `mag_ratios` بشكل صحيح. | |
| mag_ratios (`torch.Tensor`، *اختياري*) : نسب السعة المحسوبة مسبقًا للنموذج. تعتمد هذه النسب على نقطة الحفظ (checkpoint). إذا لم تُقدَّم، يجب عليك تعيين `calibrate=True` لحسابها لنموذجك المحدد. بالنسبة إلى نماذج Flux، يمكنك استخدام `diffusers.hooks.mag_cache.FLUX_MAG_RATIOS`. | |
| calibrate (`bool`، القيمة الافتراضية `False`) : إذا كانت القيمة True، يتم تفعيل وضع المعايرة. في هذا الوضع، لا يتم تجاوز أي كتل. بدلاً من ذلك، يقوم الخطاف بحساب نسب السعة للتشغيل الحالي وتسجيلها في النهاية. استخدم هذا للحصول على `mag_ratios` للنماذج أو المجدولين الجدد. | |
| إعدادات [MagCache](https://github.com/Zehong-Ma/MagCache). | |
| #### diffusers.apply_mag_cache[[diffusers.apply_mag_cache]] | |
| ```python | |
| diffusers.apply_mag_cache(module: Module, config: MagCacheConfig) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/hooks/mag_cache.py#L398) | |
| **المعاملات:** | |
| module (`torch.nn.Module`) : الوحدة التي سيتم تطبيق MagCache عليها. | |
| config (`MagCacheConfig`) : إعدادات MagCache. | |
| يطبّق MagCache على وحدة محددة (عادةً ما تكون Transformer). | |
| ## SeaCacheConfig[[diffusers.SeaCacheConfig]] | |
| #### diffusers.SeaCacheConfig[[diffusers.SeaCacheConfig]] | |
| ```python | |
| diffusers.SeaCacheConfig(threshold: float = 0.25, residual_order: int = 1, retention_steps: int = 1, cache_end_steps: int = 1, max_consecutive_cached: int = 2, power_exp: float = 3.0, raw_vision_callback: typing.Callable[[torch.nn.Module, tuple[typing.Any, ...], dict[str, typing.Any]], list[torch.Tensor] | None] = None) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/hooks/sea_cache.py#L38) | |
| **المعاملات:** | |
| threshold (`float`، القيمة الافتراضية `0.25`) : ميزانية L1 النسبية المتراكمة. القيم الأكبر تعيد استخدام ذاكرة التخزين المؤقت بشكل أكثر تكراراً. | |
| residual_order (`int`، القيمة الافتراضية `1`) : الترتيب المستخدم للتنبؤ بالمتبقي (residual) في المحوّل (transformer). يعيد `0` استخدام المتبقي الأحدث مباشرةً، بينما يقوم `1` بالاستقراء الخطي من آخر تنفيذين كاملين. | |
| retention_steps (`int`، القيمة الافتراضية `1`) : عدد خطوات المجدول الأولية التي تُنفَّذ دائمًا بالكامل. | |
| cache_end_steps (`int`، القيمة الافتراضية `1`) : عدد خطوات المجدول النهائية التي تُنفَّذ دائمًا بالكامل. | |
| max_consecutive_cached (`int`، القيمة الافتراضية `2`) : الحد الأقصى لعدد مرات إعادة استخدام المتبقي المتتالية لكل سياق تخزين مؤقت قبل إجبار التنفيذ الكامل. تعطيل `0` لهذا الحد. | |
| power_exp (`float`، القيمة الافتراضية `3.0`) : أُسّ المسبق لقوة إشارة SEA النظيفة. يستخدم SeaCache القيمة `3.0` لميزات الفيديو. | |
| raw_vision_callback (`Callable`، *اختياري*) : مُكيّف نموذج متقدم يعيد الكامنات البصرية التي تشكّل المخرجات المولّدة، حيث يكون شكل كل منها `(C, T, H, W)`. شمل إطارات التكييف النظيفة ضمن مسار المخرجات، لكن استبعد التلميحات البصرية المنفصلة التي لا تُعدّ جزءًا من المخرجات. عند الإغفال، يُستخدم مُكيّف مدمج إذا كان متاحًا. | |
| إعدادات [SeaCache](https://huggingface.co/papers/2602.18993). | |
| SeaCache معطّل افتراضيًا ولا يتم تفعيله إلا بعد تمرير هذا الإعداد إلى `transformer.enable_cache(config)`. | |
| يقارن SeaCache مؤشرات SEA (الواعية بالتطور الطيفي) بين خطوات المجدول. إذا بقي التغيير النسبي المتراكم دون `threshold`، يتم استبدال مكدس كتل التحوّل المتكرر ببواقي مخزنة مؤقتًا. قد توسّع محددات النموذج الخاصة حدود البواقي لتتجاوز تلك الكتل. يمكن لتحوّلات الفيديو الأخرى استخدام المسار العام عن طريق تسجيل بيانات كتلها الوصفية وتوفير `raw_vision_callback`؛ ويجب أن تدخل خط أنابيبها في `cache_context` لكل مسار تحويل. | |
| مثال: | |
| ```python | |
| >>> from diffusers import Cosmos3OmniPipeline, SeaCacheConfig | |
| >>> pipe = Cosmos3OmniPipeline.from_pretrained("nvidia/Cosmos3-Nano") | |
| >>> pipe.transformer.enable_cache(SeaCacheConfig()) | |
| ``` | |
| #### diffusers.apply_sea_cache[[diffusers.apply_sea_cache]] | |
| ```python | |
| diffusers.apply_sea_cache(module: Module, config: SeaCacheConfig) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/hooks/sea_cache.py#L980) | |
| **المعاملات:** | |
| module (`torch.nn.Module`) : وحدة Transformer للتخزين المؤقت. | |
| config (`SeaCacheConfig`) : إعدادات SeaCache. | |
| تطبيق SeaCache على محوّل مدعوم. | |
| يعيد SeaCache استخدام متبقٍ مخزّن مؤقتًا لركيزة الكتل المتكررة في محوّل. قد تُخصّص مُكيّفات النموذج استخراج المؤشرات وحدّ المتبقّي؛ بينما يستخدم المسار العام بيانات الوصف المسجّلة للكتل و`raw_vision_callback`. يجب التحقق من معاملات التوافق والتخزين المؤقت لكل نموذج. | |
Xet Storage Details
- Size:
- 41.7 kB
- Xet hash:
- 79766815f9496fff041821178e54b397c6a1ea0c715a39da1dfd0d11bd90aef4
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.