Diffusers documentation

طرق التخزين المؤقت

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

طرق التخزين المؤقت

تُسرع طرق التخزين المؤقت (Cache) محولات الانتشار (diffusion transformers) من خلال تخزين المخرجات الوسيطة للطبقات المحددة، مثل طبقات الانتباه (attention) وطبقات التغذية الأمامية (feedforward)، وإعادة استخدامها بدلاً من إعادة حسابها في كل خطوة من خطوات الاستدلال.

CacheMixin

فئة diffusers.CacheMixin

< >

( )

فئة لتفعيل/تعطيل تقنيات التخزين المؤقت على نماذج الانتشار.

تقنيات التخزين المؤقت المدعومة:

cache_context

< >

( name: str**kwargs )

مدير سياق يوفر معلومات لإدارة ذاكرة التخزين المؤقت.

name هو اسم استدعاء إزالة الضوضاء، وعادةً ما يكون "cond" أو "uncond". تصف الحُجج ذات الكلمات المفتاحية موقع حلقة إزالة الضوضاء — راجع CacheContext لمعرفة الحقول المقبولة، مثل cache_context("cond", step_index=i, sigma=sigma).

enable_cache

< >

( config )

المعاملات

تفعيل تقنيات التخزين المؤقت على النموذج.

مثال:

>>> 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

< >

( spatial_attention_block_skip_range: int | None = Nonetemporal_attention_block_skip_range: int | None = Nonecross_attention_block_skip_range: int | None = Nonespatial_attention_timestep_skip_range: tuple = (100, 800)temporal_attention_timestep_skip_range: tuple = (100, 800)cross_attention_timestep_skip_range: tuple = (100, 800)spatial_attention_block_identifiers: tuple = ('blocks', 'transformer_blocks', 'single_transformer_blocks', 'layers', 'visual_transformer_blocks')temporal_attention_block_identifiers: tuple = ('temporal_transformer_blocks',)cross_attention_block_identifiers: tuple = ('blocks', 'transformer_blocks', 'layers')current_timestep_callback: typing.Callable[[], int] = None )

المعاملات

  • 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

< >

( module: Moduleconfig: PyramidAttentionBroadcastConfig )

المعاملات

  • 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 على خط أنابيب معيّن.

PAB هو طريقة تقريب للانتباه تستفيد من التشابه في حالات الانتباه بين خطوات الزمن لتقليل التكلفة الحسابية لحساب الانتباه. الفكرة الرئيسية المستفادة من الورقة البحثية هي أن تشابه الانتباه في طبقات الانتباه المتقاطع بين خطوات الزمن يكون مرتفعاً، يليه تشابه أقل في الطبقات الزمنية والمكانية. وهذا يتيح تجاوز حساب الانتباه في طبقات الانتباه المتقاطع بشكل أكثر تكراراً مقارنة بالطبقات الزمنية والمكانية. وبالتالي، فإن تطبيق PAB سيُسرع عملية الاستدلال.

مثال:

>>> 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

< >

( spatial_attention_block_skip_range: int = 2temporal_attention_block_skip_range: int | None = Nonespatial_attention_timestep_skip_range: tuple = (-1, 681)temporal_attention_timestep_skip_range: tuple = (-1, 681)low_frequency_weight_update_timestep_range: tuple = (99, 901)high_frequency_weight_update_timestep_range: tuple = (-1, 301)alpha_low_frequency: float = 1.1alpha_high_frequency: float = 1.1unconditional_batch_skip_range: int = 5unconditional_batch_timestep_skip_range: tuple = (-1, 641)spatial_attention_block_identifiers: tuple = ('^blocks.*attn', '^transformer_blocks.*attn', '^single_transformer_blocks.*attn')temporal_attention_block_identifiers: tuple = ('^temporal_transformer_blocks.*attn',)attention_weight_callback: typing.Callable[[torch.nn.Module], float] = Nonelow_frequency_weight_callback: typing.Callable[[torch.nn.Module], float] = Nonehigh_frequency_weight_callback: typing.Callable[[torch.nn.Module], float] = Nonetensor_format: str = 'BCFHW'is_guidance_distilled: bool = Falsecurrent_timestep_callback: typing.Callable[[], int] = None_unconditional_conditional_input_kwargs_identifiers: list = ('hidden_states', 'encoder_hidden_states', 'timestep', 'attention_mask', 'encoder_attention_mask') )

