PEFT documentation
Adaptateurs de rang élevé creux
Adaptateurs de rang élevé creux
Les adaptateurs de rang élevé creux, ou SHiRA, sont un type alternatif d’adaptateur qui présente des avantages significatifs par rapport aux adaptateurs de rang faible. Plus précisément, SHiRA atteint une meilleure précision que LoRA pour une variété de tâches de vision et de langage. Il offre également une fusion multi-adaptateurs plus simple et de meilleure qualité en réduisant considérablement la perte de concept, un problème courant rencontré par les adaptateurs de rang faible. SHiRA ajuste directement un petit nombre de paramètres du modèle de base pour l’adapter à toute tâche d’adaptation.
SHiRA présente actuellement la contrainte suivante :
- Seules les couches
nn.Linearsont prises en charge.
L'abstract de l'article est :
Low Rank Adaptation (LoRA) a suscité un intérêt considérable dans les recherches récentes sur l'IA générative. L'un des principaux avantages de LoRA est sa capacité à être fusionné avec des modèles pré-entraînés, sans surcoût pendant l'inférence. Cependant, du point de vue du déploiement mobile, nous pouvons soit éviter le surcoût d'inférence en mode fusionné mais perdre la capacité à basculer rapidement entre les adaptateurs, soit subir une latence d'inférence significative (jusqu'à 30 % de plus) tout en permettant un basculement rapide en mode non fusionné. LoRA présente également une perte de concept lorsque plusieurs adaptateurs sont utilisés simultanément. Dans cet article, nous proposons Sparse High Rank Adapters (SHiRA), un nouveau paradigme qui ne génère aucun surcoût d'inférence, permet un basculement rapide et réduit considérablement la perte de concept. Plus précisément, SHiRA peut être entraîné en ajustant directement uniquement 1 à 2 % des poids du modèle de base, en laissant les autres inchangés. Cela aboutit à un adaptateur très creux (sparse) qui peut être basculé directement en mode fusionné. Nous fournissons par ailleurs des insights théoriques et empiriques sur la manière dont la forte sparsité de SHiRA peut favoriser la fusion multi-adaptateurs en réduisant la perte de concept. Nos expériences étendues sur les LVMs et les LLMs démontrent que l'ajustement fin d'une petite fraction des paramètres du modèle de base surpasse significativement LoRA tout en permettant à la fois un basculement rapide et une fusion multi-adaptateurs. Enfin, nous fournissons une implémentation de SHiRA efficace en latence et en mémoire, basée sur la bibliothèque Parameter-Efficient Finetuning (PEFT), qui s'entraîne à une vitesse quasi identique à celle de LoRA tout en consommant jusqu'à 16 % de mémoire GPU de pointe en moins, rendant ainsi SHiRA facile à adopter pour des cas d'usage pratiques. Pour démontrer les avantages du basculement rapide pendant l'inférence, nous montrons que le chargement de SHiRA sur un modèle de base peut être 5 à 16 fois plus rapide que la fusion LoRA sur un CPU.
Aperçu des benchmarks
API
ShiraConfig
classe peft.ShiraConfig
< source >( 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 = Falser: int = 32mask_type: Literal['random'] = 'random'random_seed: Optional[int] = Nonetarget_modules: Optional[Union[list[str], str]] = Nonefan_in_fan_out: bool = Falseinit_weights: bool = Truemodules_to_save: Optional[list[str]] = None )
Paramètres
- r (
int, facultatif, valeur par défaut32) — Pour un module cible donné, le nombre de paramètres SHiRA est calculé comme r(m+n), où les dimensions du tenseur d’origine sont m x n. Cela signifie que le nombre de paramètres SHiRA est identique à celui d’un adaptateur LoRA. SHiRA est un adaptateur de rang élevé. La définition de ce paramètre r n’impose pas de limiter le rang à cette valeur. - mask_type (
str, defaults torandom) — Type of mask function. Defaults to a random sparse mask. An optional user-defined mask_fn to compute the mask value can also be supplied by instantiatingconfig = ShiraConfig(...)and then settingconfig.mask_fn = <your custom mask function>. For a pretrained weight with shape m x n, the custom mask function must return only one mask (shape: m x n) which must be binary 0 or 1 with num_shira_parameters = r(m + n) for linear layers. Device and dtype of mask must be same as base layer’s weight’s device and dtype. Please see mask_functions.py for more details and to see the default random sparse mask implementation. - random_seed (
int, facultatif, par défautNone) — graine aléatoire pour le générateur torch de random_mask. - target_modules (
Union[List[str], str]) — Liste de noms de modules ou expression régulière des noms de modules à remplacer par SHiRA. Par exemple, [‘q’, ‘v’] ou ‘.decoder.(SelfAttention|EncDecAttention).*(q|v)$‘. Seules les couches linéaires sont prises en charge. - fan_in_fan_out (
bool) — Définissez cette valeur sur True si la couche à remplacer stocke les poids sous la forme (fan_in, fan_out). Par exemple, gpt-2 utiliseConv1Dqui stocke les poids sous la forme (fan_in, fan_out) et il convient donc de définir cette valeur surTrue. - init_weights (
bool, par défautTrue) — Initialise les poids de SHiRA avec des valeurs nulles. Si défini à False, les poids de SHiRA sont initialisés avec des valeurs randn au lieu de zéros, ce qui est utilisé uniquement pour les tests. - modules_to_save (
List[str]) — Liste des modules, à l'exception des couches SHiRA, à définir comme entraînables et à enregistrer dans le point de contrôle final.
Ceci est la classe de configuration destinée à stocker la configuration d'un ShiraModel.
ShiraModel
classe peft.ShiraModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None ) → torch.nn.Module
Paramètres
- model (PreTrainedModel) — Le modèle à adapter.
- config (ShiraConfig) — La configuration du modèle SHiRA.
- adapter_name (
str) — Le nom de l'adaptateur, par défaut"default".
Retourne
torch.nn.Module
Le modèle SHiRA.
Crée un modèle Sparse High Rank Adapter (SHiRA) à partir d'un modèle pré-entraîné.
Exemple :
>>> from transformers import AutoModelForCausalLM
>>> from peft import ShiraConfig, get_peft_model
>>> base_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m")
>>> config = ShiraConfig(r=32)
>>> model = get_peft_model(base_model, config)Attributs :
- model (PreTrainedModel) — Le modèle à adapter.
- peft_config (ShiraConfig) : La configuration du modèle SHiRA.