Diffusers documentation

PEFT

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

PEFT

Diffusers admite la carga de adaptadores como LoRA con la biblioteca PEFT mediante la clase PeftAdapterMixin. Esto permite que las clases de modelado de Diffusers, como UNet2DConditionModel y SD3Transformer2DModel, funcionen con un adaptador.

Consulte el tutorial Inference with PEFT para obtener una visión general de cómo usar PEFT en Diffusers para inferencia.

PeftAdapterMixin

clase diffusers.loaders.PeftAdapterMixin

< >

( )

Una clase que contiene todas las funciones para cargar y usar pesos de adaptadores compatibles con la biblioteca PEFT. Para más detalles sobre los adaptadores y su inyección en un modelo base, consulte la documentación de PEFT.

Instale la última versión de PEFT y use este mixin para:

  • Adjuntar nuevos adaptadores en el modelo.
  • Adjunte varios adaptadores y actívelos/desactívelos de forma iterativa.
  • Activar/desactivar todos los adaptadores del modelo.
  • Obtén una lista de los adaptadores activos.

active_adapters

< >

( )

Obtiene la lista actual de adaptadores activos del modelo.

Si no está familiarizado con los adaptadores y los métodos PEFT, le invitamos a leer más sobre ellos en la documentación de PEFT.

add_adapter

< >

( adapter_configadapter_name: str = 'default' )

Parámetros

  • adapter_config ([~peft.PeftConfig]) — La configuración del adaptador a añadir; los adaptadores admitidos son los métodos de ajuste no prefijo y de prompt de adaptación.
  • adapter_name (str, opcional, por defecto "default") — El nombre del adaptador que se va a añadir. Si no se pasa ningún nombre, se asigna un nombre predeterminado al adaptador.

Añade un nuevo adaptador al modelo actual para el entrenamiento. Si no se pasa un nombre de adaptador, se asigna un nombre predeterminado al adaptador para seguir la convención de la biblioteca PEFT.

Si no está familiarizado con los adaptadores y los métodos PEFT, le invitamos a leer más sobre ellos en la documentación de PEFT.

delete_adapters

< >

( adapter_names: list[str] | str )

Parámetros

  • adapter_names (list[str, str]) — Los nombres (cadena única o lista de cadenas) del adaptador que se debe eliminar.

Eliminar las capas LoRA de un adaptador del modelo subyacente.

Ejemplo:

from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
    "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_names="cinematic"
)
pipeline.unet.delete_adapters("cinematic")

disable_adapters

< >

( )

Desactive todos los adaptadores adjuntos al modelo y vuelva a la inferencia con solo el modelo base.

Si no está familiarizado con los adaptadores y los métodos PEFT, le invitamos a leer más sobre ellos en la documentación de PEFT.

disable_lora

< >

( )

Desactiva las capas LoRA activas del modelo subyacente.

Ejemplo:

from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
    "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.unet.disable_lora()

enable_adapters

< >

( )

Habilita los adaptadores que están unidos al modelo. El modelo utiliza self.active_adapters() para obtener la lista de adaptadores que se habilitarán.

Si no está familiarizado con los adaptadores y los métodos PEFT, le invitamos a leer más sobre ellos en la documentación de PEFT.

enable_lora

< >

( )

Habilita las capas LoRA activas del modelo subyacente.

Ejemplo:

from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
    "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.unet.enable_lora()

enable_lora_hotswap

< >

( target_rank: int = 128check_compiled: typing.Literal['error', 'warn', 'ignore'] = 'error' )

Parámetros

  • target_rank (int, opcional, valor predeterminado 128) — El rango más alto entre todos los adaptadores que se cargarán.
  • check_compiled (str, opcional, por defecto "error") — Cómo manejar el caso en que el modelo ya está compilado, algo que generalmente se debe evitar. Las opciones son:
    • “error” (predeterminado): lanza un error
    • “warn”: emitir una advertencia
    • “ignore”: no hacer nada

Permite la posibilidad de intercambiar adaptadores LoRA en caliente.

La llamada a este método solo es necesaria al intercambiar adaptadores en caliente y si el modelo está compilado o si los rangos de los adaptadores cargados difieren.

load_lora_adapter

< >

( pretrained_model_name_or_path_or_dictprefix = 'transformer'hotswap: bool = False**kwargs )

