Diffusers 文件

快取

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

快取

快取透過儲存和重用不同層的中間輸出(例如注意力層和前饋層)來加速推理,而不是在每個推理步驟中執行完整的計算。它以消耗更多記憶體為代價顯著提高了生成速度,並且不需要額外的訓練。

本指南向您展示如何使用 Diffusers 中支援的快取方法。

Pyramid Attention Broadcast

金字塔注意力廣播(Pyramid Attention Broadcast, PAB)基於這樣一個觀察:生成過程中連續時間步之間的注意力輸出差異不大。交叉注意力層中的注意力差異最小,通常在更長的時間步範圍內進行快取。其次是時間注意力和空間注意力層。

並非所有影片模型都具有三種類型的注意力(交叉、時間和空間)!

PAB 可以與其他技術(如序列並行和無分類器指導並行(資料並行))相結合,實現近乎即時的影片生成。

設定並傳遞一個 PyramidAttentionBroadcastConfig 到 pipeline 的 transformer 中以啟用它。spatial_attention_block_skip_range 控制在空間注意力塊中跳過注意力計算的頻率,而 spatial_attention_timestep_skip_range 是要跳過的時間步範圍。請注意選擇一個合適的範圍,因為較小的間隔可能導致較慢的推理速度,而較大的間隔可能導致較低的生成質量。

import torch
from diffusers import CogVideoXPipeline, PyramidAttentionBroadcastConfig

pipeline = CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-5b", torch_dtype=torch.bfloat16)
pipeline.to("cuda")

config = PyramidAttentionBroadcastConfig(
    spatial_attention_block_skip_range=2,
    spatial_attention_timestep_skip_range=(100, 800),
    current_timestep_callback=lambda: pipe.current_timestep,
)
pipeline.transformer.enable_cache(config)

FasterCache

FasterCache 快取和重用注意力特徵,類似於 PAB,因為每個連續時間步的輸出差異很小。

當使用無分類器指導進行取樣時(在大多數基礎模型中很常見),如果連續時間步之間預測的潛在輸出存在顯著冗餘,此方法也可能選擇跳過無條件分支預測,並從有條件分支預測中估計它。

設定並傳遞一個 FasterCacheConfig 到 pipeline 的 transformer 中以啟用它。

import torch
from diffusers import CogVideoXPipeline, FasterCacheConfig

pipe line= CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-5b", torch_dtype=torch.bfloat16)
pipeline.to("cuda")

config = FasterCacheConfig(
    spatial_attention_block_skip_range=2,
    spatial_attention_timestep_skip_range=(-1, 681),
    current_timestep_callback=lambda: pipe.current_timestep,
    attention_weight_callback=lambda _: 0.3,
    unconditional_batch_skip_range=5,
    unconditional_batch_timestep_skip_range=(-1, 781),
    tensor_format="BFCHW",
)
pipeline.transformer.enable_cache(config)
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.