Buckets:

mishig's picture
|
download
raw
4.22 kB

CacheDiT

CacheDiT, transformer blok çıktıları gürültü azaltma adımları arasında yeniden kullanılarak DiT hatlarını hızlandırır. Eğitim gerektirmez ve Flux, Qwen-Image, Wan ve HunyuanVideo dahil olmak üzere Diffusers'ın çoğu DiT hattını destekler. Diffusers ayrıca ek bir bağımlılık gerektirmeyen yerleşik önbellekleme özelliğine de sahiptir.

CacheDiT'yi PyPI'den yükleyin.

pip install -U cache-dit

CacheDiT'in desteklediği pipeline ailelerini listelemek için cache_dit.supported_pipelines() çağrısını yapın.

import cache_dit

cache_dit.supported_pipelines()

Önbellekleme etkinleştir

Bir pipeline üzerinde cache_dit.enable_cache çağrısı yaparak varsayılan ayarlarla önbelleğe alın, ardından pipeline'ı normal şekilde çalıştırın.

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 ile de çalışır. enable_cache çağrısından sonra transformer'ı derleyin. Dinamik giriş şekillerinde yeniden derlemeyi önleyen ayarlar için compile belgelerine bakın.

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

Çıkarım işleminden sonra cache_dit.summary çağrılarak kaç adımın önbelleğe alındığı ve adımlar arasındaki kalan farkların günlüğe kaydedilmesi sağlanır.

stats = cache_dit.summary(pipeline)

Orijinal hattı geri yüklemek için cache_dit.disable_cache çağrısını yapın.

cache_dit.disable_cache(pipeline)

Önbelleği yapılandır

DBCache (Dual Block Cache), her adımda ilk n bloğu (Fn) hesaplar. Çıktıları bir önceki adımdan neredeyse değişmediğinde, kalan bloklar için önbellekteki çıktıyı yeniden kullanır ve düzeltme yapmak için son n bloğu (Bn) yeniden hesaplayabilir. TaylorSeer kalibratörü, önbellekteki çıktıyı olduğu gibi yeniden kullanmak yerine önceki adımlardan tahmin eder.

enable_cache varsayılan olarak DBCache kullanır; ilk 8 blok her zaman hesaplanır (F8B0) ve 8 önbelleğe alınmamış ısınma adımı yapılır. Hızı kalite pahasına artırmak için Fn_compute_blocks değerini artırın veya residual_diff_threshold değerini düşürün (varsayılan 0.08). Yüksek önbellek oranlarında en iyi kalite için TaylorSeer kalibratörünü ekleyin.

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

Desteklenen pipeline'lar için CacheDiT, CFG'nin ayrı bir ileri geçiş olarak çalışıp çalışmadığını zaten bilir. Diğer modeller için, model koşullu ve koşulsuz geçişleri ayrı çalıştırıyorsa DBCacheConfig içinde enable_separate_cfg=True olarak ayarlayın; bunları birleştiriyorsa veya CFG kullanmıyorsa False olarak ayarlayın.

Fn ve Bn bloklarının nasıl çalıştığını görmek için DBCache tasarımı belgelerine, hız ve kalite değerleri için ise önbellek kıyaslamalarına bakın.

Sonraki adımlar

Xet Storage Details

Size:
4.22 kB
·
Xet hash:
eb58a81e3f93c27cdfca77e99f2c0381848df1b8f4b15ab1e19b256858473456

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.