Parámetros

  • pretrained_model_name_or_path_or_dict (str o os.PathLike o dict) — Puede ser:
    • Una cadena de texto, el model id (por ejemplo, google/ddpm-celebahq-256) de un modelo preentrenado alojado en el Hub.
    • Una ruta a un directorio (por ejemplo, ./my_model_directory) que contiene los pesos del modelo guardados con ModelMixin.save_pretrained().
    • Un diccionario de estado de torch.
  • prefix (str, opcional) — Prefijo para filtrar el state dict.
  • cache_dir (str | os.PathLike, opcional) — Ruta a un directorio donde se almacena en caché la configuración de un modelo preentrenado descargado si no se utiliza la caché estándar.
  • force_download (bool, opcional, valor predeterminado False) — Indica si se debe forzar la (re)descarga de los pesos del modelo y los archivos de configuración, ignorando las versiones en caché si existen.
  • proxies (dict[str, str], opcional) — Un diccionario de servidores proxy a utilizar por protocolo o punto de acceso, por ejemplo, {'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. Los proxies se utilizan en cada solicitud.
  • local_files_only (bool, opcional, valor predeterminado False) — Indica si se deben cargar únicamente los pesos y archivos de configuración del modelo locales. Si se establece en True, el modelo no se descargará desde el Hub.
  • token (str o bool, opcional) — El token que se usará como autorización HTTP bearer para los archivos remotos. Si True, se utiliza el token generado desde diffusers-cli login (almacenado en ~/.huggingface).
  • revision (str, opcional, valor predeterminado "main") — La versión específica del modelo que se va a utilizar. Puede ser el nombre de una rama, el nombre de una etiqueta, un id de commit o cualquier identificador permitido por Git.
  • subfolder (str, opcional, por defecto "") — La ubicación de la subcarpeta de un archivo de modelo dentro de un repositorio de modelos más grande en el Hub o localmente.
  • network_alphas (dict[str, float]) — El valor de la alfa de la red utilizado para un aprendizaje estable y para evitar el underflow. Este valor tiene el mismo significado que la opción --network_alpha en el script de entrenamiento de kohya-ss. Consulte este enlace.
  • low_cpu_mem_usage (bool, opcional) — Acelera la carga del modelo cargando solo los pesos LoRA preentrenados y no inicializando los pesos aleatorios.
  • hotswap — (bool, opcional) Por defecto es False. Si se debe sustituir un adaptador (LoRA) existente por el adaptador recién cargado en su lugar. Esto significa que, en lugar de cargar un adaptador adicional, se tomarán los pesos del adaptador existente y se reemplazarán con los pesos del nuevo adaptador. Esto puede ser más rápido y eficiente en memoria. Sin embargo, la principal ventaja del hotswap es que, cuando el modelo se compila con torch.compile, la carga del nuevo adaptador no requiere recompilar el modelo. Al usar hotswap, el adapter_name debe ser el nombre de un adaptador ya cargado. Si el nuevo adaptador y el antiguo tienen rangos y/o alphas de LoRA (es decir, escalado) diferentes, es necesario llamar a un método adicional antes de cargar el adaptador: pipeline = ... # carga el pipeline de diffusers max_rank = ... # el rango más alto entre todos los LoRAs que se desean cargar # llamar *antes* de compilar y cargar el adaptador LoRA pipeline.enable_lora_hotswap(target_rank=max_rank) pipeline.load_lora_weights(file_name) # opcionalmente, compilar el modelo ahora Tenga en cuenta que el hotswap de adaptadores del codificador de texto aún no se admite. Esta técnica tiene algunas limitaciones adicionales, documentadas aquí: https://huggingface.co/docs/peft/main/en/package_reference/hotswap

    Si el nuevo adaptador y el antiguo tienen rangos y/o alfas LoRA (es decir, escalado) diferentes, necesitas llamar a un método adicional antes de cargar el adaptador:

    pipeline = ...  # load diffusers pipeline
    max_rank = ...  # the highest rank among all LoRAs that you want to load
    # call *before* compiling and loading the LoRA adapter
    pipeline.enable_lora_hotswap(target_rank=max_rank)
    pipeline.load_lora_weights(file_name)
    # optionally compile the model now

    Tenga en cuenta que el intercambio en caliente de adaptadores del codificador de texto aún no es compatible. Esta técnica tiene algunas limitaciones adicionales, que se documentan aquí: https://huggingface.co/docs/peft/main/en/package_reference/hotswap

  • metadata — Metadatos del adaptador LoRA. Cuando se proporciona, los metadatos inferidos a través del state dict no se utilizan para inicializar LoraConfig.

Carga un adaptador LoRA en el modelo subyacente.

save_lora_adapter

< >

( save_directoryadapter_name: str = 'default'upcast_before_saving: bool = Falsesafe_serialization: bool = Trueweight_name: str | None = None )

Parámetros

  • save_directory (str o os.PathLike) — Directorio donde se guardarán los parámetros de LoRA. Se creará si no existe.
  • adapter_name — (str, por defecto “default”): El nombre del adaptador que se va a serializar. Útil cuando el modelo subyacente tiene varios adaptadores cargados.
  • upcast_before_saving (bool, por defecto False) — Si se debe convertir el modelo subyacente a torch.float32 antes de la serialización.
  • safe_serialization (bool, opcional, valor predeterminado True) — Si se guarda el modelo usando safetensors o de la forma tradicional de PyTorch con pickle.
  • weight_name — (str, opcional, valor predeterminado None): Nombre del archivo con el que serializar el state dict.

Guarde los parámetros de LoRA correspondientes al modelo subyacente.

set_adapter

< >

( adapter_name: str | list[str] )

Parámetros

  • adapter_name (str | list[str])) — La lista de adaptadores a establecer o el nombre del adaptador en el caso de un solo adaptador.

Establece un adaptador específico forzando al modelo a usar solo ese adaptador y desactivando los demás.

Si no está familiarizado con los adaptadores y los métodos PEFT, le invitamos a leer más sobre ellos en la documentación de PEFT.

set_adapters

< >

( adapter_names: list[str] | strweights: float | dict | list[float] | list[dict] | list[None] | None = None )

Parámetros

  • adapter_names (list[str] o str) — Los nombres de los adaptadores a utilizar.
  • weights (Union[List[float], float], opcional) — Los pesos del adaptador o adaptadores que se usarán con el UNet. Si es None, los pesos se establecen en 1.0 para todos los adaptadores.

Establece los adaptadores actualmente activos para su uso en la red de difusión (p. ej., unet, transformer, etc.).

Ejemplo:

from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
    "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.load_lora_weights("nerijs/pixel-art-xl", weight_name="pixel-art-xl.safetensors", adapter_name="pixel")
pipeline.unet.set_adapters(["cinematic", "pixel"], weights=[0.5, 0.5])
Update on GitHub