Transformers documentation
PEFT
PEFT
Le PeftAdapterMixin fournit les fonctions de la bibliothèque PEFT pour la gestion des adaptateurs avec Transformers. Ce mixin prend en charge toutes les méthodes PEFT non basées sur l’apprentissage de prompts (LoRA, IA3, AdaLoRA, etc.). Les méthodes de préfixe (prompt tuning, prompt learning) ne sont pas prises en charge car elles ne peuvent pas être injectées dans un module torch.
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 basé sur un transformer, consultez la documentation de la bibliothèque PEFT : https://huggingface.co/docs/peft/index
Les méthodes PEFT actuellement prises en charge sont toutes des méthodes d'apprentissage non basées sur les prompts (LoRA, IA³, etc.). D'autres modèles PEFT tels que prompt tuning et prompt learning sont hors périmètre, car ces adaptateurs ne sont pas « injectables » dans un module torch. Pour utiliser ces méthodes, veuillez vous référer au guide d'utilisation de la bibliothèque PEFT.
Avec ce mixin, si la version correcte de PEFT est installée (>= 0.20.0), il est possible de :
- Charger un adaptateur stocké sur un chemin local ou dans un dépôt distant du Hub, et l’injecter dans le modèle
- Attachez de nouveaux adaptateurs au modèle et entraînez-les avec Trainer ou par vous-même.
- Attacher plusieurs adaptateurs et les activer / désactiver de manière itérative
- Activer / désactiver tous les adaptateurs du modèle.
- Obtenir le
state_dictde l'adaptateur actif.
load_adapter
< source >( peft_model_id: str | None = Noneadapter_name: str | None = Nonepeft_config: dict[str, typing.Any] | None = Noneadapter_state_dict: dict[str, 'torch.Tensor'] | None = Nonelow_cpu_mem_usage: bool = Falseis_trainable: bool = Falsehotswap: typing.Union[bool, typing.Literal['auto']] = 'auto'local_files_only: bool = Falseadapter_kwargs: dict[str, typing.Any] | None = Noneload_config: typing.Optional[ForwardRef('LoadStateDictConfig')] = None**kwargs )
Paramètres
- peft_model_id (
str, facultatif) — L’identifiant du modèle à rechercher sur le Hub, ou un chemin local vers le fichier de configuration de l’adaptateur et les poids de l’adaptateur enregistrés. - adapter_name (
str, facultatif) — Le nom de l'adaptateur à utiliser. S'il n'est pas défini, le nom « default » sera utilisé. - load_config (
LoadStateDictConfig, facultatif) — Configuration de chargement à réutiliser lors de la récupération des poids de l’adaptateur, généralement depuisfrom_pretrained. - kwargs (
dict[str, Any], facultatif) — Champs supplémentaires deLoadStateDictConfigpassés en tant qu'arguments nommés. - peft_config (
dict[str, Any], facultatif) — La configuration de l'adaptateur à ajouter. Les adaptateurs pris en charge sont toutes les configurations d'apprentissage non basées sur les prompts (LoRA, IA³, etc.). Cet argument est utilisé lorsque les utilisateurs transmettent directement des dictionnaires d'état PEFT. - adapter_state_dict (
dict[str, torch.Tensor], facultatif) — Le state dict de l’adaptateur à charger. Cet argument est utilisé lorsque les utilisateurs transmettent directement des state dicts PEFT. - low_cpu_mem_usage (
bool, facultatif, valeur par défautFalse) — Réduit l'utilisation de la mémoire lors du chargement de l'adaptateur PEFT. Cela devrait également accélérer le processus de chargement. - is_trainable (
bool, facultatif, par défautFalse) — Indique si l'adaptateur doit être entraînable ou non. SiFalse, l'adaptateur sera figé et ne pourra être utilisé que pour l'inférence. - hotswap — (
"auto"oubool, facultatif, défaut sur"auto") Indique s'il faut substituer un adaptateur (LoRA) existant par l'adaptateur nouvellement chargé sur place. Cela signifie que, au lieu de charger un adaptateur supplémentaire, les poids de l'adaptateur existant sont remplacés par ceux du nouvel adaptateur. Cela peut être plus rapide et plus efficace en 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 :
Chargez les poids de l’adaptateur depuis un fichier ou un dossier distant du Hub. Si vous n’êtes pas familier avec les adaptateurs et les méthodes PEFT, nous vous invitons à en savoir plus dans la documentation officielle de PEFT : https://huggingface.co/docs/peft
Nécessite l’installation de PEFT en tant que backend pour charger les poids de l’adaptateur.
add_adapter
< source >( adapter_configadapter_name: str | None = None )
Paramètres
- adapter_config (
~peft.PeftConfig) — La configuration de l'adaptateur à ajouter. Les adaptateurs pris en charge sont les méthodes d'apprentissage non basées sur les prompts (LoRA, IA³, etc.). - 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.
Si vous n’êtes pas familier avec les adaptateurs et les méthodes PEFT, nous vous invitons à en savoir plus dans la documentation officielle de PEFT : https://huggingface.co/docs/peft
Ajoute un nouvel adaptateur au modèle actuel à des fins d’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 (dans PEFT, « default » est utilisé comme nom d’adaptateur par défaut).
Notez que l'adaptateur nouvellement ajouté n'est pas activé automatiquement. Pour l'activer, utilisez model.set_adapter.
set_adapter
< source >( adapter_name: list[str] | str )
Si vous n’êtes pas familier avec les adaptateurs et les méthodes PEFT, nous vous invitons à en savoir plus dans la documentation officielle de PEFT : https://huggingface.co/docs/peft
Définit un adaptateur spécifique en forçant le modèle à utiliser cet adaptateur et à désactiver les autres adaptateurs.
Si vous n’êtes pas familier avec les adaptateurs et les méthodes PEFT, nous vous invitons à en savoir plus dans la documentation officielle de PEFT : https://huggingface.co/docs/peft
Désactivez tous les adaptateurs attachés au modèle. Cela entraîne une 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 dans la documentation officielle de PEFT : https://huggingface.co/docs/peft
Activer les adaptateurs attachés au modèle.
enable_peft_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 PEFT par d'autres de rangs différents, ou, si le modèle est compilé, sans déclencher de recompilation.
Actuellement, le hotswapping n'est pris en charge que pour 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. Si les rangs sont tous identiques et que le modèle n’est pas compilé, le remplacement à chaud fonctionne sans avoir à appeler cette méthode au préalable.
Si vous n’êtes pas familier avec les adaptateurs et les méthodes PEFT, nous vous invitons à en savoir plus dans la documentation officielle de PEFT : https://huggingface.co/docs/peft
Récupère les adaptateurs actuellement actifs du modèle. En cas d'inférence multi-adaptateurs (combinaison de plusieurs adaptateurs pour l'inférence), renvoie la liste de tous les adaptateurs actifs afin que les utilisateurs puissent les gérer en conséquence.
Pour les versions précédentes de PEFT (qui ne prennent pas en charge l’inférence multi-adapter), module.active_adapter renvoie
une seule chaîne de caractères.
get_adapter_state_dict
< source >( adapter_name: str | None = Nonestate_dict: dict | None = None )
Paramètres
- adapter_name (
str, facultatif) — Le nom de l'adaptateur dont extraire le dictionnaire d'état. Si aucun nom n'est fourni, l'adaptateur actif est utilisé. - state_dict (dictionnaire imbriqué de
torch.Tensor, facultatif) — Le dictionnaire d'état du modèle. Par défaut, il vautself.state_dict(), mais il peut être utilisé si des précautions particulières sont nécessaires lors de la récupération du dictionnaire d'état d'un modèle (comme lors de l'utilisation du parallélisme de modèle).
Si vous n’êtes pas familier avec les adaptateurs et les méthodes PEFT, nous vous invitons à en savoir plus dans la documentation officielle de PEFT : https://huggingface.co/docs/peft
Récupère le dictionnaire d'état de l'adaptateur, qui ne doit contenir que les tenseurs de poids de l'adaptateur spécifié par adapter_name. Si aucun adapter_name n'est transmis, l'adaptateur actif est utilisé.
delete_adapter
< source >( adapter_names: list[str] | str )
Supprimer un adaptateur PEFT du modèle sous-jacent.