Diffusers documentation

CacheDiT

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

CacheDiT

CacheDiT acelera os pipelines DiT reutilizando as saídas dos blocos de transformer entre as etapas de desruido. Ele não requer treinamento e suporta a maioria dos pipelines DiT do Diffusers, incluindo Flux, Qwen-Image, Wan e HunyuanVideo. O Diffusers também possui cache integrado, que não exige uma dependência extra.

Instale o CacheDiT do PyPI.

pip install -U cache-dit

Chame cache_dit.supported_pipelines() para listar as famílias de pipelines que o CacheDiT suporta.

import cache_dit

cache_dit.supported_pipelines()

Ativar o cache

Chame cache_dit.enable_cache em um pipeline para ativá-lo com as configurações padrão e, em seguida, execute o pipeline normalmente.

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]

O CacheDiT também funciona com torch.compile. Compile o transformer depois de chamar enable_cache. Consulte a documentação de compile para configurações que evitam recompilação com formas de entrada dinâmicas.

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

Chame cache_dit.summary após a inferência para registrar quantas etapas foram armazenadas em cache e as diferenças residuais entre as etapas.

stats = cache_dit.summary(pipeline)

Chame cache_dit.disable_cache para restaurar o pipeline original.

cache_dit.disable_cache(pipeline)

Configure o cache

O DBCache (Dual Block Cache) calcula os primeiros n blocos (Fn) a cada etapa. Quando a sua saída muda pouco em relação à etapa anterior, ele reutiliza a saída em cache para os blocos restantes e pode recalcular os últimos n blocos (Bn) para corrigi-la. O calibrador TaylorSeer prevê a saída em cache a partir de etapas anteriores, em vez de reutilizá-la como está.

enable_cache usa DBCache por padrão, com os primeiros 8 blocos sempre calculados (F8B0) e 8 passos de aquecimento sem cache. Para trocar velocidade por qualidade, aumente Fn_compute_blocks ou diminua residual_diff_threshold (padrão 0.08). Para a melhor qualidade em altas taxas de cache, adicione o calibrador 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),
)

Para os pipelines suportados, o CacheDiT já sabe se o CFG é executado como uma passagem de forward separada. Para outros modelos, defina enable_separate_cfg=True em DBCacheConfig se o modelo executar as passagens condicional e incondicional separadamente, ou False se ele as fundir ou não usar CFG.

Consulte a documentação do design do DBCache para entender como os blocos Fn e Bn funcionam, e os benchmarks de cache para números de velocidade e qualidade.

Próximas etapas

Update on GitHub