PEFT documentation
torch.compile
torch.compile
Dans PEFT, torch.compile fonctionne pour certaines fonctionnalités, mais pas pour toutes. La raison pour laquelle il ne fonctionne pas systématiquement est que PEFT est très dynamique dans certains endroits (chargement et basculement entre plusieurs adaptateurs, par exemple), ce qui peut poser des problèmes à torch.compile. Dans d’autres endroits, torch.compile peut fonctionner, mais ne sera pas aussi rapide que prévu en raison des interruptions de graphe.
L’absence d’erreur ne signifie pas nécessairement que torch.compile a fonctionné correctement. Il peut produire une sortie, mais celle-ci peut être incorrecte. Ce guide décrit ce qui fonctionne avec torch.compile et ce qui ne fonctionne pas. Pour vos propres tests, nous recommandons d’utiliser la dernière version de PyTorch, car torch.compile est constamment amélioré.
Sauf indication contraire, les paramètres par défaut de
torch.compileont été utilisés.
Entraînement et inférence avec torch.compile
Ces fonctionnalités fonctionnent avec torch.compile. Tout ce qui est listé ci-dessous a été testé avec un LM causal :
- Entraînement avec
Trainerde 🤗 transformers - Entraînement avec une boucle PyTorch personnalisée
- Inférence
- Génération
Les adaptateurs suivants ont été testés avec succès :
- AdaLoRA
- BOFT
- IA³
- Réglage de la normalisation par couche
- LoHa
- LoKr
- LoRA
- LoRA + DoRA
- LoRA appliqué aux couches d'embedding
- OFT
- VeRA
- HRA
Fonctionnalités avancées de PEFT avec torch.compile
Voici certaines des fonctionnalités PEFT plus avancées qui fonctionnent. Elles ont toutes été testées avec LoRA.
modules_to_save(i.e.config = LoraConfig(..., modules_to_save=...))- Fusion des adaptateurs (un ou plusieurs)
- Fusionner plusieurs adaptateurs en un seul (c.-à-d. appeler
model.add_weighted_adapter(...)) - Utilisation des adaptateurs PEFT avec la quantification (bitsandbytes)
- Désactiver les adaptateurs (c.-à-d. utiliser
with model.disable_adapter()) - Déchargement (c.-à-d. l'appel de
model.merge_and_unload()) - Lots d'adaptateurs mixtes (c.-à-d. l'appel de
model(batch, adapter_names=["__base__", "default", "other", ...])) - Inférence avec plusieurs adaptateurs (c’est-à-dire en utilisant
model.add_adapteroumodel.load_adapterpour charger plus d’un adaptateur) ; pour cela, n’appeleztorch.compilequ’après avoir chargé tous les adaptateurs
En général, nous pouvons nous attendre à ce qu'une fonctionnalité qui fonctionne correctement avec LoRA et qui est également prise en charge par d'autres types d'adaptateurs fonctionne également pour ce type d'adaptateur.
Cas de test
Tous les cas d'utilisation listés ci-dessus sont testés dans peft/tests/test_torch_compile.py. Si vous souhaitez examiner en détail la manière dont une fonctionnalité spécifique a été testée, veuillez consulter ce fichier et vérifier le test correspondant à votre cas d'utilisation.
Update on GitHubSi vous avez un autre cas d’usage pour lequel vous savez que
torch.compilefonctionne ou non avec PEFT, merci de contribuer en nous en informant ou en ouvrant une PR pour ajouter ce cas d’usage aux cas de test couverts.