المعاملات

  • 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)) — نطاق خطوات الزمن الذي يمكن فيه تجاوز حساب الانتباه المكاني دون فقدان كبير في الجودة. يتعيّن على المستخدم تحديد هذا النطاق بناءً على النموذج الأساسي. القيمة الأولى في المجموعة هي الحد الأدنى والقيمة الثانية هي الحد الأعلى. عادةً، تكون خطوات الزمن للنشر (diffusion) لإزالة الضوضاء في نطاق معكوس من 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") — المعرّفات المطابقة لمعاملات الإدخال (input kwargs) التي تحتوي على المدخلات غير الشرطية والشرطية المدمجة على مستوى الدفعة (batch). إذا احتوى اسم معامل الإدخال على أي من هذه المعرّفات، سيقوم FasterCache بتقسيم المدخلات إلى فرعين: غير شرطي وشرطي. يجب أن يكون هذا قائمة بأسماء معاملات الإدخال الدقيقة التي تحتوي على المدخلات غير الشرطية والشرطية المدمجة على مستوى الدفعة.

إعدادات FasterCache.

diffusers.apply_faster_cache

< >

( module: Moduleconfig: FasterCacheConfig )

المعاملات

  • module (torch.nn.Module) — وحدة pytorch التي تُطبَّق عليها FasterCache. عادةً، يجب أن تكون هذه الوحدة معمارية transformer مدعومة في Diffusers، مثل CogVideoXTransformer3DModel، لكن من الممكن أيضًا أن تعمل مع تنفيذه خارجية.
  • config (FasterCacheConfig) — إعدادات الاستخدام لـ FasterCache.

يطبّق FasterCache على خط أنابيب معيّن.

مثال:

>>> 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

< >

( threshold: float = 0.05 )

المعاملات

  • threshold (float، القيمة الافتراضية 0.05) — العتبة التي تُحدَّد بها الحاجة إلى إجراء تمرير أمامي عبر جميع طبقات النموذج أم لا. عادةً ما يؤدي ارتفاع العتبة إلى تمرير أمامي عبر عدد أقل من الطبقات واستدلال أسرع، لكنه قد يؤدي إلى جودة توليد أدنى. وقد لا يؤدي انخفاض العتبة إلى تسريع ملحوظ في التوليد. تُقارَن العتبة مع فرق absmean بين بقايا المخرجات الحالية والمخرجات المخزنة مؤقتًا من كتلة التحويل الأولى. إذا كان الفرق أقل من العتبة، يتم تخطي التمرير الأمامي.

إعدادات First Block Cache.

diffusers.apply_first_block_cache

< >

( module: Moduleconfig: FirstBlockCacheConfig )

المعاملات

  • module (torch.nn.Module) — وحدة pytorch التي سيتم تطبيق FBCache عليها. عادةً، يجب أن تكون هذه الوحدة معمارية transformer مدعومة في Diffusers، مثل CogVideoXTransformer3DModel، لكن من الممكن أيضًا أن تعمل التطبيقات الخارجية.
  • config (FirstBlockCacheConfig) — إعدادات استخدام طريقة FBCache.

يطبّق First Block Cache على وحدة محددة.

يعتمد First Block Cache على أفكار TeaCache. وهو أبسط بكثير في التنفيذ بشكل عام لمجموعة واسعة من النماذج، وقد تم دمجه أولاً لأغراض تجريبية.

مثال:

>>> 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

< >

( cache_interval: int = 5disable_cache_before_step: int = 3disable_cache_after_step: int | None = Nonemax_order: int = 1taylor_factors_dtype: typing.Optional[torch.dtype] = torch.bfloat16skip_predict_identifiers: list[str] | None = Nonecache_identifiers: list[str] | None = Noneuse_lite_mode: bool = False )

المعاملات

  • 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، فإن الوحدات المطابقة فقط هي التي تُستهدف بالتدخل.
  • إذا لم يُوفَّر أيٌّ منهما، تُربط جميع الوحدات المشابهة للانتباه افتراضيًا.

مثال على الاستخدام غير النشط والنشط:

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

( *args**kwargs )

