# CacheDiT

[CacheDiT](https://github.com/vipshop/cache-dit) tăng tốc các pipeline DiT bằng cách tái sử dụng đầu ra của các khối transformer giữa các bước khử nhiễu. Nó không cần huấn luyện và hỗ trợ hầu hết các pipeline DiT của Diffusers, bao gồm Flux, Qwen-Image, Wan và HunyuanVideo. Diffusers cũng có [cache tích hợp sẵn](./cache) mà không yêu cầu phụ thuộc bổ sung.

Cài đặt CacheDiT từ PyPI.

```bash
pip install -U cache-dit
```

Gọi `cache_dit.supported_pipelines()` để liệt kê các nhóm pipeline mà CacheDiT hỗ trợ.

```py
import cache_dit

cache_dit.supported_pipelines()
```

## Bật bộ nhớ đệm

Gọi `cache_dit.enable_cache` trên một pipeline để lưu cache với các cài đặt mặc định, sau đó chạy pipeline như bình thường.

```py
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 cũng hoạt động với `torch.compile`. Hãy biên dịch transformer sau khi bạn gọi `enable_cache`. Xem tài liệu [compile](https://github.com/vipshop/cache-dit/blob/main/docs/user_guide/COMPILE.md) để biết các cài đặt giúp tránh việc biên dịch lại với các hình dạng đầu vào động.

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

Gọi `cache_dit.summary` sau suy luận để ghi log số bước đã được cache và sự khác biệt phần dư giữa các bước.

```py
stats = cache_dit.summary(pipeline)
```

Gọi `cache_dit.disable_cache` để khôi phục pipeline ban đầu.

```py
cache_dit.disable_cache(pipeline)
```

## Cấu hình bộ nhớ đệm

DBCache (Dual Block Cache) tính toán n khối đầu tiên (Fn) ở mỗi bước. Khi đầu ra của chúng hầu như không thay đổi so với bước trước, nó tái sử dụng đầu ra được lưu trong bộ nhớ đệm cho các khối còn lại, và có thể tính lại n khối cuối cùng (Bn) để hiệu chỉnh. Bộ hiệu chuẩn TaylorSeer dự đoán đầu ra được lưu trong bộ nhớ đệm từ các bước trước thay vì tái sử dụng nó nguyên vẹn.

`enable_cache` mặc định dùng DBCache với 8 khối đầu luôn được tính toán (F8B0) và 8 bước khởi động không có cache. Để đánh đổi tốc độ lấy chất lượng, hãy tăng `Fn_compute_blocks` hoặc giảm `residual_diff_threshold` (mặc định `0.08`). Để đạt chất lượng tốt nhất ở tỷ lệ cache cao, hãy thêm bộ hiệu chuẩn TaylorSeer.

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

Đối với các pipeline được hỗ trợ, CacheDiT đã biết liệu CFG có chạy như một bước forward riêng biệt hay không. Đối với các mô hình khác, hãy đặt `enable_separate_cfg=True` trong `DBCacheConfig` nếu mô hình chạy các bước có điều kiện và không có điều kiện riêng biệt, hoặc đặt `False` nếu mô hình gộp chúng lại hoặc không sử dụng CFG.

Xem tài liệu [thiết kế DBCache](https://github.com/vipshop/cache-dit/blob/main/docs/user_guide/DBCACHE_DESIGN.md) để biết cách các khối Fn và Bn hoạt động, và [các bài kiểm tra hiệu năng bộ nhớ đệm](https://github.com/vipshop/cache-dit/blob/main/bench/cache/README.md) để xem các con số về tốc độ và chất lượng.

## Các bước tiếp theo

- Đối với các pipeline mà CacheDiT chưa hỗ trợ, hãy xem tài liệu [BlockAdapter](https://github.com/vipshop/cache-dit/blob/main/docs/user_guide/CACHE_API.md#automatic-block-adapter).
- CacheDiT cũng hỗ trợ [song song ngữ cảnh](https://github.com/vipshop/cache-dit/blob/main/docs/user_guide/CONTEXT_PARALLEL.md) và [lượng tử hóa](https://github.com/vipshop/cache-dit/blob/main/docs/user_guide/QUANTIZATION.md).

