Diffusers documentation
Các phương pháp lưu trữ tạm
Các phương pháp lưu trữ tạm
Các phương pháp cache tăng tốc độ của diffusion transformers bằng cách lưu trữ và tái sử dụng các đầu ra trung gian của các lớp cụ thể, chẳng hạn như lớp attention và lớp feedforward, thay vì tính toán lại chúng ở mỗi bước suy luận.
CacheMixin
Một lớp để bật/tắt các kỹ thuật lưu trữ bộ nhớ đệm trên các mô hình khuếch tán.
Các kỹ thuật lưu trữ bộ nhớ đệm được hỗ trợ:
Trình quản lý ngữ cảnh cung cấp thông tin cho việc quản lý bộ nhớ đệm.
name là tên của lệnh gọi khử nhiễu, thường là "cond" hoặc "uncond". Các đối số từ khóa mô tả vị trí hiện tại của vòng lặp khử nhiễu — xem CacheContext để biết các trường được chấp nhận, ví dụ cache_context("cond", step_index=i, sigma=sigma).
enable_cache
< source >( config )
Tham số
- config (
PyramidAttentionBroadcastConfig | FasterCacheConfig | FirstBlockCacheConfig | SeaCacheConfig | TextKVCacheConfig) — Cấu hình cho việc áp dụng kỹ thuật cache. Các kỹ thuật cache được hỗ trợ hiện tại là:- PyramidAttentionBroadcastConfig
- FasterCacheConfig
- FirstBlockCacheConfig
- SeaCacheConfig
TextKVCacheConfig
Bật các kỹ thuật cache trên mô hình.
Ví dụ:
>>> import torch
>>> from diffusers import CogVideoXPipeline, PyramidAttentionBroadcastConfig
>>> pipe = CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-5b", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> config = PyramidAttentionBroadcastConfig(
... spatial_attention_block_skip_range=2,
... spatial_attention_timestep_skip_range=(100, 800),
... current_timestep_callback=lambda: pipe.current_timestep,
... )
>>> pipe.transformer.enable_cache(config)PyramidAttentionBroadcastConfig
lớp diffusers.PyramidAttentionBroadcastConfig
< source >( spatial_attention_block_skip_range: int | None = Nonetemporal_attention_block_skip_range: int | None = Nonecross_attention_block_skip_range: int | None = Nonespatial_attention_timestep_skip_range: tuple = (100, 800)temporal_attention_timestep_skip_range: tuple = (100, 800)cross_attention_timestep_skip_range: tuple = (100, 800)spatial_attention_block_identifiers: tuple = ('blocks', 'transformer_blocks', 'single_transformer_blocks', 'layers', 'visual_transformer_blocks')temporal_attention_block_identifiers: tuple = ('temporal_transformer_blocks',)cross_attention_block_identifiers: tuple = ('blocks', 'transformer_blocks', 'layers')current_timestep_callback: typing.Callable[[], int] = None )
Tham số
- spatial_attention_block_skip_range (
int, tuỳ chọn, mặc định làNone) — Số lần một broadcast spatial attention cụ thể bị bỏ qua trước khi tính toán các trạng thái attention để tái sử dụng. Nếu giá trị này được đặt thànhN, phép tính attention sẽ bị bỏ quaN - 1lần (tức là các trạng thái attention cũ sẽ được tái sử dụng) trước khi tính toán lại các trạng thái attention mới. - temporal_attention_block_skip_range (
int, tuỳ chọn, mặc định làNone) — Số lần một broadcast temporal attention cụ thể bị bỏ qua trước khi tính toán các trạng thái attention để tái sử dụng. Nếu giá trị này được đặt thànhN, phép tính attention sẽ bị bỏ quaN - 1lần (tức là các trạng thái attention cũ sẽ được tái sử dụng) trước khi tính toán lại các trạng thái attention mới. - cross_attention_block_skip_range (
int, tuỳ chọn, mặc định làNone) — Số lần một broadcast cross-attention cụ thể bị bỏ qua trước khi tính toán các trạng thái attention để tái sử dụng. Nếu giá trị này được đặt thànhN, phép tính attention sẽ bị bỏ quaN - 1lần (tức là các trạng thái attention cũ sẽ được tái sử dụng) trước khi tính toán lại các trạng thái attention mới. - spatial_attention_timestep_skip_range (
tuple[int, int], mặc định là(100, 800)) — Khoảng các bước thời gian (timesteps) cần bỏ qua trong lớp chú ý không gian (spatial attention). Các phép tính chú ý sẽ được bỏ qua có điều kiện nếu bước thời gian hiện tại nằm trong khoảng được chỉ định. - temporal_attention_timestep_skip_range (
tuple[int, int], mặc định là(100, 800)) — Khoảng các bước thời gian (timesteps) cần bỏ qua trong lớp chú ý thời gian (temporal attention). Các phép tính chú ý sẽ được bỏ qua có điều kiện nếu bước thời gian hiện tại nằm trong khoảng được chỉ định. - cross_attention_timestep_skip_range (
tuple[int, int], mặc định là(100, 800)) — Khoảng các timestep cần bỏ qua trong lớp cross-attention. Các phép tính attention sẽ được bỏ qua có điều kiện nếu timestep hiện tại nằm trong khoảng được chỉ định. - spatial_attention_block_identifiers (
tuple[str, ...]) — Các định danh để khớp với tên lớp nhằm xác định xem lớp đó có phải là lớp chú ý không gian (spatial attention) hay không. - temporal_attention_block_identifiers (
tuple[str, ...]) — Các định danh để khớp với tên lớp nhằm xác định xem lớp đó có phải là lớp temporal attention hay không. - cross_attention_block_identifiers (
tuple[str, ...]) — Các định danh để khớp với tên lớp nhằm xác định xem lớp đó có phải là lớp cross-attention hay không.
Cấu hình cho Pyramid Attention Broadcast.
diffusers.apply_pyramid_attention_broadcast
< source >( module: Moduleconfig: PyramidAttentionBroadcastConfig )
Áp dụng Pyramid Attention Broadcast cho một pipeline nhất định.
PAB là một phương pháp xấp xỉ attention, tận dụng sự tương đồng trong các trạng thái attention giữa các bước thời gian (timesteps) để giảm chi phí tính toán của phép tính attention. Điểm chính từ bài báo là sự tương đồng của attention trong các lớp cross-attention giữa các bước thời gian rất cao, tiếp theo là mức độ tương đồng thấp hơn trong các lớp temporal và spatial. Điều này cho phép bỏ qua việc tính toán attention trong các lớp cross-attention thường xuyên hơn so với các lớp temporal và spatial. Do đó, việc áp dụng PAB sẽ giúp tăng tốc quá trình suy luận (inference).
Ví dụ:
>>> import torch
>>> from diffusers import CogVideoXPipeline, PyramidAttentionBroadcastConfig, apply_pyramid_attention_broadcast
>>> from diffusers.utils import export_to_video
>>> pipe = CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-5b", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> config = PyramidAttentionBroadcastConfig(
... spatial_attention_block_skip_range=2,
... spatial_attention_timestep_skip_range=(100, 800),
... current_timestep_callback=lambda: pipe.current_timestep,
... )
>>> apply_pyramid_attention_broadcast(pipe.transformer, config)FasterCacheConfig
lớp diffusers.FasterCacheConfig
< source >( spatial_attention_block_skip_range: int = 2temporal_attention_block_skip_range: int | None = Nonespatial_attention_timestep_skip_range: tuple = (-1, 681)temporal_attention_timestep_skip_range: tuple = (-1, 681)low_frequency_weight_update_timestep_range: tuple = (99, 901)high_frequency_weight_update_timestep_range: tuple = (-1, 301)alpha_low_frequency: float = 1.1alpha_high_frequency: float = 1.1unconditional_batch_skip_range: int = 5unconditional_batch_timestep_skip_range: tuple = (-1, 641)spatial_attention_block_identifiers: tuple = ('^blocks.*attn', '^transformer_blocks.*attn', '^single_transformer_blocks.*attn')temporal_attention_block_identifiers: tuple = ('^temporal_transformer_blocks.*attn',)attention_weight_callback: typing.Callable[[torch.nn.Module], float] = Nonelow_frequency_weight_callback: typing.Callable[[torch.nn.Module], float] = Nonehigh_frequency_weight_callback: typing.Callable[[torch.nn.Module], float] = Nonetensor_format: str = 'BCFHW'is_guidance_distilled: bool = Falsecurrent_timestep_callback: typing.Callable[[], int] = None_unconditional_conditional_input_kwargs_identifiers: list = ('hidden_states', 'encoder_hidden_states', 'timestep', 'attention_mask', 'encoder_attention_mask') )
Tham số
- spatial_attention_block_skip_range (
int, mặc định là2) — Tính toán trạng thái attention mỗiNlần lặp. Nếu giá trị này được đặt thànhN, việc tính toán attention sẽ bị bỏ quaN - 1lần (tức là các trạng thái attention đã được cache sẽ được tái sử dụng) trước khi tính toán lại các trạng thái attention mới. - temporal_attention_block_skip_range (
int, tuỳ chọn, mặc định làNone) — Tính toán trạng thái chú ý mỗiNlần lặp. Nếu giá trị này được đặt thànhN, việc tính toán chú ý sẽ bị bỏ quaN - 1lần (tức là các trạng thái chú ý đã được lưu cache sẽ được tái sử dụng) trước khi tính toán lại các trạng thái chú ý mới. - spatial_attention_timestep_skip_range (
tuple[float, float], mặc định là(-1, 681)) — Khoảng timestep mà trong đó phép tính spatial attention có thể được bỏ qua mà không gây mất chất lượng đáng kể. Giá trị này do người dùng xác định dựa trên mô hình cơ sở. Giá trị đầu tiên trong tuple là cận dưới và giá trị thứ hai là cận trên. Thông thường, các diffusion timestep cho quá trình khử nhiễu nằm trong khoảng đảo ngược từ 0 đến 1000 (tức là khử nhiễu bắt đầu ở timestep 1000 và kết thúc ở timestep 0). Với các giá trị mặc định, điều này có nghĩa là việc bỏ qua phép tính spatial attention chỉ được áp dụng sau khi đạt đến denoising timestep 681, và tiếp tục cho đến khi kết thúc quá trình khử nhiễu. - temporal_attention_timestep_skip_range (
tuple[float, float], tuỳ chọn, mặc định làNone) — Khoảng bước thời gian (timestep) mà trong đó phép tính chú ý theo thời gian (temporal attention) có thể được bỏ qua mà không gây suy giảm chất lượng đáng kể. Người dùng cần xác định khoảng này dựa trên mô hình cơ sở. Giá trị đầu tiên trong tuple là cận dưới và giá trị thứ hai là cận trên. Thông thường, các bước thời gian khuếch tán (diffusion timestep) để khử nhiễu nằm trong khoảng đảo ngược từ 0 đến 1000 (tức là quá trình khử nhiễu bắt đầu ở bước thời gian 1000 và kết thúc ở bước thời gian 0). - low_frequency_weight_update_timestep_range (
tuple[int, int], mặc định là(99, 901)) — Khoảng timestep mà việc cập nhật tỷ lệ trọng số tần số thấp được áp dụng. Giá trị đầu tiên trong tuple là cận dưới và giá trị thứ hai là cận trên của khoảng timestep. Hàm callback cho việc cập nhật chỉ được gọi trong khoảng này. - high_frequency_weight_update_timestep_range (
tuple[int, int], mặc định là(-1, 301)) — Khoảng timestep mà việc cập nhật tỷ lệ trọng số tần số cao được áp dụng. Giá trị đầu tiên trong tuple là cận dưới và giá trị thứ hai là cận trên của khoảng timestep. Hàm callback cho việc cập nhật chỉ được gọi trong khoảng này. - alpha_low_frequency (
float, mặc định là1.1) — Trọng số để nhân với các cập nhật tần số thấp. Tham số này được dùng để xấp xỉ nhánh không điều kiện từ các đầu ra của nhánh có điều kiện. - alpha_high_frequency (
float, mặc định là1.1) — Trọng số để nhân với các cập nhật tần số cao. Tham số này được dùng để xấp xỉ nhánh không điều kiện từ các đầu ra của nhánh có điều kiện. - unconditional_batch_skip_range (
int, mặc định là5) — Xử lý nhánh không điều kiện mỗiNlần lặp. Nếu giá trị này được đặt thànhN, việc tính toán nhánh không điều kiện sẽ bị bỏ quaN - 1lần (tức là các trạng thái nhánh không điều kiện được lưu cache sẽ được tái sử dụng) trước khi tính toán lại các trạng thái nhánh không điều kiện mới. - unconditional_batch_timestep_skip_range (
tuple[float, float], mặc định là(-1, 641)) — Khoảng timestep mà trong đó phép tính cho nhánh unconditional có thể được bỏ qua mà không gây suy giảm chất lượng đáng kể. Người dùng cần xác định khoảng này dựa trên mô hình cơ sở. Giá trị đầu tiên trong tuple là cận dưới và giá trị thứ hai là cận trên. - spatial_attention_block_identifiers (
tuple[str, ...], mặc định là("blocks.*attn1", "transformer_blocks.*attn1", "single_transformer_blocks.*attn1")) — Các định danh để khớp với các khối chú ý không gian trong mô hình. Nếu tên của khối chứa bất kỳ định danh nào trong số này, FasterCache sẽ được áp dụng cho khối đó. Đây có thể là tên lớp đầy đủ, tên lớp một phần, hoặc các mẫu regex. Việc khớp sẽ luôn được thực hiện bằng cách khớp regex. - temporal_attention_block_identifiers (
tuple[str, ...], mặc định là("temporal_transformer_blocks.*attn1",)) — Các định danh để khớp với các khối temporal attention trong mô hình. Nếu tên của khối chứa bất kỳ định danh nào trong số này, FasterCache sẽ được áp dụng cho khối đó. Đây có thể là tên lớp đầy đủ, tên lớp một phần, hoặc các mẫu regex. Việc khớp sẽ luôn được thực hiện bằng cách khớp regex. - attention_weight_callback (
Callable[[torch.nn.Module], float], mặc định làNone) — Hàm callback để xác định trọng số dùng để nhân với các đầu ra của attention. Hàm này phải nhận module attention làm đầu vào và trả về một giá trị float. Nó được dùng để xấp xỉ nhánh không điều kiện từ các đầu ra của nhánh có điều kiện. Nếu không được cung cấp, trọng số mặc định là 0.5 cho tất cả các bước thời gian. Thông thường, như đã mô tả trong bài báo, trọng số này nên tăng dần từ 0 đến 1 khi quá trình suy luận diễn ra. Người dùng được khuyến khích thử nghiệm và cung cấp các lịch trọng số tùy chỉnh, có tính đến số bước suy luận và hành vi của mô hình cơ bản khi quá trình khử nhiễu diễn ra. - low_frequency_weight_callback (
Callable[[torch.nn.Module], float], mặc định làNone) — Hàm callback để xác định trọng số dùng để nhân với các cập nhật tần số thấp. Nếu không được cung cấp, trọng số mặc định là 1.1 cho các bước thời gian nằm trong khoảng được chỉ định (như đã mô tả trong bài báo). - high_frequency_weight_callback (
Callable[[torch.nn.Module], float], mặc định làNone) — Hàm callback để xác định trọng số dùng để nhân với các cập nhật tần số cao. Nếu không được cung cấp, trọng số mặc định là 1.1 cho các bước thời gian nằm trong khoảng được chỉ định (như đã mô tả trong bài báo). - tensor_format (
str, mặc định là"BCFHW") — Định dạng của các tensor đầu vào. Giá trị này phải là một trong"BCFHW","BFCHW"hoặc"BCHW". Định dạng này được sử dụng để tách các khung latent riêng lẻ nhằm tính toán các thành phần tần số thấp và tần số cao. - is_guidance_distilled (
bool, mặc định làFalse) — Xác định xem mô hình có được guidance distilled hay không. Nếu mô hình được guidance distilled, FasterCache sẽ không được áp dụng ở cấp độ denoiser để bỏ qua việc tính toán nhánh unconditional (vì không có nhánh này). - _unconditional_conditional_input_kwargs_identifiers (
list[str], mặc định là("hidden_states", "encoder_hidden_states", "timestep", "attention_mask", "encoder_attention_mask")) — Các định danh để khớp với các input kwargs chứa các đầu vào unconditional và conditional đã được ghép nối theo batch. Nếu tên của input kwargs chứa bất kỳ định danh nào trong số này, FasterCache sẽ tách các đầu vào thành các nhánh unconditional và conditional. Đây phải là một danh sách các tên input kwargs chính xác chứa các đầu vào unconditional và conditional đã được ghép nối theo batch.
Cấu hình cho FasterCache.
diffusers.apply_faster_cache
< source >( module: Moduleconfig: FasterCacheConfig )
Tham số
- module (
torch.nn.Module) — Module pytorch để áp dụng FasterCache. Thông thường, đây nên là kiến trúc transformer được hỗ trợ trong Diffusers, chẳng hạn nhưCogVideoXTransformer3DModel, nhưng các triển khai bên ngoài cũng có thể hoạt động. - config (
FasterCacheConfig) — Cấu hình để sử dụng cho FasterCache.
Áp dụng FasterCache cho một pipeline được chỉ định.
Ví dụ:
>>> import torch
>>> from diffusers import CogVideoXPipeline, FasterCacheConfig, apply_faster_cache
>>> pipe = CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-5b", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> config = FasterCacheConfig(
... spatial_attention_block_skip_range=2,
... spatial_attention_timestep_skip_range=(-1, 681),
... low_frequency_weight_update_timestep_range=(99, 641),
... high_frequency_weight_update_timestep_range=(-1, 301),
... spatial_attention_block_identifiers=["transformer_blocks"],
... attention_weight_callback=lambda _: 0.3,
... tensor_format="BFCHW",
... )
>>> apply_faster_cache(pipe.transformer, config)FirstBlockCacheConfig
lớp diffusers.FirstBlockCacheConfig
< source >( threshold: float = 0.05 )
Tham số
- threshold (
float, mặc định là0.05) — Ngưỡng để xác định xem có cần thực hiện một lần truyền tiến (forward pass) qua tất cả các lớp của mô hình hay không. Ngưỡng cao hơn thường dẫn đến việc truyền tiến qua ít lớp hơn và suy luận nhanh hơn, nhưng có thể làm giảm chất lượng sinh thành. Ngưỡng thấp hơn có thể không mang lại sự tăng tốc đáng kể cho quá trình sinh thành. Ngưỡng này được so sánh với độ chênh lệch absmean của các phần dư (residuals) giữa đầu ra hiện tại và đầu ra được lưu đệm (cached) từ khối transformer đầu tiên. Nếu độ chênh lệch thấp hơn ngưỡng, lần truyền tiến sẽ bị bỏ qua.
Cấu hình cho First Block Cache.
diffusers.apply_first_block_cache
< source >( module: Moduleconfig: FirstBlockCacheConfig )
Tham số
- module (
torch.nn.Module) — Module pytorch để áp dụng FBCache. Thông thường, đây nên là kiến trúc transformer được hỗ trợ trong Diffusers, chẳng hạn nhưCogVideoXTransformer3DModel, nhưng các triển khai bên ngoài cũng có thể hoạt động. - config (
FirstBlockCacheConfig) — Cấu hình để sử dụng khi áp dụng phương pháp FBCache.
Áp dụng First Block Cache cho một module được chỉ định.
First Block Cache được xây dựng dựa trên các ý tưởng của TeaCache. Nó đơn giản hơn nhiều để triển khai một cách tổng quát cho một phạm vi rộng các mô hình và đã được tích hợp trước tiên cho mục đích thử nghiệm.
Ví dụ:
>>> import torch
>>> from diffusers import CogView4Pipeline
>>> from diffusers.hooks import apply_first_block_cache, FirstBlockCacheConfig
>>> pipe = CogView4Pipeline.from_pretrained("THUDM/CogView4-6B", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> apply_first_block_cache(pipe.transformer, FirstBlockCacheConfig(threshold=0.2))
>>> prompt = "A photo of an astronaut riding a horse on mars"
>>> image = pipe(prompt, generator=torch.Generator().manual_seed(42)).images[0]
>>> image.save("output.png")TaylorSeerCacheConfig
lớp diffusers.TaylorSeerCacheConfig
< source >( cache_interval: int = 5disable_cache_before_step: int = 3disable_cache_after_step: int | None = Nonemax_order: int = 1taylor_factors_dtype: typing.Optional[torch.dtype] = torch.bfloat16skip_predict_identifiers: list[str] | None = Nonecache_identifiers: list[str] | None = Noneuse_lite_mode: bool = False )
Tham số
- cache_interval (
int, mặc định là5) — Khoảng cách giữa các bước tính toán đầy đủ. Sau một bước tính toán đầy đủ, các đầu ra được lưu trong bộ nhớ đệm (đã dự đoán) sẽ được tái sử dụng cho số bước khử nhiễu tiếp theo này trước khi làm mới bằng một lần truyền tiến đầy đủ mới. - disable_cache_before_step (
int, mặc định là3) — Chỉ số bước khử nhiễu trước đó mà tại đó việc lưu cache bị vô hiệu hóa, có nghĩa là toàn bộ phép tính được thực hiện cho các bước ban đầu (từ 0 đến disable_cache_before_step - 1) để thu thập dữ liệu cho các xấp xỉ chuỗi Taylor. Trong các bước này, các hệ số Taylor được cập nhật, nhưng việc lưu cache/dự đoán không được áp dụng. Việc lưu cache bắt đầu từ bước này. - disable_cache_after_step (
int, tùy chọn, mặc định làNone) — Chỉ số bước khử nhiễu sau đó bộ nhớ đệm sẽ bị vô hiệu hóa. Nếu được đặt, đối với các bước >= giá trị này, tất cả các module sẽ chạy tính toán đầy đủ mà không có dự đoán hay cập nhật trạng thái, đảm bảo độ chính xác ở các giai đoạn sau nếu cần. - max_order (
int, mặc định là1) — Bậc cao nhất trong khai triển chuỗi Taylor để xấp xỉ đầu ra của module. Bậc cao hơn cung cấp xấp xỉ tốt hơn nhưng làm tăng lượng tính toán và bộ nhớ sử dụng. - taylor_factors_dtype (
torch.dtype, mặc định làtorch.bfloat16) — Loại dữ liệu được sử dụng để lưu trữ và tính toán các hệ số của chuỗi Taylor. Độ chính xác thấp hơn làm giảm bộ nhớ nhưng có thể ảnh hưởng đến độ ổn định; độ chính xác cao hơn cải thiện độ chính xác với chi phí là nhiều bộ nhớ hơn. - skip_predict_identifiers (
list[str], tùy chọn, mặc định làNone) — Các mẫu Regex (sử dụngre.fullmatch) cho tên module để đặt ở chế độ “skip” trong “cache” mode. Trong chế độ này, module được tính toán đầy đủ trong các bước khởi tạo hoặc làm mới, nhưng trả về một tensor bằng 0 (khớp với hình dạng đã ghi lại) trong các bước dự đoán để bỏ qua việc tính toán một cách tiết kiệm. - cache_identifiers (
list[str], tùy chọn, mặc định làNone) — Các mẫu Regex (sử dụngre.fullmatch) cho tên module để đặt vào chế độ cache Taylor-series, trong đó các đầu ra được xấp xỉ và lưu cache để tái sử dụng. - use_lite_mode (
bool, tùy chọn, mặc định làFalse) — Bật một biến thể TaylorSeer nhẹ, tối thiểu hóa việc sử dụng bộ nhớ bằng cách áp dụng các mẫu định trước để bỏ qua và lưu cache (ví dụ: bỏ qua các khối và lưu cache các phép chiếu). Điều này ghi đè lên bất kỳinactive_identifiershoặcactive_identifierstùy chỉnh nào.
Cấu hình cho bộ nhớ đệm TaylorSeer. Xem: https://huggingface.co/papers/2503.06923
Ghi chú:
- Các mẫu được khớp bằng cách sử dụng
re.fullmatchtrên tên module. - Nếu
skip_predict_identifiershoặccache_identifiersđược cung cấp, chỉ các module khớp mới được hook. - Nếu không có thông số nào được cung cấp, tất cả các module dạng attention sẽ được hook theo mặc định.
Ví dụ về việc sử dụng không hoạt động và hoạt động:
def forward(x):
x = self.module1(x) # inactive module: returns zeros tensor based on shape recorded during full compute
x = self.module2(x) # active module: caches output here, avoiding recomputation of prior steps
return xMột giá trị giả lập cho một đường dẫn có dấu chấm (ví dụ: torch.float32): các chuỗi truy cập thuộc tính, các cuộc gọi hoạt động như các decorator pass-through, repr là đường dẫn có dấu chấm, và việc sử dụng nó như một lớp cơ sở sẽ thay thế bằng một lớp cơ sở type thông thường (PEP 560 __mro_entries__), do đó các lớp con thực sự vẫn giữ nguyên metaclass bình thường và inspect.signature sẽ đọc __init__ thực của chúng thay vì của một mock.
diffusers.apply_taylorseer_cache
< source >( module: Moduleconfig: TaylorSeerCacheConfig )
Áp dụng bộ nhớ đệm TaylorSeer cho một pipeline được chỉ định (thường là transformer / UNet).
Hàm này gắn các module được chọn trong mô hình để cho phép lưu trữ bộ nhớ đệm hoặc bỏ qua dựa trên cấu hình được cung cấp, từ đó giảm các phép tính trùng lặp trong các vòng lặp khử nhiễu của mô hình khuếch tán.
Ví dụ:
>>> import torch
>>> from diffusers import FluxPipeline, TaylorSeerCacheConfig
>>> pipe = FluxPipeline.from_pretrained(
... "black-forest-labs/FLUX.1-dev",
... torch_dtype=torch.bfloat16,
... )
>>> pipe.to("cuda")
>>> config = TaylorSeerCacheConfig(
... cache_interval=5,
... max_order=1,
... disable_cache_before_step=3,
... taylor_factors_dtype=torch.float32,
... )
>>> pipe.transformer.enable_cache(config)MagCacheConfig
lớp diffusers.MagCacheConfig
< source >( threshold: float = 0.06max_skip_steps: int = 3retention_ratio: float = 0.2num_inference_steps: int = 28mag_ratios: typing.Union[torch.Tensor, typing.List[float], NoneType] = Nonecalibrate: bool = False )
Tham số
- threshold (
float, mặc định là0.06) — Ngưỡng cho lỗi tích lũy. Nếu lỗi tích lũy thấp hơn ngưỡng này, việc tính toán khối sẽ bị bỏ qua. Ngưỡng cao hơn cho phép bỏ qua mạnh mẽ hơn (nhanh hơn) nhưng có thể làm giảm chất lượng. - max_skip_steps (
int, mặc định là3) — Số lượng bước liên tiếp tối đa có thể bị bỏ qua (K trong bài báo). - retention_ratio (
float, mặc định là0.2) — Tỷ lệ các bước ban đầu mà trong đó việc bỏ qua bị vô hiệu hóa để đảm bảo tính ổn định. Ví dụ, nếunum_inference_stepslà 28 vàretention_ratiolà 0.2, thì 6 bước đầu tiên sẽ không bao giờ bị bỏ qua. - num_inference_steps (
int, mặc định là28) — Số bước suy luận được sử dụng trong pipeline. Tham số này là bắt buộc để nội suymag_ratiosmột cách chính xác. - mag_ratios (
torch.Tensor, tuỳ chọn) — Tỷ lệ biên độ đã tính trước cho mô hình. Các giá trị này phụ thuộc vào checkpoint. Nếu không được cung cấp, bạn phải đặtcalibrate=Trueđể tính toán chúng cho mô hình cụ thể của bạn. Đối với các mô hình Flux, bạn có thể sử dụngdiffusers.hooks.mag_cache.FLUX_MAG_RATIOS. - calibrate (
bool, mặc định làFalse) — Nếu True, bật chế độ hiệu chuẩn. Trong chế độ này, không có khối nào bị bỏ qua. Thay vào đó, hook sẽ tính toán các tỷ lệ độ lớn cho lần chạy hiện tại và ghi log chúng vào cuối. Sử dụng tùy chọn này để lấymag_ratioscho các mô hình hoặc trình lập lịch mới.
Cấu hình cho MagCache.
diffusers.apply_mag_cache
< source >( module: Moduleconfig: MagCacheConfig )
Áp dụng MagCache cho một module nhất định (thường là Transformer).
SeaCacheConfig
lớp diffusers.SeaCacheConfig
< source >( threshold: float = 0.25residual_order: int = 1retention_steps: int = 1cache_end_steps: int = 1max_consecutive_cached: int = 2power_exp: float = 3.0raw_vision_callback: typing.Callable[[torch.nn.Module, tuple[typing.Any, ...], dict[str, typing.Any]], list[torch.Tensor] | None] = None )
Tham số
- threshold (
float, mặc định là0.25) — Ngân sách tương đối L1 tích lũy. Giá trị lớn hơn sẽ tái sử dụng bộ đệm thường xuyên hơn. - residual_order (
int, mặc định là1) — Thứ tự được sử dụng để dự đoán phần dư (residual) của transformer.0tái sử dụng trực tiếp phần dư gần nhất và1ngoại suy tuyến tính từ hai lần thực thi đầy đủ gần nhất. - retention_steps (
int, mặc định là1) — Số bước lập lịch ban đầu luôn được thực hiện đầy đủ. - cache_end_steps (
int, mặc định là1) — Số bước scheduler cuối cùng luôn được thực hiện đầy đủ. - max_consecutive_cached (
int, mặc định là2) — Số lần tái sử dụng residual liên tiếp tối đa cho mỗi ngữ cảnh cache trước khi buộc thực thi đầy đủ.0để tắt giới hạn này. - power_exp (
float, mặc định là3.0) — Số mũ của tiên nghiệm công suất tín hiệu sạch SEA. SeaCache sử dụng3.0cho các đặc trưng video. - raw_vision_callback (
Callable, tùy chọn) — Bộ thích ứng mô hình nâng cao, trả về các latent thị giác tạo nên đầu ra được sinh ra, mỗi latent có hình dạng(C, T, H, W). Bao gồm các khung điều kiện sạch trong quỹ đạo đầu ra, nhưng loại trừ các gợi ý thị giác riêng biệt không phải là một phần của đầu ra. Khi bị bỏ qua, một bộ thích ứng tích hợp sẵn sẽ được sử dụng nếu có sẵn.
Cấu hình cho SeaCache.
SeaCache bị tắt theo mặc định và chỉ được kích hoạt sau khi cấu hình này được truyền vào transformer.enable_cache(config).
SeaCache so sánh các chỉ báo Spectral-Evolution-Aware (SEA) giữa các bước của scheduler. Nếu sự thay đổi tương đối tích lũy của chúng vẫn nằm dưới threshold, chồng khối transformer lặp lại sẽ được thay thế bằng một residual được cache. Các adapter cụ thể cho model có thể mở rộng ranh giới residual vượt ra ngoài các khối đó. Các video transformer khác có thể sử dụng đường dẫn chung bằng cách đăng ký metadata khối của chúng và cung cấp raw_vision_callback; pipeline của chúng phải đi vào một cache_context cho mỗi quỹ đạo transformer.
diffusers.apply_sea_cache
< source >( module: Moduleconfig: SeaCacheConfig )
Áp dụng SeaCache cho một transformer được hỗ trợ.
SeaCache tái sử dụng phần dư được lưu trong bộ nhớ đệm cho chồng khối lặp lại của transformer. Bộ thích ứng mô hình có thể tùy chỉnh việc trích xuất chỉ báo và ranh giới phần dư; đường dẫn chung sử dụng siêu dữ liệu khối đã đăng ký và raw_vision_callback. Tham số tương thích và bộ nhớ đệm phải được xác thực cho từng mô hình.