Buckets:
| # التخزين المؤقت | |
| يعمل التخزين المؤقت على تسريع الاستدلال من خلال تخزين المخرجات الوسيطة للطبقات المختلفة، مثل طبقات الانتباه والطبقات الأمامية، وإعادة استخدامها، بدلاً من تنفيذ الحساب الكامل في كل خطوة من خطوات الاستدلال. فهو يحسّن سرعة التوليد بشكل كبير على حساب زيادة استهلاك الذاكرة، ولا يتطلب تدريبًا إضافيًا. | |
| يُظهر لك هذا الدليل كيفية استخدام طرق التخزين المؤقت المدعومة في Diffusers. | |
| ## بث الانتباه الهرمي | |
| [بث الانتباه الهرمي (PAB)](https://huggingface.co/papers/2408.12588) يستند إلى الملاحظة أن مخرجات الانتباه لا تختلف كثيرًا بين خطوات التوليد المتتالية. تكون فروق الانتباه أصغر في طبقات الانتباه المتقاطع، وتُخزَّن عمومًا عبر نطاق أوسع من الخطوات الزمنية. يتبع ذلك طبقات الانتباه الزمني وطبقات الانتباه المكاني. | |
| > [!TIP] | |
| > لا تمتلك جميع نماذج الفيديو ثلاثة أنواع من الانتباه (المتقاطع، والزمني، والمكاني)! | |
| يمكن دمج PAB مع تقنيات أخرى مثل توازي التسلسل وتوازي التوجيه الحر من التصنيف (توازي البيانات) لتحقيق توليد الفيديو شبه الفوري. | |
| قم بإعداد [PyramidAttentionBroadcastConfig](/docs/diffusers/v0.43.0/ar/api/cache#diffusers.PyramidAttentionBroadcastConfig) ومرره إلى محوّل خط الأنابيب لتفعيله. يتحكم `spatial_attention_block_skip_range` في تكرار تخطي حسابات الانتباه في كتل الانتباه المكانية، بينما يمثل `spatial_attention_timestep_skip_range` نطاق خطوات الزمن المراد تخطيها. انتبه إلى اختيار نطاق مناسب، لأن الفاصل الأصغر قد يؤدي إلى بطء في سرعة الاستدلال، بينما قد يؤدي الفاصل الأكبر إلى انخفاض في جودة التوليد. | |
| ```python | |
| import torch | |
| from diffusers import CogVideoXPipeline, PyramidAttentionBroadcastConfig | |
| pipeline = CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-5b", dtype=torch.bfloat16) | |
| pipeline.to("cuda") # or "mps", "xpu", "cpu" | |
| config = PyramidAttentionBroadcastConfig( | |
| spatial_attention_block_skip_range=2, | |
| spatial_attention_timestep_skip_range=(100, 800), | |
| current_timestep_callback=lambda: pipe.current_timestep, | |
| ) | |
| pipeline.transformer.enable_cache(config) | |
| ``` | |
| ## FasterCache | |
| يخزّن [FasterCache](https://huggingface.co/papers/2410.19355) ميزات الانتباه ويعيد استخدامها، على غرار [PAB](#pyramid-attention-broadcast)، نظراً لأن فروقات المخرجات تكون صغيرة لكل خطوة زمنية تالية. | |
| قد يختار هذا الأسلوب أيضًا تخطي تنبؤ الفرع غير الشرطي، عند استخدام التوجيه الحر من التصنيف للعينة (وهو أمر شائع في معظم النماذج الأساسية)، وتقديره من تنبؤ الفرع الشرطي إذا كان هناك تكرار كبير في المخرجات الكامنة المتنبأ بها بين خطوات الزمن المتتالية. | |
| قم بإعداد [FasterCacheConfig](/docs/diffusers/v0.43.0/ar/api/cache#diffusers.FasterCacheConfig) ومرّره إلى محوّل خط الأنابيب لتفعيله. | |
| ```python | |
| import torch | |
| from diffusers import CogVideoXPipeline, FasterCacheConfig | |
| pipe line= CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-5b", dtype=torch.bfloat16) | |
| pipeline.to("cuda") # or "mps", "xpu", "cpu" | |
| config = FasterCacheConfig( | |
| spatial_attention_block_skip_range=2, | |
| spatial_attention_timestep_skip_range=(-1, 681), | |
| current_timestep_callback=lambda: pipe.current_timestep, | |
| attention_weight_callback=lambda _: 0.3, | |
| unconditional_batch_skip_range=5, | |
| unconditional_batch_timestep_skip_range=(-1, 781), | |
| tensor_format="BFCHW", | |
| ) | |
| pipeline.transformer.enable_cache(config) | |
| ``` | |
| ## SeaCache | |
| يقارن [SeaCache](https://huggingface.co/papers/2602.18993) مؤشرات التطور الطيفي الواعي (SEA) بين خطوات إزالة الضوضاء المتتالية. عندما يبقى التغير التراكمي في المؤشر دون حد معين، يتخطى مجموعة كتل التحويلية المكلفة ويتنبأ بمخرجاتها من بقايا مخزنة مسبقًا. ابنِ المؤشر من الكمونيات البصرية التي تشكّل المخرجات المولّدة. شمل إطارات التكييف النظيفة عندما تكون جزءًا من مسار تلك المخرجات، كما هو الحال في توليد الفيديو من صورة وتوليد الفيديو من فيديو. استبعد التلميحات البصرية المنفصلة التي تكيّف التوليد لكنها ليست جزءًا من المخرجات. يتم استبعاد تكييف النص لأنه ليس كمونًا بصريًا. | |
| تتحكم حزم Cosmos 3 Transfer في التلميحات كسلاسل بصرية مستقلة، لذا يستثني مُكيّفها هذه التلميحات من المؤشر. تقارن فروع Control-CFG مسار الإخراج نفسه مع الاحتفاظ بقاياها المخزنة الخاصة بها. لا تزال التلميحات الشرطية تُشكّل شرطًا للمحوّل. | |
| توفر التنفيذ محولات مدمجة للنماذج التالية: | |
| - **Cosmos 3** هو التكامل الأساسي المُحسَّن والمُختبَر. يقوم بتخزين المكدس الكامل لفك الترميز عبر حدّ ما بعد التطبيع. | |
| - يستخدم **Wan T2V** مسار الكتل المتكررة العام في وضع eager. تُظهر هذه التكيفية كيف يمكن لمحوّل فيديو أحادي التدفق آخر أن يوفر كامنات رؤية خام إلى SeaCache؛ وهي ليست ادعاءً بأن نفس معاملات التخزين المؤقت مثالية لـ Wan أو أن متغيرات Wan الأخرى مدعومة. | |
| يمكن لحوّالات الفيديو الأخرى أن تتكامل مع المسار العام عندما تستخدم `CacheMixin`، وتعرض قائمة كتل متكررة معترفًا بها، وتسجّل تخطيط مدخلات/مخرجات الكتل في `TransformerBlockRegistry`. يجب أن تدخل خط الأنابيب في `cache_context` لكل استدعاء للحوّال، وتربط `step_index` و`sigma` و`num_inference_steps`، وتستخدم أسماء سياق منفصلة للمسارات المستقلة مثل التوجيه الشرطي وغير الشرطي. مرّر `raw_vision_callback` الذي يعيد الكامنات البصرية التي تشكّل المخرجات المولّدة عندما لا يتوفر مُكيّف مدمج. تحقّق من جودة المخرجات وضبط معاملات التخزين المؤقت لكل نموذج ومجدول؛ فالدعم ونتائج الاختبارات لا تنتقل تلقائيًا من Cosmos 3. | |
| ### Cosmos 3 | |
| SeaCache معطّل افتراضيًا. فعّله على المحوّل؛ إذ يربط حل إزالة الضوضاء في Cosmos 3 خطوة المجدول النشطة، وقيمة sigma، وعدد الخطوات مع كل استدعاء لـ`cache_context`، لذا لا حاجة إلى أي ربط إضافي: | |
| ```python | |
| from diffusers import Cosmos3OmniPipeline, SeaCacheConfig | |
| pipe = Cosmos3OmniPipeline.from_pretrained("nvidia/Cosmos3-Nano") | |
| pipe.transformer.enable_cache(SeaCacheConfig(threshold=0.2, max_consecutive_cached=2)) | |
| ``` | |
| يعمل هذا الواجهة البرمجية على مستوى النموذج مع [Cosmos3OmniPipeline](/docs/diffusers/v0.43.0/ar/api/pipelines/cosmos3#diffusers.Cosmos3OmniPipeline) و[Cosmos3OmniModularPipeline](/docs/diffusers/v0.43.0/ar/api/pipelines/cosmos3#diffusers.Cosmos3OmniModularPipeline) و[Cosmos3DistilledModularPipeline](/docs/diffusers/v0.43.0/ar/api/pipelines/cosmos3#diffusers.Cosmos3DistilledModularPipeline). يُعد SeaCache تحسينًا تقريبيًا وقد يُغيّر المخرجات المولّدة. استدعِ `pipe.transformer.disable_cache()` عندما تحتاج إلى تنفيذ كل خطوة إزالة الضوضاء عبر المحوّل الكامل. | |
| ## FirstBlockCache | |
| يتحقق [FirstBlock Cache](https://huggingface.co/docs/diffusers/main/en/api/cache#diffusers.FirstBlockCacheConfig) من مقدار تغيّر الطبقات المبكرة في مُزيل الضوضاء من خطوة زمنية إلى التالية. إذا كان التغير صغيراً، يتخطّى النموذج الطبقات اللاحقة المكلفة ويعيد استخدام المخرجات السابقة. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| from diffusers.hooks import apply_first_block_cache, FirstBlockCacheConfig | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "Qwen/Qwen-Image", dtype=torch.bfloat16 | |
| ) | |
| apply_first_block_cache(pipeline.transformer, FirstBlockCacheConfig(threshold=0.2)) | |
| ``` | |
| ## TaylorSeer ذاكرة مؤقتة | |
| يعمل [TaylorSeer Cache](https://huggingface.co/papers/2403.06923) على تسريع استنتاج النماذج الانتشارية من خلال استخدام توسعات متسلسلة تايلور لتقريب وتخزين التفعيلات الوسيطة عبر خطوات إزالة الضوضاء. يتنبأ هذا المنهج بالمخرجات المستقبلية بناءً على الحسابات السابقة، ويعيد استخدامها عند فترات محددة لتقليل الحسابات المكررة. | |
| يقدّم هذا آلية التخزين المؤقت نتائج قوية مع حد أدنى من العبء الإضافي على الذاكرة. لتحليل الأداء التفصيلي، راجعوا [نتائجنا هنا](https://github.com/huggingface/diffusers/pull/12648#issuecomment-3610615080). | |
| لتفعيل TaylorSeer Cache، أنشئ [TaylorSeerCacheConfig](/docs/diffusers/v0.43.0/ar/api/cache#diffusers.TaylorSeerCacheConfig) وقم بتمريره إلى نموذج التحويل الخاص بخط أنابيبك: | |
| - `cache_interval`: عدد الخطوات لإعادة استخدام المخرجات المخزنة مؤقتًا قبل إجراء تمرير أمامي كامل | |
| - `disable_cache_before_step`: الخطوات الأولية التي تستخدم الحسابات الكاملة لجمع البيانات للتقديرات | |
| - `max_order`: دقة التقريب (نظريًا، تزيد القيم الأعلى من الجودة لكنها تزيد أيضًا من استهلاك الذاكرة، وننصح بإعدادها على `1`) | |
| ```python | |
| import torch | |
| from diffusers import FluxPipeline, TaylorSeerCacheConfig | |
| pipe = FluxPipeline.from_pretrained( | |
| "black-forest-labs/FLUX.1-dev", | |
| dtype=torch.bfloat16, | |
| ).to("cuda") # or "mps", "xpu", "cpu" | |
| config = TaylorSeerCacheConfig( | |
| cache_interval=5, | |
| max_order=1, | |
| disable_cache_before_step=10, | |
| taylor_factors_dtype=torch.bfloat16, | |
| ) | |
| pipe.transformer.enable_cache(config) | |
| ``` | |
| ## MagCache | |
| يعمل [MagCache](https://github.com/Zehong-Ma/MagCache) على تسريع الاستدلال عن طريق تخطي كتل التحويل (Transformer blocks) بناءً على حجم التحديث المتبقي. يلاحظ أن حجم التحديثات (المخرجات - المدخلات) يتناقص بشكل يمكن التنبؤ به على مدى عملية الانتشار. من خلال تراكم "ميزانية خطأ" بناءً على نسب الأحجام المحسوبة مسبقًا، يقرر ديناميكيًا متى يتعين تخطي الحساب وإعادة استخدام المتبقي السابق. | |
| يعتمد MagCache على **النسب الحجمية** (`mag_ratios`)، والتي تصف منحنى التلاشي هذا. هذه النسب محددة لنقطة التفتيش النموذجية ومجدول الجدولة. النسب الحجمية المرفقة `FLUX_MAG_RATIOS` تم قياسها على FLUX.1؛ بينما تحتاج النماذج الأخرى، بما في ذلك Flux2 وFlux2 Klein، إلى عملية معايرة خاصة بها. | |
| لاستخدام MagCache، تتّبع عادةً عملية من خطوتين: **المعايرة** و**الاستدلال**. | |
| 1. **المعايرة**: نفّذ الاستدلال مرة واحدة مع `calibrate=True`. سيقوم الخطاف بقياس أحجام البواقي وطباعة النسب المحسوبة في وحدة التحكم. | |
| 2. **الاستدلال**: مرر هذه النسب إلى `MagCacheConfig` لتفعيل التسريع. | |
| ```python | |
| import torch | |
| from diffusers import FluxPipeline, MagCacheConfig | |
| pipe = FluxPipeline.from_pretrained( | |
| "black-forest-labs/FLUX.1-schnell", | |
| dtype=torch.bfloat16 | |
| ).to("cuda") # or "mps", "xpu", "cpu" | |
| # 1. Calibration Step | |
| # Run full inference to measure model behavior. | |
| calib_config = MagCacheConfig(calibrate=True, num_inference_steps=4) | |
| pipe.transformer.enable_cache(calib_config) | |
| # Run a prompt to trigger calibration | |
| pipe("A cat playing chess", num_inference_steps=4) | |
| # Logs will print something like: "MagCache Calibration Results: [1.0, 1.37, 0.97, 0.87]" | |
| # 2. Inference Step | |
| # Apply the specific ratios obtained from calibration for optimized speed. | |
| # Note: For Flux models, you can also import defaults: | |
| # from diffusers.hooks.mag_cache import FLUX_MAG_RATIOS | |
| mag_config = MagCacheConfig( | |
| mag_ratios=[1.0, 1.37, 0.97, 0.87], | |
| num_inference_steps=4 | |
| ) | |
| pipe.transformer.enable_cache(mag_config) | |
| image = pipe("A cat playing chess", num_inference_steps=4).images[0] | |
| ``` | |
| > [!NOTE] | |
| > تمثل `mag_ratios` منحنى التلاشي الجوهري للمقياس في النموذج. يمكن إعادة استخدام النسب المُعايرة لعدد كبير من الخطوات (مثل 50) لعدد خطوات أقل (مثل 20). يستخدم التنفيذ الاستيفاء (Interpolation) لربط المنحنى بعدد خطوات الاستدلال الحالية. | |
| > [!TIP] | |
| > في خطوط الأنابيب التي تعمل بتوجيه بلا مُصنِّف (Classifier-Free Guidance) بشكل تسلسلي (مثل Kandinsky 5.0)، قد يطبع سجل المعايرة مصفوفتين: واحدة للمرور الشرطي (Conditional) وأخرى للمرور غير الشرطي (Unconditional). في معظم الحالات، يجب عليك استخدام المصفوفة الأولى (الشرطية). | |
| > [!TIP] | |
| > بالنسبة إلى خطوط الأنابيب التي تعمل بتوجيه بلا مُصنِّف (Classifier-Free Guidance) بطريقة **مجمَّعة** (مثل SDXL أو Flux)، فإن `hidden_states` التي يعالجها النموذج تحتوي على كلا الفرعين الشرطي وغير الشرطي مدموجين معًا. يأخذ عملية المعايرة هذا الأمر في الحسبان تلقائيًا، فتنتج عن ذلك مصفوفة واحدة من النسب تمثل السلوك المشترك. يمكنك استخدام هذه المصفوفة الناتجة مباشرة دون أي تعديل. | |
Xet Storage Details
- Size:
- 15.7 kB
- Xet hash:
- 92cf32676162124f40b33c00580d8bc2d5679a477f8bfb4583db71544b52da8b
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.