Diffusers 文件
快取
並獲得增強的文件體驗
開始使用
快取
快取透過儲存和重用不同層的中間輸出(例如注意力層和前饋層)來加速推理,而不是在每個推理步驟中執行完整的計算。它以消耗更多記憶體為代價顯著提高了生成速度,並且不需要額外的訓練。
本指南向您展示如何使用 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)