Diffusers documentation
PEFT
PEFT
Diffusers prend en charge le chargement d'adaptateurs tels que LoRA avec la bibliothèque PEFT grâce à la classe PeftAdapterMixin. Cela permet aux classes de modélisation de Diffusers comme UNet2DConditionModel et SD3Transformer2DModel de fonctionner avec un adaptateur.
Reportez-vous au tutoriel Inference with PEFT pour un aperçu de l’utilisation de PEFT dans Diffusers pour l’inférence.
PeftAdapterMixin
Une classe contenant toutes les fonctions pour charger et utiliser les poids des adaptateurs pris en charge par la bibliothèque PEFT. Pour plus de détails sur les adaptateurs et leur injection dans un modèle de base, consultez la documentation de PEFT.
Installez la dernière version de PEFT et utilisez ce mixin pour :
- Attacher de nouveaux adaptateurs au modèle.
- Attachez plusieurs adaptateurs et activez/désactivez-les de manière itérative.
- Activer/désactiver tous les adaptateurs du modèle.
- Obtenir la liste des adaptateurs actifs.
Renvoie la liste actuelle des adaptateurs actifs du modèle.
Si vous n'êtes pas familier avec les adaptateurs et les méthodes PEFT, nous vous invitons à en savoir plus sur eux dans la documentation PEFT.
add_adapter
< source >( adapter_configadapter_name: str = 'default' )
Paramètres
- adapter_config (
[~peft.PeftConfig]) — La configuration de l’adaptateur à ajouter ; les adaptateurs pris en charge sont les méthodes de non-prefix tuning et de adaption prompt. - adapter_name (
str, facultatif, par défaut"default") — Le nom de l’adaptateur à ajouter. Si aucun nom n’est transmis, un nom par défaut est attribué à l’adaptateur.
Ajoute un nouvel adaptateur au modèle actuel pour l'entraînement. Si aucun nom d'adaptateur n'est transmis, un nom par défaut est attribué à l'adaptateur afin de respecter la convention de la bibliothèque PEFT.
Si vous n'êtes pas familier avec les adaptateurs et les méthodes PEFT, nous vous invitons à en savoir plus dans la documentation PEFT.
delete_adapters
< source >( adapter_names: list[str] | str )
Supprimer les couches LoRA d’un adaptateur du modèle sous-jacent.
Exemple :
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")Désactiver tous les adaptateurs attachés au modèle et revenir à l’inférence avec le modèle de base uniquement.
Si vous n'êtes pas familier avec les adaptateurs et les méthodes PEFT, nous vous invitons à en savoir plus sur eux dans la documentation PEFT.
Désactive les couches LoRA actives du modèle sous-jacent.
Exemple :
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()Active les adaptateurs attachés au modèle. Le modèle utilise self.active_adapters() pour récupérer la liste des adaptateurs à activer.
Si vous n'êtes pas familier avec les adaptateurs et les méthodes PEFT, nous vous invitons à en savoir plus sur eux dans la documentation PEFT.
Active les couches LoRA actives du modèle sous-jacent.
Exemple :
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' )
Paramètres
- target_rank (
int, facultatif, par défaut128) — Le rang le plus élevé parmi tous les adaptateurs qui seront chargés. - check_compiled (
str, facultatif, valeur par défaut"error") — Comment gérer le cas où le modèle est déjà compilé, ce qui devrait généralement être évité. Les options sont :- « error » (par défaut) : lever une erreur
- “warn” : émettre un avertissement
- “ignore” : ne rien faire
Permet de remplacer à chaud les adaptateurs LoRA.
L'appel de cette méthode n'est requis que lors du remplacement à chaud des adaptateurs et si le modèle est compilé ou si les rangs des adaptateurs chargés diffèrent.
load_lora_adapter
< source >( pretrained_model_name_or_path_or_dictprefix = 'transformer'hotswap: bool = False**kwargs )
Paramètres
- pretrained_model_name_or_path_or_dict (
strouos.PathLikeoudict) — Peut être l'un des éléments suivants :- Une chaîne de caractères, l'identifiant du modèle (par exemple
google/ddpm-celebahq-256) d'un modèle pré-entraîné hébergé sur le Hub. - Un chemin vers un dossier (par exemple
./my_model_directory) contenant les poids du modèle enregistrés avec ModelMixin.save_pretrained(). - Un dictionnaire d'état torch.
- Une chaîne de caractères, l'identifiant du modèle (par exemple
- prefix (
str, facultatif) — Préfixe pour filtrer le dictionnaire d'état. - cache_dir (
str | os.PathLike, facultatif) — Chemin vers un répertoire où la configuration d'un modèle pré-entraîné téléchargé est mise en cache si le cache standard n'est pas utilisé. - force_download (
bool, facultatif, par défautFalse) — Indique s'il faut forcer le (re)téléchargement des poids du modèle et des fichiers de configuration, en ignorant les versions mises en cache si elles existent. - proxies (
dict[str, str], facultatif) — Un dictionnaire de serveurs proxy à utiliser par protocole ou point de terminaison, par exemple,{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. Les proxys sont utilisés pour chaque requête. - local_files_only (
bool, facultatif, par défautFalse) — Indique s'il faut charger uniquement les poids et les fichiers de configuration du modèle en local. Si défini surTrue, le modèle ne sera pas téléchargé depuis le Hub. - token (
strou bool, facultatif) — Le jeton à utiliser comme autorisation bearer HTTP pour les fichiers distants. SiTrue, le jeton généré pardiffusers-cli login(stocké dans~/.huggingface) est utilisé. - revision (
str, facultatif, par défaut"main") — La version spécifique du modèle à utiliser. Il peut s’agir d’un nom de branche, d’un nom de tag, d’un identifiant de commit ou de tout identifiant autorisé par Git. - subfolder (
str, facultatif, par défaut"") — L’emplacement du sous-dossier d’un fichier de modèle au sein d’un dépôt de modèle plus large sur le Hub ou en local. - network_alphas (
dict[str, float]) — La valeur de l'alpha du réseau utilisée pour un apprentissage stable et pour prévenir le sous-débordement. Cette valeur a la même signification que l'option--network_alphadu script d'entraînement kohya-ss. Consultez ce lien. - low_cpu_mem_usage (
bool, facultatif) — Accélère le chargement du modèle en ne chargeant que les poids LoRA préentraînés et sans initialiser les poids aléatoires. - hotswap — (
bool, facultatif) Valeur par défaut :False. Indique s'il faut substituer un adaptateur (LoRA) existant par l'adaptateur nouvellement chargé, en place. Cela signifie que, au lieu de charger un adaptateur supplémentaire, les poids de l'adaptateur existant seront remplacés par ceux du nouvel adaptateur. Cela peut être plus rapide et plus efficace en termes de mémoire. Cependant, l'avantage principal du hotswap est que, lorsque le modèle est compilé avec torch.compile, le chargement du nouvel adaptateur ne nécessite pas de recompiler le modèle. Lors de l'utilisation du hotswap, leadapter_namedoit être le nom d'un adaptateur déjà chargé.Si le nouvel adaptateur et l’ancien adaptateur ont des rangs et/ou des alphas LoRA (c.-à-d. un facteur d’échelle) différents, vous devez appeler une méthode supplémentaire avant de charger l’adaptateur :
Charge un adaptateur LoRA dans le modèle sous-jacent.
save_lora_adapter
< source >( save_directoryadapter_name: str = 'default'upcast_before_saving: bool = Falsesafe_serialization: bool = Trueweight_name: str | None = None )
Paramètres
- save_directory (
strouos.PathLike) — Répertoire dans lequel enregistrer les paramètres LoRA. Sera créé s'il n'existe pas. - adapter_name — (
str, par défaut “default”) : Le nom de l’adaptateur à sérialiser. Utile lorsque le modèle sous-jacent a plusieurs adaptateurs chargés. - upcast_before_saving (
bool, par défautFalse) — Indique s'il faut convertir le modèle sous-jacent entorch.float32avant la sérialisation. - safe_serialization (
bool, facultatif, par défautTrue) — Indique si le modèle doit être enregistré en utilisantsafetensorsou la méthode traditionnelle de PyTorch avecpickle. - weight_name — (
str, facultatif, par défautNone) : Nom du fichier avec lequel sérialiser le state dict.
Enregistrez les paramètres LoRA correspondant au modèle sous-jacent.
set_adapter
< source >( adapter_name: str | list[str] )
Définit un adaptateur spécifique en forçant le modèle à n'utiliser que cet adaptateur et en désactivant les autres adaptateurs.
Si vous n'êtes pas familier avec les adaptateurs et les méthodes PEFT, nous vous invitons à en savoir plus sur eux dans la documentation PEFT.
set_adapters
< source >( adapter_names: list[str] | strweights: float | dict | list[float] | list[dict] | list[None] | None = None )
Définir les adaptateurs actuellement actifs pour leur utilisation dans le réseau de diffusion (par exemple, unet, transformer, etc.).
Exemple :
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])