Buckets:
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)
تهيئة ذاكرة التخزين المؤقت
DBCache تقوم (Dual Block Cache) بحساب أول n كتل (Fn) في كل خطوة. عندما لا يتغير ناتجها بشكل كبير عن الخطوة السابقة، تعيد استخدام الناتج المخزّن مؤقتًا للكتل المتبقية، ويمكنها إعادة حساب آخر 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، ووثائق اختبارات أداء ذاكرة التخزين المؤقت للحصول على أرقام تتعلق بالسرعة والجودة.
الخطوات التالية
- بالنسبة إلى خطوط الأنابيب التي لا يدعمها CacheDiT بعد، راجع وثائق BlockAdapter.
- يدعم CacheDiT أيضًا التوازي السياقي والتكميم.
Xet Storage Details
- Size:
- 4.87 kB
- Xet hash:
- ac56f814cf27ea870282719f49ef81e1096aeaaec33678177fba720d4a0abe31
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.