Diffusers documentation
Métodos de caché
Métodos de caché
Los métodos de caché aceleran los transformadores de difusión almacenando y reutilizando las salidas intermedias de capas específicas, como las capas de atención y las capas de avance, en lugar de recalcularlas en cada paso de inferencia.
CacheMixin
Una clase para habilitar/deshabilitar técnicas de caché en modelos de difusión.
Técnicas de caché admitidas:
Gestor de contexto que proporciona información para la gestión de la caché.
name es el nombre de la llamada de desruido, normalmente "cond" o "uncond". Los argumentos de palabra clave describen en qué punto
se encuentra el bucle de desruido; consulte CacheContext para los campos aceptados, por ejemplo, cache_context("cond", step_index=i, sigma=sigma).
enable_cache
< source >( config )
Parámetros
- config (
PyramidAttentionBroadcastConfig | FasterCacheConfig | FirstBlockCacheConfig | SeaCacheConfig | TextKVCacheConfig) — La configuración para aplicar la técnica de caché. Las técnicas de caché actualmente admitidas son:- PyramidAttentionBroadcastConfig
- FasterCacheConfig
- FirstBlockCacheConfig
- SeaCacheConfig
TextKVCacheConfig
Habilite técnicas de caché en el modelo.
Ejemplo:
>>> 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
clase 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 )
Parámetros
- spatial_attention_block_skip_range (
int, opcional, valor predeterminadoNone) — El número de veces que se omite una difusión específica de atención espacial antes de calcular los estados de atención para reutilizarlos. Si se establece en el valorN, el cálculo de la atención se omitiráN - 1veces (es decir, se reutilizarán los estados de atención anteriores) antes de calcular nuevamente los nuevos estados de atención. - temporal_attention_block_skip_range (
int, opcional, valor predeterminadoNone) — El número de veces que se omite una difusión específica de atención temporal antes de calcular los estados de atención para reutilizar. Si se establece en el valorN, el cálculo de la atención se omitiráN - 1veces (es decir, se reutilizarán los estados de atención antiguos) antes de calcular nuevamente los nuevos estados de atención. - cross_attention_block_skip_range (
int, opcional, valor predeterminadoNone) — El número de veces que se omite una difusión específica de atención cruzada antes de calcular los estados de atención para reutilizarlos. Si se establece en el valorN, el cálculo de la atención se omitiráN - 1veces (es decir, se reutilizarán los estados de atención anteriores) antes de calcular nuevamente los nuevos estados de atención. - spatial_attention_timestep_skip_range (
tuple[int, int], por defecto(100, 800)) — El rango de pasos temporales que se omitirán en la capa de atención espacial. Los cálculos de atención se omitirán condicionalmente si el paso temporal actual se encuentra dentro del rango especificado. - temporal_attention_timestep_skip_range (
tuple[int, int], por defecto(100, 800)) — El rango de pasos temporales que se omitirán en la capa de atención temporal. Los cálculos de atención se omitirán condicionalmente si el paso temporal actual se encuentra dentro del rango especificado. - cross_attention_timestep_skip_range (
tuple[int, int], por defecto(100, 800)) — El rango de timesteps que se omitirá en la capa de cross-attention. Los cálculos de atención se omitirán condicionalmente si el timestep actual se encuentra dentro del rango especificado. - spatial_attention_block_identifiers (
tuple[str, ...]) — Los identificadores para comparar con los nombres de las capas y determinar si la capa es una capa de atención espacial. - temporal_attention_block_identifiers (
tuple[str, ...]) — Los identificadores que se comparan con los nombres de las capas para determinar si la capa es una capa de atención temporal. - cross_attention_block_identifiers (
tuple[str, ...]) — Los identificadores que se comparan con los nombres de las capas para determinar si la capa es una capa de atención cruzada.
Configuración para la difusión de atención piramidal.
diffusers.apply_pyramid_attention_broadcast
< source >( module: Moduleconfig: PyramidAttentionBroadcastConfig )
Aplicar Pyramid Attention Broadcast a un pipeline dado.
PAB es un método de aproximación de atención que aprovecha la similitud en los estados de atención entre pasos de tiempo para reducir el costo computacional del cálculo de atención. La conclusión clave del artículo es que la similitud de atención en las capas de atención cruzada entre pasos de tiempo es alta, seguida de una menor similitud en las capas temporales y espaciales. Esto permite omitir el cálculo de atención en las capas de atención cruzada con mayor frecuencia que en las capas temporales y espaciales. Por lo tanto, aplicar PAB acelerará el proceso de inferencia.
Ejemplo:
>>> 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
clase 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') )
Parámetros
- spatial_attention_block_skip_range (
int, valor predeterminado2) — Calcula los estados de atención cadaNiteraciones. Si se establece enN, el cálculo de la atención se omitiráN - 1veces (es decir, se reutilizarán los estados de atención en caché) antes de calcular nuevamente los nuevos estados de atención. - temporal_attention_block_skip_range (
int, opcional, valor predeterminadoNone) — Calcula los estados de atención cadaNiteraciones. Si se establece enN, el cálculo de la atención se omitiráN - 1veces (es decir, se reutilizarán los estados de atención en caché) antes de calcular nuevamente los nuevos estados de atención. - spatial_attention_timestep_skip_range (
tuple[float, float], por defecto(-1, 681)) — El rango de pasos de tiempo (timesteps) dentro del cual se puede omitir el cálculo de la atención espacial sin una pérdida significativa de calidad. Esto debe determinarse por el usuario en función del modelo subyacente. El primer valor de la tupla es el límite inferior y el segundo valor es el límite superior. Típicamente, los pasos de tiempo de difusión para el desruido (denoising) están en el rango inverso de 0 a 1000 (es decir, el desruido comienza en el paso 1000 y termina en el paso 0). Para los valores por defecto, esto significaría que la omisión del cálculo de la atención espacial solo sería aplicable después de alcanzar el paso de desruido 681, y continuaría hasta el final del proceso de desruido. - temporal_attention_timestep_skip_range (
tuple[float, float], opcional, valor predeterminadoNone) — El rango de pasos de tiempo (timesteps) dentro del cual se puede omitir el cálculo de la atención temporal sin una pérdida significativa de calidad. Esto debe determinarse por el usuario en función del modelo subyacente. El primer valor de la tupla es el límite inferior y el segundo valor es el límite superior. Por lo general, los pasos de tiempo de difusión para el desruido (denoising) están en el rango inverso de 0 a 1000 (es decir, el desruido comienza en el paso 1000 y termina en el paso 0). - low_frequency_weight_update_timestep_range (
tuple[int, int], por defecto(99, 901)) — El rango de pasos de tiempo en el que se aplica la actualización de la escalación de pesos de baja frecuencia. El primer valor de la tupla es el límite inferior y el segundo valor es el límite superior del rango de pasos de tiempo. La función de callback para la actualización se llama solo dentro de este rango. - high_frequency_weight_update_timestep_range (
tuple[int, int], por defecto(-1, 301)) — El rango de pasos de tiempo en el que se aplica la actualización de la escalada de pesos de alta frecuencia. El primer valor de la tupla es el límite inferior y el segundo valor es el límite superior del rango de pasos de tiempo. La función de callback para la actualización se llama solo dentro de este rango. - alpha_low_frequency (
float, por defecto1.1) — El peso para escalar las actualizaciones de baja frecuencia. Se utiliza para aproximar la rama incondicional a partir de las salidas de la rama condicional. - alpha_high_frequency (
float, por defecto1.1) — El peso para escalar las actualizaciones de alta frecuencia. Se utiliza para aproximar la rama incondicional a partir de las salidas de la rama condicional. - unconditional_batch_skip_range (
int, por defecto5) — Procesa la rama incondicional cadaNiteraciones. Si se establece enN, el cálculo de la rama incondicional se omitiráN - 1veces (es decir, se reutilizarán los estados de la rama incondicional en caché) antes de calcular nuevamente los nuevos estados de la rama incondicional. - unconditional_batch_timestep_skip_range (
tuple[float, float], por defecto(-1, 641)) — El rango de pasos de tiempo dentro del cual se puede omitir el cálculo de la rama incondicional sin una pérdida significativa de calidad. Esto debe determinarse por el usuario en función del modelo subyacente. El primer valor de la tupla es el límite inferior y el segundo valor es el límite superior. - spatial_attention_block_identifiers (
tuple[str, ...], por defecto("blocks.*attn1", "transformer_blocks.*attn1", "single_transformer_blocks.*attn1")) — Los identificadores para hacer coincidir los bloques de atención espacial en el modelo. Si el nombre del bloque contiene alguno de estos identificadores, se aplicará FasterCache a ese bloque. Esto puede ser el nombre completo de la capa, nombres parciales de capa o patrones de expresión regular. La coincidencia siempre se realizará mediante una coincidencia de expresión regular. - temporal_attention_block_identifiers (
tuple[str, ...], por defecto("temporal_transformer_blocks.*attn1",)) — Los identificadores para hacer coincidir los bloques de atención temporal en el modelo. Si el nombre del bloque contiene alguno de estos identificadores, se aplicará FasterCache a ese bloque. Esto puede ser el nombre completo de la capa, un nombre parcial de la capa o patrones de expresión regular. La coincidencia siempre se realizará mediante una coincidencia de expresión regular. - attention_weight_callback (
Callable[[torch.nn.Module], float], por defectoNone) — La función de callback para determinar el peso con el que se escalan las salidas de atención. Esta función debe recibir el módulo de atención como entrada y devolver un valor de tipo float. Se utiliza para aproximar la rama incondicional a partir de las salidas de la rama condicional. Si no se proporciona, el peso por defecto es 0.5 para todos los pasos de tiempo. Típicamente, tal como se describe en el artículo, este peso debe aumentar gradualmente de 0 a 1 a medida que avanza la inferencia. Se anima a los usuarios a experimentar y proporcionar programaciones de pesos personalizadas que tengan en cuenta el número de pasos de inferencia y el comportamiento del modelo subyacente a medida que avanza el desruido. - low_frequency_weight_callback (
Callable[[torch.nn.Module], float], por defectoNone) — La función de callback para determinar el peso con el que se escalan las actualizaciones de baja frecuencia. Si no se proporciona, el peso por defecto es 1.1 para los pasos de tiempo dentro del rango especificado (tal como se describe en el artículo). - high_frequency_weight_callback (
Callable[[torch.nn.Module], float], por defectoNone) — La función de callback para determinar el peso con el que se escalan las actualizaciones de alta frecuencia. Si no se proporciona, el peso por defecto es 1.1 para los pasos de tiempo dentro del rango especificado (tal como se describe en el artículo). - tensor_format (
str, por defecto"BCFHW") — El formato de los tensores de entrada. Debe ser uno de"BCFHW","BFCHW"o"BCHW". El formato se utiliza para dividir los fotogramas latentes individuales a fin de calcular las componentes de baja y alta frecuencia. - is_guidance_distilled (
bool, por defectoFalse) — Indica si el modelo es de destilación de guía o no. Si el modelo es de destilación de guía, FasterCache no se aplicará a nivel de denoiser para omitir el cálculo de la rama incondicional (ya que no existe). - _unconditional_conditional_input_kwargs_identifiers (
list[str], por defecto("hidden_states", "encoder_hidden_states", "timestep", "attention_mask", "encoder_attention_mask")) — Los identificadores para hacer coincidir los kwargs de entrada que contienen las entradas incondicionales y condicionales concatenadas por lote. Si el nombre de los kwargs de entrada contiene alguno de estos identificadores, FasterCache dividirá las entradas en ramas incondicional y condicional. Esto debe ser una lista de nombres exactos de kwargs de entrada que contienen las entradas incondicionales y condicionales concatenadas por lote.
Configuración para FasterCache.
diffusers.apply_faster_cache
< source >( module: Moduleconfig: FasterCacheConfig )
Parámetros
- module (
torch.nn.Module) — El módulo de pytorch al que se aplicará FasterCache. Por lo general, debe ser una arquitectura de transformer compatible con Diffusers, comoCogVideoXTransformer3DModel, aunque también pueden funcionar implementaciones externas. - config (
FasterCacheConfig) — La configuración a utilizar para FasterCache.
Aplica FasterCache a un pipeline dado.
Ejemplo:
>>> 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
clase diffusers.FirstBlockCacheConfig
< source >( threshold: float = 0.05 )
Parámetros
- threshold (
float, por defecto0.05) — El umbral para determinar si se requiere o no una pasada hacia adelante a través de todas las capas del modelo. Un umbral más alto suele dar como resultado una pasada hacia adelante a través de un menor número de capas y una inferencia más rápida, pero puede llevar a una menor calidad de generación. Un umbral más bajo puede no resultar en una aceleración significativa de la generación. El umbral se compara con la diferencia absmean de los residuos entre las salidas actuales y las salidas en caché del primer bloque transformer. Si la diferencia es inferior al umbral, se omite la pasada hacia adelante.
Configuración para First Block Cache.
diffusers.apply_first_block_cache
< source >( module: Moduleconfig: FirstBlockCacheConfig )
Parámetros
- module (
torch.nn.Module) — El módulo de pytorch al que se aplicará FBCache. Por lo general, debe ser una arquitectura de transformer compatible con Diffusers, comoCogVideoXTransformer3DModel, aunque también pueden funcionar implementaciones externas. - config (
FirstBlockCacheConfig) — La configuración que se utilizará para aplicar el método FBCache.
Aplica First Block Cache a un módulo dado.
First Block Cache se basa en las ideas de TeaCache. Es mucho más sencillo de implementar de forma genérica para una amplia gama de modelos y se ha integrado primero con fines experimentales.
Ejemplo:
>>> 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
clase 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 )
Parámetros
- cache_interval (
int, por defecto5) — El intervalo entre pasos de cálculo completos. Después de un cálculo completo, las salidas en caché (predichas) se reutilizan durante este número de pasos de desruido posteriores antes de actualizarse con una nueva pasada completa hacia adelante. - disable_cache_before_step (
int, valor predeterminado3) — El índice del paso de desruido antes del cual se desactiva la caché, lo que significa que se realiza un cálculo completo para los pasos iniciales (de 0 a disable_cache_before_step - 1) para recopilar datos para las aproximaciones de la serie de Taylor. Durante estos pasos, se actualizan los factores de Taylor, pero no se aplican la caché ni las predicciones. La caché comienza en este paso. - disable_cache_after_step (
int, opcional, valor predeterminadoNone) — El índice del paso de desruido a partir del cual se desactiva la caché. Si se establece, para los pasos >= a este valor, todos los módulos ejecutan cálculos completos sin predicciones ni actualizaciones de estado, garantizando la precisión en las etapas posteriores si es necesario. - max_order (
int, por defecto1) — El orden más alto en la expansión de la serie de Taylor para aproximar las salidas del módulo. Los órdenes más altos proporcionan mejores aproximaciones, pero aumentan el uso de cómputo y memoria. - taylor_factors_dtype (
torch.dtype, por defectotorch.bfloat16) — Tipo de datos utilizado para almacenar y calcular los factores de la serie de Taylor. Una precisión más baja reduce la memoria, pero puede afectar la estabilidad; una precisión más alta mejora la exactitud a costa de usar más memoria. - skip_predict_identifiers (
list[str], opcional, valor predeterminadoNone) — Patrones de expresión regular (usandore.fullmatch) para nombres de módulos que se colocarán como “skip” en el modo “cache”. En este modo, el módulo se calcula por completo durante los pasos iniciales o de actualización, pero devuelve un tensor de ceros (que coincide con la forma registrada) durante los pasos de predicción para omitir el cálculo de forma económica. - cache_identifiers (
list[str], opcional, valor predeterminadoNone) — Patrones de expresiones regulares (usandore.fullmatch) para nombres de módulos que se colocarán en el modo de caché de series de Taylor, donde las salidas se aproximan y se almacenan en caché para su reutilización. - use_lite_mode (
bool, opcional, valor predeterminadoFalse) — Habilita una variante ligera de TaylorSeer que minimiza el uso de memoria aplicando patrones predefinidos para omitir y almacenar en caché (p. ej., omitir bloques y almacenar en caché las proyecciones). Esto anula cualquierinactive_identifiersoactive_identifierspersonalizado.
Configuración para la caché TaylorSeer. Ver: https://huggingface.co/papers/2503.06923
Notas:
- Los patrones se coinciden mediante
re.fullmatchen el nombre del módulo. - Si se proporcionan
skip_predict_identifiersocache_identifiers, solo se enganchan los módulos que coincidan. - Si no se proporciona ninguno, todos los módulos de tipo atención se enganchan de forma predeterminada.
Ejemplo de uso inactivo y activo:
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 xUn valor simulado para una ruta con puntos (p. ej. torch.float32): las cadenas de acceso a atributos y las llamadas se comportan como decoradores de paso, repr es la ruta con puntos, y su uso como clase base sustituye una base de type simple (PEP 560 __mro_entries__), de modo que las subclases reales conservan un metaclass normal y inspect.signature lee su __init__ real en lugar del de un simulado.
diffusers.apply_taylorseer_cache
< source >( module: Moduleconfig: TaylorSeerCacheConfig )
Aplica la caché de TaylorSeer a un pipeline dado (típicamente el transformer / UNet).
Esta función conecta los módulos seleccionados del modelo para habilitar el almacenamiento en caché o el omitido de pasos según la configuración proporcionada, reduciendo los cálculos redundantes en los bucles de desruido de difusión.
Ejemplo:
>>> 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
clase 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 )
Parámetros
- threshold (
float, por defecto0.06) — El umbral para el error acumulado. Si el error acumulado es inferior a este umbral, se omite el cálculo del bloque. Un umbral más alto permite un salto más agresivo (más rápido), pero puede degradar la calidad. - max_skip_steps (
int, por defecto3) — El número máximo de pasos consecutivos que se pueden omitir (K en el artículo). - retention_ratio (
float, por defecto0.2) — La fracción de pasos iniciales durante los cuales se desactiva el salto para garantizar la estabilidad. Por ejemplo, sinum_inference_stepses 28 yretention_ratioes 0.2, los primeros 6 pasos nunca se omitirán. - num_inference_steps (
int, por defecto28) — El número de pasos de inferencia utilizados en el pipeline. Esto es necesario para interpolarmag_ratioscorrectamente. - mag_ratios (
torch.Tensor, opcional) — Las relaciones de magnitud precalculadas para el modelo. Estas dependen del checkpoint. Si no se proporcionan, debe establecercalibrate=Truepara calcularlas para su modelo específico. Para los modelos Flux, puede usardiffusers.hooks.mag_cache.FLUX_MAG_RATIOS. - calibrate (
bool, por defectoFalse) — Si es True, habilita el modo de calibración. En este modo, no se omiten bloques. En su lugar, el hook calcula las proporciones de magnitud para la ejecución actual y las registra al final. Utilice esto para obtenermag_ratiospara nuevos modelos o programadores.
Configuración para MagCache.
diffusers.apply_mag_cache
< source >( module: Moduleconfig: MagCacheConfig )
Aplica MagCache a un módulo dado (típicamente un Transformer).
SeaCacheConfig
clase 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 )
Parámetros
- threshold (
float, por defecto0.25) — Presupuesto acumulado de L1 relativo. Valores más grandes reutilizan la caché con más frecuencia. - residual_order (
int, por defecto1) — Orden utilizado para predecir el residual del transformer.0reutiliza directamente el residual más reciente y1extrapola linealmente a partir de las dos ejecuciones completas más recientes. - retention_steps (
int, por defecto1) — Número de pasos iniciales del programador que siempre se ejecutan por completo. - cache_end_steps (
int, por defecto1) — Número de pasos finales del programador que siempre se ejecutan por completo. - max_consecutive_cached (
int, por defecto2) — Máximo número de reutilizaciones consecutivas de residuales por contexto de caché antes de forzar una ejecución completa.0deshabilita el límite. - power_exp (
float, por defecto3.0) — Exponente del prior de potencia de señal limpia de SEA. SeaCache utiliza3.0para las características de video. - raw_vision_callback (
Callable, opcional) — Adaptador de modelo avanzado que devuelve los latentes visuales que forman la salida generada, cada uno con forma(C, T, H, W). Incluye los fotogramas de condicionamiento limpios dentro de la trayectoria de salida, pero excluye las pistas visuales separadas que no forman parte de la salida. Si se omite, se utiliza un adaptador integrado si está disponible.
Configuración para SeaCache.
SeaCache está deshabilitado de forma predeterminada y solo se activa después de pasar esta configuración a transformer.enable_cache(config).
SeaCache compara los indicadores Spectral-Evolution-Aware (SEA) entre pasos del programador. Si su cambio relativo acumulado se mantiene por debajo de threshold, la pila de bloques de transformador repetida se reemplaza con un residual en caché. Los adaptadores específicos del modelo pueden extender el límite del residual más allá de esos bloques. Otros transformadores de video pueden usar la ruta genérica registrando sus metadatos de bloque y proporcionando raw_vision_callback; su pipeline debe entrar en un cache_context para cada trayectoria del transformador.
diffusers.apply_sea_cache
< source >( module: Moduleconfig: SeaCacheConfig )
Aplica SeaCache a un transformador compatible.
SeaCache reutiliza un residual en caché para la pila de bloques repetidos de un transformer. Los adaptadores de modelo pueden personalizar la extracción de indicadores y el límite del residual; la ruta genérica utiliza los metadatos de bloques registrados y raw_vision_callback. Los parámetros de compatibilidad y de caché deben validarse para cada modelo.