Diffusers documentation

CacheDiT

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

CacheDiT

يسرّع CacheDiT خطوط أنابيب DiT من خلال إعادة استخدام مخرجات كتل التحوّل عبر خطوات إزالة الضوضاء. ولا يتطلب تدريبًا، ويدعم معظم خطوط أنابيب DiT في Diffusers، بما في ذلك Flux وQwen-Image وWan وHunyuanVideo. كما أن Diffusers يحتوي على تخزين مؤقت مدمج لا يتطلب اعتمادًا إضافيًا.

قم بتثبيت CacheDiT من PyPI.

pip install -U cache-dit

استدعِ cache_dit.supported_pipelines() لعرض عائلات خطوط الأنابيب التي يدعمها CacheDiT.

import cache_dit

cache_dit.supported_pipelines()

تفعيل التخزين المؤقت

استدعِ cache_dit.enable_cache على خط أنابيب لتخزينه مؤقتًا بالإعدادات الافتراضية، ثم شغّلي خط الأنابيب كما هو معتاد.

import torch
import cache_dit
from diffusers import FluxPipeline

pipeline = FluxPipeline.from_pretrained(
    "black-forest-labs/FLUX.1-dev", dtype=torch.bfloat16
).to("cuda")
cache_dit.enable_cache(pipeline)

image = pipeline(
    "A cat holding a sign that says hello world", num_inference_steps=28
).images[0]

يعمل CacheDiT أيضًا مع torch.compile. قم بتجميع المحوّل (transformer) بعد استدعاء enable_cache. راجع وثائق compile للإعدادات التي تتجنب إعادة التجميع مع أشكال المدخلات الديناميكية.

pipeline.transformer = torch.compile(pipeline.transformer)

استدعِ cache_dit.summary بعد الاستدلال لتسجيل عدد الخطوات المخزّنة مؤقتًا والفرق المتبقي بين الخطوات.

stats = cache_dit.summary(pipeline)

استدعِ cache_dit.disable_cache لاستعادة خط الأنابيب الأصلي.

cache_dit.disable_cache(pipeline)

تهيئة ذاكرة التخزين المؤقت

تُحسب أول n كتل (Fn) في كل خطوة بواسطة DBCache (Dual Block Cache). عندما لا يتغير ناتجها بشكل كبير عن الخطوة السابقة، يعيد استخدام الناتج المخزّن مؤقتًا للكتل المتبقية، ويمكنه إعادة حساب آخر n كتل (Bn) لتصحيحه. يتنبأ مُعاير TaylorSeer بالناتج المخزّن مؤقتًا من الخطوات السابقة بدلاً من إعادة استخدامه كما هو.

enable_cache افتراضيًا هو DBCache مع حساب أول 8 كتل دائمًا (F8B0) وخطوات إحماء غير مخزنة عدد 8. لمقايضة السرعة بالجودة، ارفع Fn_compute_blocks أو اخفض residual_diff_threshold (الافتراضي 0.08). للحصول على أفضل جودة عند معدلات التخزين المؤقت العالية، أضف مُعاير TaylorSeer.

from cache_dit import DBCacheConfig, TaylorSeerCalibratorConfig

cache_dit.enable_cache(
    pipeline,
    cache_config=DBCacheConfig(
        max_warmup_steps=8,
        Fn_compute_blocks=8,
        Bn_compute_blocks=0,
        residual_diff_threshold=0.12,
    ),
    calibrator_config=TaylorSeerCalibratorConfig(taylorseer_order=1),
)

بالنسبة إلى خطوط الأنابيب المدعومة، يعرف CacheDiit مسبقًا ما إذا كان CFG يعمل كتمريرة أمامية منفصلة. أما بالنسبة للنماذج الأخرى، فعيّن enable_separate_cfg=True في DBCacheConfig إذا كان النموذج ينفذ التمرير المشروط وغير المشروط بشكل منفصل، أو عيّن False إذا كان يدمجهما أو لا يستخدم CFG.

راجع وثائق تصميم DBCache لمعرفة كيفية عمل كتل Fn وBn، ووثائق اختبارات أداء ذاكرة التخزين المؤقت للحصول على أرقام تتعلق بالسرعة والجودة.

الخطوات التالية

Update on GitHub