PEFT documentation

Jetons entraînables

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

Jetons entraînables

La méthode Trainable Tokens offre un moyen de cibler des embeddings de jetons spécifiques pour l’ajustement fin, sans avoir à entraîner la matrice d’embeddings complète ni à utiliser un adaptateur sur cette matrice. Elle est basée sur l’implémentation initiale disponible ici.

La méthode ne cible que des jetons spécifiques et entraîne de manière sélective les indices de jetons que vous spécifiez. Par conséquent, la RAM requise sera plus faible et la mémoire disque sera également nettement inférieure à celle nécessaire pour stocker la matrice d’incorporation entièrement affinée.

Certains benchmarks préliminaires obtenus avec ce script suggèrent que pour gemma-2-2b (qui possède une matrice d’embedding relativement volumineuse), vous pouvez économiser environ 4 Go de VRAM avec Trainable Tokens par rapport à un fine-tuning complet de la matrice d’embedding. Bien que LoRA utilise des quantités de VRAM comparables, il pourrait également cibler des tokens que vous ne souhaitez pas modifier. Notez qu’il s’agit là de simples indications et que des tailles de matrice d’embedding variables peuvent légèrement fausser ces chiffres.

Notez que cette méthode n'ajoute pas de jetons à votre place ; vous devez ajouter les jetons au tokenizer vous-même et redimensionner la matrice d'incorporation du modèle en conséquence. Cette méthode ne réentraînera que les incorporations des jetons que vous spécifiez. Cette méthode peut également être utilisée en conjonction avec les couches LoRA ! Consultez la documentation LoRA.

Enregistrer le modèle avec save_pretrained() ou récupérer le dictionnaire d’état à l’aide de get_peft_model_state_dict() lors de l’ajout de nouveaux jetons peut enregistrer la matrice d’incorporation complète plutôt que seulement la différence, par précaution, car la matrice d’incorporation a été redimensionnée. Pour économiser de l’espace, vous pouvez désactiver ce comportement en définissant save_embedding_layers=False lors de l’appel de save_pretrained. C’est sans risque tant que vous ne modifiez pas la matrice d’incorporation par d’autres moyens, car de telles modifications ne seraient pas suivies par les jetons entraînables.

Aperçu des benchmarks

API

TrainableTokensConfig

classe peft.TrainableTokensConfig

< >

( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falsetoken_indices: list[int] = <factory>target_modules: Optional[Union[list[str], str]] = Noneinit_weights: bool = True )

Paramètres

  • token_indices (list[int]) — Liste d’entiers indiquant les indices des jetons que vous souhaitez rendre entraînables. Pour trouver l’indice d’un jeton à l’aide d’un tokenizer, vous pouvez tokeniser la chaîne de caractères et examiner les input_ids renvoyés. Plus le nombre d’indices est proche du nombre total de jetons, moins cette méthode est efficace.
  • target_modules (Optional[Union[list[str], str]]) — Liste de noms de modules ou expression régulière des noms de modules à remplacer par notre TrainableTokensLayer. Si non défini, il tentera d’obtenir la couche d’incorporation d’entrée du modèle si ce dernier possède une méthode get_input_embeddings (les modèles transformers en possèdent généralement une) ; en cas d’échec, la valeur par défaut est ‘embed_tokens’. D’autres exemples de cibles sont embedding, encoder.embeddings ou decoder.embeddings.
  • init_weights (bool) — Par défaut, les poids des nouveaux jetons sont initialisés pour être identiques aux embeddings de jetons respectifs. Cela rend TrainableTokens inopérant lorsqu'il n'est pas entraîné. Si défini sur False, les poids seront des valeurs aléatoires. Ne modifiez pas ce paramètre à moins de savoir exactement ce que vous faites.

Configuration de la méthode TrainableTokens.

Permet d’entraîner de nouveaux jetons (et de réentraîner des jetons existants) sans entraîner la matrice d’incorporation complète. En marquant quelques jetons sélectionnés (identifiés par leurs indices) comme entraînables et en laissant le reste inchangé, cette méthode peut être utilisée pour ajouter de nouveaux jetons ou modifier l’incorporation de jetons existants tout en économisant de la mémoire. À la fois l’espace de stockage et l’utilisation de la mémoire de travail sont réduits par rapport à l’entraînement complet de la matrice d’incorporation.

Notez que l'entraînement avec FSDP/DeepSpeed n'est peut-être pas encore entièrement pris en charge.

TrainableTokensModel

classe peft.TrainableTokensModel

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )

Update on GitHub