قيمة وهمية لمسار منقّط (مثل torch.float32): سلاسل الوصول إلى السمات، والاستدعاءات تتصرف كمُزيّنات (decorators) مرّرة، وrepr هو المسار المنقّط، وعند استخدامه كصنف أساسي يُستبدل بصنف أساسي من نوع type عادي (بموجب __mro_entries__ في PEP 560)، بحيث تحتفظ الصنوف الفرعية الحقيقية بفئة ميتا (metaclass) عادية، وتقرأ inspect.signature دالة __init__ الحقيقية الخاصة بها بدلاً من تلك الوهمية.

diffusers.apply_taylorseer_cache

< >

( module: Moduleconfig: TaylorSeerCacheConfig )

المعاملات

  • module (torch.nn.Module) — شجرة النموذج الفرعية التي سيتم تطبيق الخطافات عليها.
  • config (TaylorSeerCacheConfig) — إعدادات ذاكرة التخزين المؤقت.

يطبّق ذاكرة TaylorSeer على خط أنابيب معيّن (عادةً المحوّل / UNet).

تُربط هذه الدوال الوحدات المحددة في النموذج لتفعيل التخزين المؤقت أو التخطي بناءً على الإعدادات المقدمة، مما يقلل من الحسابات المكررة في حلقات إزالة الضوضاء في الانتشار.

مثال:

>>> 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

< >

( threshold: float = 0.06max_skip_steps: int = 3retention_ratio: float = 0.2num_inference_steps: int = 28mag_ratios: typing.Union[torch.Tensor, typing.List[float], NoneType] = Nonecalibrate: bool = False )

المعاملات

  • 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.

diffusers.apply_mag_cache

< >

( module: Moduleconfig: MagCacheConfig )

المعاملات

  • module (torch.nn.Module) — الوحدة التي سيتم تطبيق MagCache عليها.
  • config (MagCacheConfig) — إعدادات MagCache.

يطبّق MagCache على وحدة محددة (عادةً ما تكون Transformer).

SeaCacheConfig

فئة diffusers.SeaCacheConfig

< >

( threshold: float = 0.25residual_order: int = 1retention_steps: int = 1cache_end_steps: int = 1max_consecutive_cached: int = 2power_exp: float = 3.0raw_vision_callback: typing.Callable[[torch.nn.Module, tuple[typing.Any, ...], dict[str, typing.Any]], list[torch.Tensor] | None] = None )

المعاملات

  • 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.

SeaCache معطّل افتراضيًا ولا يتم تفعيله إلا بعد تمرير هذا الإعداد إلى transformer.enable_cache(config).

يقارن SeaCache مؤشرات SEA (الواعية بالتطور الطيفي) بين خطوات المجدول. إذا بقي التغيير النسبي المتراكم دون threshold، يتم استبدال مكدس كتل التحوّل المتكرر ببواقي مخزنة مؤقتًا. قد توسّع محددات النموذج الخاصة حدود البواقي لتتجاوز تلك الكتل. يمكن لتحوّلات الفيديو الأخرى استخدام المسار العام عن طريق تسجيل بيانات كتلها الوصفية وتوفير raw_vision_callback؛ ويجب أن تدخل خط أنابيبها في cache_context لكل مسار تحويل.

مثال:

>>> from diffusers import Cosmos3OmniPipeline, SeaCacheConfig

>>> pipe = Cosmos3OmniPipeline.from_pretrained("nvidia/Cosmos3-Nano")
>>> pipe.transformer.enable_cache(SeaCacheConfig())

diffusers.apply_sea_cache

< >

( module: Moduleconfig: SeaCacheConfig )

المعاملات

  • module (torch.nn.Module) — وحدة Transformer للتخزين المؤقت.
  • config (SeaCacheConfig) — إعدادات SeaCache.

تطبيق SeaCache على محوّل مدعوم.

يعيد SeaCache استخدام متبقٍ مخزّن مؤقتًا لركيزة الكتل المتكررة في محوّل. قد تُخصّص مُكيّفات النموذج استخراج المؤشرات وحدّ المتبقّي؛ بينما يستخدم المسار العام بيانات الوصف المسجّلة للكتل وraw_vision_callback. يجب التحقق من معايير التوافق ومعاملات التخزين المؤقت لكل نموذج.

Update on GitHub