Buckets:
Методы кэширования
Методы кэширования ускоряют диффузионные трансформеры, сохраняя и повторно используя промежуточные результаты определённых слоёв, таких как слои внимания и полносвязные слои, вместо их пересчёта на каждом шаге инференса.
CacheMixin[[diffusers.CacheMixin]]
diffusers.CacheMixin[[diffusers.CacheMixin]]
diffusers.CacheMixin()
Класс для включения/отключения методов кэширования в диффузионных моделях.
Поддерживаемые методы кэширования:
cache_context[[diffusers.CacheMixin.cache_context]]
cache_context(name: str, **kwargs)
Контекстный менеджер, предоставляющий информацию для управления кэшем.
name — это имя вызова денузинга, обычно "cond" или "uncond". Именованные аргументы описывают, на каком этапе находится цикл денузинга — см. CacheContext для списка поддерживаемых полей, например cache_context("cond", step_index=i, sigma=sigma).
enable_cache[[diffusers.CacheMixin.enable_cache]]
enable_cache(config)
Параметры:
config (PyramidAttentionBroadcastConfig | FasterCacheConfig | FirstBlockCacheConfig | SeaCacheConfig | TextKVCacheConfig) : конфигурация для применения техники кэширования. В настоящее время поддерживаются следующие техники кэширования: - PyramidAttentionBroadcastConfig - FasterCacheConfig - FirstBlockCacheConfig - SeaCacheConfig - TextKVCacheConfig
Включите методы кэширования для модели.
Пример:
>>> 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[[diffusers.PyramidAttentionBroadcastConfig]]
diffusers.PyramidAttentionBroadcastConfig[[diffusers.PyramidAttentionBroadcastConfig]]
diffusers.PyramidAttentionBroadcastConfig(spatial_attention_block_skip_range: int | None = None, temporal_attention_block_skip_range: int | None = None, cross_attention_block_skip_range: int | None = None, spatial_attention_timestep_skip_range: tuple[int, int] = (100, 800), temporal_attention_timestep_skip_range: tuple[int, int] = (100, 800), cross_attention_timestep_skip_range: tuple[int, int] = (100, 800), spatial_attention_block_identifiers: tuple[str, ...] = ('blocks', 'transformer_blocks', 'single_transformer_blocks', 'layers', 'visual_transformer_blocks'), temporal_attention_block_identifiers: tuple[str, ...] = ('temporal_transformer_blocks',), cross_attention_block_identifiers: tuple[str, ...] = ('blocks', 'transformer_blocks', 'layers'), current_timestep_callback: typing.Callable[[], int] = None)
Параметры:
spatial_attention_block_skip_range (int, optional, по умолчанию None) : Количество раз, когда конкретный пространственный broadcast внимания пропускается перед вычислением состояний внимания для повторного использования. Если это значение установлено в N, вычисление внимания будет пропущено N - 1 раз (то есть будут повторно использованы старые состояния внимания) перед тем, как снова вычислить новые состояния внимания.
temporal_attention_block_skip_range (int, optional, по умолчанию None) : Количество раз, когда конкретное временное внимание (temporal attention) пропускается перед вычислением состояний внимания для повторного использования. Если это значение установлено в N, вычисление внимания будет пропущено N - 1 раз (то есть будут повторно использованы старые состояния внимания) перед тем, как снова вычислить новые состояния внимания.
cross_attention_block_skip_range (int, optional, по умолчанию None) : Количество раз, когда конкретный broadcast кросс-внимания пропускается перед вычислением состояний внимания для повторного использования. Если это значение установлено в N, вычисление внимания будет пропущено N - 1 раз (то есть будут повторно использованы старые состояния внимания) перед тем, как снова вычислить новые состояния внимания.
spatial_attention_timestep_skip_range (tuple[int, int], по умолчанию (100, 800)) : Диапазон шагов, которые пропускаются в слое пространственного внимания. Вычисления внимания будут условно пропущены, если текущий шаг находится в указанном диапазоне.
temporal_attention_timestep_skip_range (tuple[int, int], по умолчанию (100, 800)) : Диапазон временных шагов, которые пропускаются в слое временного внимания. Вычисления внимания будут условно пропущены, если текущий временной шаг находится в указанном диапазоне.
cross_attention_timestep_skip_range (tuple[int, int], по умолчанию (100, 800)) : Диапазон шагов, которые пропускаются в слое кросс-внимания. Вычисления внимания будут условно пропущены, если текущий шаг находится в указанном диапазоне.
spatial_attention_block_identifiers (tuple[str, ...]) : Идентификаторы, по которым сверяются имена слоёв, чтобы определить, является ли слой слоем пространственного внимания.
temporal_attention_block_identifiers (tuple[str, ...]) : Идентификаторы, по которым сверяются имена слоёв, чтобы определить, является ли слой слоем временного внимания.
cross_attention_block_identifiers (tuple[str, ...]) : Идентификаторы, по которым сверяются имена слоёв, чтобы определить, является ли слой слоем кросс-внимания.
Конфигурация для Pyramid Attention Broadcast.
diffusers.apply_pyramid_attention_broadcast[[diffusers.apply_pyramid_attention_broadcast]]
diffusers.apply_pyramid_attention_broadcast(module: Module, config: PyramidAttentionBroadcastConfig)
Параметры:
module (torch.nn.Module) : модуль, к которому применяется Pyramid Attention Broadcast.
config (PyramidAttentionBroadcastConfig | None, optional, по умолчанию None) : Конфигурация, используемая для Pyramid Attention Broadcast.
Примените Pyramid Attention Broadcast к указанному конвейеру.
PAB — это метод аппроксимации внимания, который использует сходство состояний внимания между временными шагами для снижения вычислительных затрат на вычисление внимания. Ключевой вывод из статьи состоит в том, что сходство внимания в слоях кросс-внимания между временными шагами высокое, тогда как в временных и пространственных слоях оно ниже. Это позволяет пропускать вычисление внимания в слоях кросс-внимания чаще, чем во временных и пространственных слоях. Таким образом, применение PAB ускоряет процесс инференса.
Пример:
>>> 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[[diffusers.FasterCacheConfig]]
diffusers.FasterCacheConfig[[diffusers.FasterCacheConfig]]
diffusers.FasterCacheConfig(spatial_attention_block_skip_range: int = 2, temporal_attention_block_skip_range: int | None = None, spatial_attention_timestep_skip_range: tuple[int, int] = (-1, 681), temporal_attention_timestep_skip_range: tuple[int, int] = (-1, 681), low_frequency_weight_update_timestep_range: tuple[int, int] = (99, 901), high_frequency_weight_update_timestep_range: tuple[int, int] = (-1, 301), alpha_low_frequency: float = 1.1, alpha_high_frequency: float = 1.1, unconditional_batch_skip_range: int = 5, unconditional_batch_timestep_skip_range: tuple[int, int] = (-1, 641), spatial_attention_block_identifiers: tuple[str, ...] = ('^blocks.*attn', '^transformer_blocks.*attn', '^single_transformer_blocks.*attn'), temporal_attention_block_identifiers: tuple[str, ...] = ('^temporal_transformer_blocks.*attn',), attention_weight_callback: typing.Callable[[torch.nn.Module], float] = None, low_frequency_weight_callback: typing.Callable[[torch.nn.Module], float] = None, high_frequency_weight_callback: typing.Callable[[torch.nn.Module], float] = None, tensor_format: str = 'BCFHW', is_guidance_distilled: bool = False, current_timestep_callback: typing.Callable[[], int] = None, _unconditional_conditional_input_kwargs_identifiers: list[str] = ('hidden_states', 'encoder_hidden_states', 'timestep', 'attention_mask', 'encoder_attention_mask'))
Параметры:
spatial_attention_block_skip_range (int, по умолчанию 2) : Вычислять состояния внимания каждые N итераций. Если это значение установлено в N, вычисление внимания будет пропускаться N - 1 раз (то есть будут повторно использоваться кэшированные состояния внимания), прежде чем снова вычислить новые состояния внимания.
temporal_attention_block_skip_range (int, optional, по умолчанию None) : Вычислять состояния внимания каждые N итераций. Если это значение установлено в N, вычисление внимания будет пропускаться N - 1 раз (т. е. будут повторно использоваться кэшированные состояния внимания), прежде чем снова вычислить новые состояния внимания.
spatial_attention_timestep_skip_range (tuple[float, float], по умолчанию (-1, 681)) : Диапазон временных шагов, в пределах которого вычисление пространственного внимания можно пропустить без значительной потери качества. Это значение определяется пользователем на основе используемой модели. Первое значение в кортеже — нижняя граница, второе — верхняя. Как правило, временные шаги диффузии для удаления шума находятся в обратном диапазоне от 0 до 1000 (то есть удаление шума начинается с шага 1000 и заканчивается на шаге 0). Для значений по умолчанию это означает, что пропуск вычисления пространственного внимания будет применяться только после достижения временного шага удаления шума 681 и продолжится до конца процесса удаления шума.
temporal_attention_timestep_skip_range (tuple[float, float], optional, по умолчанию None) : Диапазон временных шагов, в пределах которого вычисление временного внимания можно пропустить без значительной потери качества. Это значение определяется пользователем на основе используемой модели. Первое значение в кортеже — нижняя граница, второе — верхняя. Как правило, временные шаги диффузии для удаления шума находятся в обратном диапазоне от 0 до 1000 (то есть удаление шума начинается с шага 1000 и заканчивается на шаге 0).
low_frequency_weight_update_timestep_range (tuple[int, int], по умолчанию (99, 901)) : Диапазон временных шагов, в пределах которого применяется масштабирование весов низких частот. Первое значение в кортеже — нижняя граница, второе — верхняя граница диапазона временных шагов. Функция обратного вызова для обновления вызывается только в пределах этого диапазона.
high_frequency_weight_update_timestep_range (tuple[int, int], по умолчанию (-1, 301)) : Диапазон временных шагов, в пределах которого применяется масштабирование весов высокочастотной составляющей. Первое значение в кортеже — нижняя граница, второе — верхняя граница диапазона временных шагов. Функция обратного вызова для обновления вызывается только в пределах этого диапазона.
alpha_low_frequency (float, по умолчанию 1.1) : Вес, на который масштабируются обновления низкой частоты. Используется для приближённого вычисления безусловной ветви на основе выходов условной ветви.
alpha_high_frequency (float, по умолчанию 1.1) : Вес, на который масштабируются обновления высокой частоты. Используется для приближённого вычисления безусловной ветви на основе выходов условной ветви.
unconditional_batch_skip_range (int, по умолчанию 5) : обрабатывать безусловный переход каждые N итераций. Если установлено значение N, вычисление безусловного перехода будет пропускаться N - 1 раз (то есть переиспользуются кэшированные состояния безусловного перехода), прежде чем снова вычислить новые состояния безусловного перехода.
unconditional_batch_timestep_skip_range (tuple[float, float], по умолчанию (-1, 641)) : Диапазон временных шагов, в пределах которого вычисление безусловной ветви можно пропустить без значительной потери качества. Это значение определяется пользователем на основе базовой модели. Первое значение в кортеже — нижняя граница, второе — верхняя граница.
spatial_attention_block_identifiers (tuple[str, ...], по умолчанию ("blocks.*attn1", "transformer_blocks.*attn1", "single_transformer_blocks.*attn1")) : Идентификаторы для сопоставления с блоками пространственного внимания в модели. Если имя блока содержит один из этих идентификаторов, к этому блоку будет применён FasterCache. Это могут быть полные имена слоёв, частичные имена слоёв или регулярные выражения. Сопоставление всегда выполняется с помощью регулярного выражения.
temporal_attention_block_identifiers (tuple[str, ...], по умолчанию ("temporal_transformer_blocks.*attn1",)) : Идентификаторы для сопоставления с блоками временного внимания в модели. Если имя блока содержит один из этих идентификаторов, к этому блоку будет применён FasterCache. Это могут быть полные имена слоёв, частичные имена слоёв или регулярные выражения. Сопоставление всегда выполняется с помощью регулярного выражения.
attention_weight_callback (Callable[[torch.nn.Module], float], по умолчанию None) : Функция обратного вызова для определения веса, на который масштабируются выходные значения внимания. Эта функция должна принимать модуль внимания в качестве входного параметра и возвращать значение типа float. Используется для приближения безусловной ветви по выходным значениям условной ветви. Если не задана, вес по умолчанию составляет 0,5 для всех временных шагов. Как правило, согласно описанию в статье, этот вес должен постепенно увеличиваться с 0 до 1 по мере продвижения инференса. Пользователям рекомендуется экспериментировать и задавать собственные расписания весов, учитывающие количество шагов инференса и поведение базовой модели по мере продвижения процесса денойзинга.
low_frequency_weight_callback (Callable[[torch.nn.Module], float], по умолчанию None) : Функция обратного вызова для определения веса, на который масштабируются обновления с низкой частотой. Если не задана, по умолчанию используется вес 1.1 для шагов времени в указанном диапазоне (как описано в статье).
high_frequency_weight_callback (Callable[[torch.nn.Module], float], по умолчанию None) : Функция обратного вызова для определения веса, на который масштабируются обновления с высокой частотой. Если не задана, по умолчанию используется вес 1.1 для шагов времени в указанном диапазоне (как описано в статье).
tensor_format (str, по умолчанию "BCFHW") : Формат входных тензоров. Должен быть одним из "BCFHW", "BFCHW" или "BCHW". Формат используется для разделения отдельных латентных кадров, чтобы вычислить компоненты низкой и высокой частоты.
is_guidance_distilled (bool, по умолчанию False) : Указывает, является ли модель дистиллированной с помощью guidance. Если модель дистиллирована с помощью guidance, FasterCache не применяется на уровне denoiser для пропуска вычисления безусловной ветви (поскольку она отсутствует).
_unconditional_conditional_input_kwargs_identifiers (list[str], по умолчанию ("hidden_states", "encoder_hidden_states", "timestep", "attention_mask", "encoder_attention_mask")) : Идентификаторы для сопоставления входных kwargs, содержащих батч-конкатенированные безусловные и условные входы. Если имя входного kwargs содержит один из этих идентификаторов, FasterCache разделит входы на безусловную и условную ветви. Это должно быть список точных имён входных kwargs, содержащих батч-конкатенированные безусловные и условные входы.
Конфигурация для FasterCache.
diffusers.apply_faster_cache[[diffusers.apply_faster_cache]]
diffusers.apply_faster_cache(module: Module, config: FasterCacheConfig)
Параметры:
module (torch.nn.Module) : модуль PyTorch, к которому применяется FasterCache. Как правило, это должна быть поддерживаемая в Diffusers архитектура трансформера, например CogVideoXTransformer3DModel, но могут работать и внешние реализации.
config (FasterCacheConfig) : конфигурация, используемая для FasterCache.
Применяет FasterCache к указанному конвейеру.
Пример:
>>> 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[[diffusers.FirstBlockCacheConfig]]
diffusers.FirstBlockCacheConfig[[diffusers.FirstBlockCacheConfig]]
diffusers.FirstBlockCacheConfig(threshold: float = 0.05)
Параметры:
threshold (float, по умолчанию 0.05) : Порог, определяющий необходимость прямого прохода через все слои модели. Более высокий порог обычно приводит к прямому проходу через меньшее количество слоёв и более быстрому выводу, но может ухудшить качество генерации. Более низкий порог может не дать значительного ускорения генерации. Порог сравнивается с абсолютным средним значением разницы остатков между текущим и кэшированным выходом первого блока трансформера. Если разница ниже порога, прямой проход пропускается.
Конфигурация для First Block Cache.
diffusers.apply_first_block_cache[[diffusers.apply_first_block_cache]]
diffusers.apply_first_block_cache(module: Module, config: FirstBlockCacheConfig)
Параметры:
module (torch.nn.Module) : модуль PyTorch, к которому применяется FBCache. Как правило, это должна быть поддерживаемая в Diffusers трансформерная архитектура, например CogVideoXTransformer3DModel, но могут работать и внешние реализации.
config (FirstBlockCacheConfig) : конфигурация для применения метода FBCache.
Применяет First Block Cache к заданному модулю.
First Block Cache основан на идеях TeaCache. Он значительно проще в реализации для широкого круга моделей и был интегрирован в первую очередь в экспериментальных целях.
Пример:
>>> 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[[diffusers.TaylorSeerCacheConfig]]
diffusers.TaylorSeerCacheConfig[[diffusers.TaylorSeerCacheConfig]]
diffusers.TaylorSeerCacheConfig(cache_interval: int = 5, disable_cache_before_step: int = 3, disable_cache_after_step: int | None = None, max_order: int = 1, taylor_factors_dtype: typing.Optional[torch.dtype] = torch.bfloat16, skip_predict_identifiers: list[str] | None = None, cache_identifiers: list[str] | None = None, use_lite_mode: bool = False)
Параметры:
cache_interval (int, по умолчанию 5) : Интервал между полными шагами вычислений. После полного вычисления кэшированные (предсказанные) результаты переиспользуются для этого количества последующих шагов денойзинга, прежде чем обновляются новым полным проходом вперёд.
disable_cache_before_step (int, по умолчанию 3) : Индекс шага денойзинга, до которого кэширование отключено, то есть для начальных шагов (от 0 до disable_cache_before_step - 1) выполняется полный вычислительный процесс для сбора данных для приближений рядомми Тейлора. На этих шагах обновляются коэффициенты Тейлора, но кэширование/предсказания не применяются. Кэширование начинается с этого шага.
disable_cache_after_step (int, optional, по умолчанию None) : Индекс шага денойзинга, после которого кэширование отключается. Если значение задано, то для шагов >= этого значения все модули выполняют полные вычисления без предсказаний или обновлений состояния, что обеспечивает точность на поздних этапах при необходимости.
max_order (int, по умолчанию 1) : Наивысший порядок разложения в ряд Тейлора для аппроксимации выходов модуля. Более высокие порядки обеспечивают более точную аппроксимацию, но увеличивают вычислительные затраты и потребление памяти.
taylor_factors_dtype (torch.dtype, по умолчанию torch.bfloat16) : Тип данных, используемый для хранения и вычисления факторов ряда Тейлора. Более низкая точность уменьшает потребление памяти, но может повлиять на устойчивость; более высокая точность повышает точность вычислений за счёт увеличения потребления памяти.
skip_predict_identifiers (list[str], необязательный, по умолчанию None) : Регулярные выражения (с использованием re.fullmatch) для имён модулей, которые следует помечать как «skip» в режиме «cache». В этом режиме модуль полностью вычисляется на начальных шагах или при обновлении, но на шагах предсказания возвращает нулевой тензор (с совпадающей записанной формой), чтобы дёшево пропустить вычисления.
cache_identifiers (list[str], необязательный, по умолчанию None) : Регулярные выражения (с использованием re.fullmatch) для имён модулей, которые нужно поместить в режим кэширования по ряду Тейлора, где выходные значения аппроксимируются и кэшируются для повторного использования.
use_lite_mode (bool, необязательный, по умолчанию False) : Включает облегчённый вариант TaylorSeer, который минимизирует использование памяти, применяя предопределённые паттерны для пропуска и кэширования (например, пропуск блоков и кэширование проекций). Это переопределяет любые пользовательские inactive_identifiers или active_identifiers.
Конфигурация для кэша TaylorSeer. См.: https://huggingface.co/papers/2503.06923
Примечания:
- Сопоставление шаблонов выполняется с помощью
re.fullmatchпо имени модуля. - Если указаны
skip_predict_identifiersилиcache_identifiers, хуки устанавливаются только для соответствующих модулей. - Если ни один из них не указан, по умолчанию перехватываются все модули, подобные attention.
Пример неактивного и активного использования:
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 x
bfloat16[[diffusers.TaylorSeerCacheConfig.taylor_factors_dtype]]
bfloat16(*args, **kwargs)
Мок-значение для пути с точками (например, torch.float32): цепочки доступа к атрибутам и вызовы работают как пропускные декораторы, repr — это путь с точками, а использование в качестве базового класса подменяет его обычным базовым классом type (PEP 560 __mro_entries__), благодаря чему реальные дочерние классы сохраняют обычный метакласс, а inspect.signature читает их реальный __init__, а не мок.
diffusers.apply_taylorseer_cache[[diffusers.apply_taylorseer_cache]]
diffusers.apply_taylorseer_cache(module: Module, config: TaylorSeerCacheConfig)
Параметры:
module (torch.nn.Module) : Поддерево модели, к которому следует применить хуки.
config (TaylorSeerCacheConfig) : Настройки для кэша.
Применяет кэш TaylorSeer к указанному конвейеру (как правило, трансформеру / UNet).
Эта функция подключает выбранные модули в модели для включения кэширования или пропуска на основе предоставленной конфигурации, что снижает избыточные вычисления в циклах денуазинга диффузии.
Пример:
>>> 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[[diffusers.MagCacheConfig]]
diffusers.MagCacheConfig[[diffusers.MagCacheConfig]]
diffusers.MagCacheConfig(threshold: float = 0.06, max_skip_steps: int = 3, retention_ratio: float = 0.2, num_inference_steps: int = 28, mag_ratios: typing.Union[torch.Tensor, typing.List[float], NoneType] = None, calibrate: bool = False)
Параметры:
threshold (float, по умолчанию 0.06) : Порог для накопленной ошибки. Если накопленная ошибка ниже этого порога, вычисление блока пропускается. Более высокий порог позволяет более агрессивно пропускать вычисления (быстрее), но может ухудшить качество.
max_skip_steps (int, по умолчанию 3) : максимальное количество последовательных шагов, которые можно пропустить (K в статье).
retention_ratio (float, по умолчанию 0.2) : Доля начальных шагов, на протяжении которых пропуск отключён для обеспечения стабильности. Например, если num_inference_steps равно 28, а retention_ratio равно 0.2, первые 6 шагов никогда не пропускаются.
num_inference_steps (int, по умолчанию 28) : Количество шагов инференса, используемых в конвейере. Это необходимо для корректной интерполяции mag_ratios.
mag_ratios (torch.Tensor, необязательный) : Предварительно вычисленные коэффициенты амплитуды для модели. Они зависят от контрольной точки. Если не указаны, необходимо установить calibrate=True, чтобы вычислить их для вашей конкретной модели. Для моделей Flux можно использовать diffusers.hooks.mag_cache.FLUX_MAG_RATIOS.
calibrate (bool, по умолчанию False) : Если True, включается режим калибровки. В этом режиме блоки не пропускаются. Вместо этого хук вычисляет отношения амплитуд для текущего запуска и записывает их в журнал в конце. Используйте этот режим, чтобы получить mag_ratios для новых моделей или планировщиков.
Конфигурация для MagCache.
diffusers.apply_mag_cache[[diffusers.apply_mag_cache]]
diffusers.apply_mag_cache(module: Module, config: MagCacheConfig)
Параметры:
module (torch.nn.Module) : модуль, к которому нужно применить MagCache.
config (MagCacheConfig) : конфигурация MagCache.
Применяет MagCache к заданному модулю (как правило, Transformer).
SeaCacheConfig[[diffusers.SeaCacheConfig]]
diffusers.SeaCacheConfig[[diffusers.SeaCacheConfig]]
diffusers.SeaCacheConfig(threshold: float = 0.25, residual_order: int = 1, retention_steps: int = 1, cache_end_steps: int = 1, max_consecutive_cached: int = 2, power_exp: float = 3.0, raw_vision_callback: typing.Callable[[torch.nn.Module, tuple[typing.Any, ...], dict[str, typing.Any]], list[torch.Tensor] | None] = None)
Параметры:
threshold (float, по умолчанию 0.25) : Накопленный относительный L1-бюджет. Большие значения приводят к более частому повторному использованию кэша.
residual_order (int, по умолчанию 1) : Порядок, используемый для предсказания остаточного сигнала трансформера. 0 напрямую переиспользует самый последний остаточный сигнал, а 1 линейно экстраполирует его по двум последним полным выполнениям.
retention_steps (int, по умолчанию 1) : Количество начальных шагов планировщика, которые всегда выполняются полностью.
cache_end_steps (int, по умолчанию 1) : Количество последних шагов планировщика, которые всегда выполняются полностью.
max_consecutive_cached (int, по умолчанию 2) : Максимальное количество последовательных повторных использований остаточных значений в контексте кэша перед принудительным полным выполнением. 0 отключает ограничение.
power_exp (float, по умолчанию 3.0) : Показатель степени априорного распределения мощности чистого сигнала SEA. SeaCache использует 3.0 для видеособразов.
raw_vision_callback (Callable, необязательный) : Продвинутый адаптер модели, возвращающий визуальные латенты, формирующие сгенерированный вывод, каждый из которых имеет форму (C, T, H, W). Включите чистые кадры условий в траекторию вывода, но исключите отдельные визуальные подсказки, не являющиеся частью вывода. Если параметр не указан, используется встроенный адаптер, если он доступен.
Конфигурация для SeaCache.
SeaCache отключён по умолчанию и активируется только после передачи этой конфигурации в transformer.enable_cache(config).
SeaCache сравнивает индикаторы Spectral-Evolution-Aware (SEA) между шагами планировщика. Если их накопленное относительное изменение остается ниже threshold, повторяющаяся стопка блоков трансформера заменяется кэшированным остатком. Адаптеры, специфичные для модели, могут расширять границу остатка за пределы этих блоков. Другие видео-трансформеры могут использовать универсальный путь, зарегистрировав метаданные своих блоков и предоставив raw_vision_callback; их конвейер должен входить в cache_context для каждой траектории трансформера.
Пример:
>>> from diffusers import Cosmos3OmniPipeline, SeaCacheConfig
>>> pipe = Cosmos3OmniPipeline.from_pretrained("nvidia/Cosmos3-Nano")
>>> pipe.transformer.enable_cache(SeaCacheConfig())
diffusers.apply_sea_cache[[diffusers.apply_sea_cache]]
diffusers.apply_sea_cache(module: Module, config: SeaCacheConfig)
Параметры:
module (torch.nn.Module) : модуль Transformer для кэширования.
config (SeaCacheConfig) : конфигурация SeaCache.
Примените SeaCache к поддерживаемому трансформеру.
SeaCache повторно использует кэшированный остаток для повторяющейся стековой структуры блоков трансформера. Адаптеры модели могут настраивать извлечение индикаторов и границу остатка; общий путь использует зарегистрированные метаданные блоков и raw_vision_callback. Параметры совместимости и кэширования необходимо проверять для каждой модели.
Xet Storage Details
- Size:
- 47.4 kB
- Xet hash:
- f7274a15ec4053a23bc140b7e1308382e8f22fdffec7e20bd68c8e62b961bcd5
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.