PEFT documentation

torch.compile

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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.compile ont é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 Trainer de 🤗 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_adapter ou model.load_adapter pour charger plus d’un adaptateur) ; pour cela, n’appelez torch.compile qu’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.

Si vous avez un autre cas d’usage pour lequel vous savez que torch.compile fonctionne 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.

Update on GitHub