Diffusers documentation
PEFT
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
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.
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
< source >( 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
< source >( adapter_names: list[str] | str )
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")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.
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()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.
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
< source >( target_rank: int = 128check_compiled: typing.Literal['error', 'warn', 'ignore'] = 'error' )
Parámetros
- target_rank (
int, opcional, valor predeterminado128) — 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
< source >( pretrained_model_name_or_path_or_dictprefix = 'transformer'hotswap: bool = False**kwargs )
Parámetros
- pretrained_model_name_or_path_or_dict (
stroos.PathLikeodict) — 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.
- Una cadena de texto, el model id (por ejemplo,
- 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 predeterminadoFalse) — 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 predeterminadoFalse) — Indica si se deben cargar únicamente los pesos y archivos de configuración del modelo locales. Si se establece enTrue, el modelo no se descargará desde el Hub. - token (
stro bool, opcional) — El token que se usará como autorización HTTP bearer para los archivos remotos. SiTrue, se utiliza el token generado desdediffusers-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_alphaen 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 esFalse. 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, eladapter_namedebe 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/hotswapSi 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 nowTenga 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
< source >( save_directoryadapter_name: str = 'default'upcast_before_saving: bool = Falsesafe_serialization: bool = Trueweight_name: str | None = None )
Parámetros
- save_directory (
stroos.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 defectoFalse) — Si se debe convertir el modelo subyacente atorch.float32antes de la serialización. - safe_serialization (
bool, opcional, valor predeterminadoTrue) — Si se guarda el modelo usandosafetensorso de la forma tradicional de PyTorch conpickle. - weight_name — (
str, opcional, valor predeterminadoNone): Nombre del archivo con el que serializar el state dict.
Guarde los parámetros de LoRA correspondientes al modelo subyacente.
set_adapter
< source >( adapter_name: str | list[str] )
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
< source >( adapter_names: list[str] | strweights: float | dict | list[float] | list[dict] | list[None] | None = None )
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])