PEFT documentation

LoRA à blocs diagonaux pour éliminer les surcoûts de communication dans le service de LoRA parallélisé par tenseurs

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

LoRA à blocs diagonaux pour éliminer les surcoûts de communication dans le service de LoRA parallélisé par tenseurs

Block-Diagonal LoRA (BD-LoRA) est une variante de LoRA dans laquelle certains facteurs LoRA sont contraints d’être bloc-diagonaux. Cela permet un service plus rapide en éliminant les surcoûts de communication lors de l’exécution de l’inférence sur plusieurs GPU. Malgré la contrainte bloc-diagonale, BD-LoRA offre des performances similaires à celles de LoRA standard pour un nombre de paramètres comparable.

BD-LoRA est conçu pour être utilisé avec le parallélisme de tenseurs, ce qui signifie le fractionnement des poids d'un modèle sur plusieurs GPU. Une stratégie de fractionnement populaire est la stratégie de fractionnement Megatron. Pour deux couches linéaires $W_1$, W2W_2 qui se suivent (par exemple les projections up et down dans un module MLP de transformer), nous fractionnerons la première couche de manière parallèle par colonnes (ce qui nécessite que LoRA B soit bloc-diagonal) et la deuxième couche de manière parallèle par lignes (ce qui nécessite que LoRA A soit bloc-diagonal). Pour le module d'attention, cela peut être réalisé de manière similaire en prenant les projections Q, K et V ensemble comme W1W_1 et la projection out comme $W_2$, en procédant au fractionnement en conséquence. Ce fractionnement permet à un moteur d'inférence compatible de distribuer chaque fragment bloc-diagonal sur un GPU différent, réduisant ainsi le besoin de communiquer des résultats partiels entre les GPU. Sur l'image ci-dessous, vous pouvez voir la stratégie de fractionnement exacte et comment cela économise des efforts de calcul.

Article : https://hf.co/papers/2510.23346

Performance, rang et nombre de paramètres

BD-LoRA atteint des performances similaires à celles de LoRA (voir l’image ci-dessous, ou le dossier method_comparison à la racine du dépôt peft) pour un nombre de paramètres identique. Cependant, comme chaque autre facteur de BD-LoRA est bloc-diagonal, un adaptateur BD-LoRA comportera moins de paramètres qu’un adaptateur LoRA pour un même rang. Les performances de BD-LoRA ne sont compétitives que lorsque le rang est augmenté en conséquence. Nous fournissons un exemple de code pour l’ajustement du rang à la fin de ce notebook.

API

BdLoraConfig

classe peft.BdLoraConfig

< >

( target_modules_bd_a: Optional[list[str]] = Nonetarget_modules_bd_b: Optional[list[str]] = Nonenblocks: int = 1match_strict: bool = True )

Paramètres

  • target_modules_bd_a — Modules où la matrice LoRA-A est bloc-diagonale. Chaque motif de la liste est comparé au nom du module via pattern is in target_name. Exemple : [‘up_proj’, ‘q_proj’, ‘v_proj’, ‘k_proj’]
  • target_modules_bd_b — Modules où le LoRA-B est bloc-diagonal. Chaque motif de la liste est comparé au nom du module via pattern is in target_name. Exemple : [‘out_proj’, ‘down_proj’]
  • nblocks — Nombre de blocs dans les matrices bloc-diagonales
  • match_strict — Si défini sur true, exige que chaque target_module possède soit un LoRA-A, soit un LoRA-B en diagonale par blocs, et lève une erreur dans le cas contraire. Vous pouvez définir cette valeur sur False pour mélanger l’entraînement LoRA et BD-LoRA, par exemple si certaines couches de votre module ne bénéficient pas de BD-LoRA.

Configuration pour BD-LoRA (Block-Diagonal LoRA). BD-LoRA est une variante de LoRA qui peut être utilisée pour un service multi-LoRA efficace dans les moteurs d'inférence. L'accélération provient de la réduction de la communication inter-GPU en définissant certains modules LoRA comme étant en diagonale par blocs.

Pour déterminer quels facteurs LoRA doivent être définis comme blocs diagonaux, suivez ces directives :

  • Pour l'attention, configurez
    • Projections Q, K, V à être en bloc diagonal LoRA-B
    • Projection de sortie en bloc diagonal LoRA-A
  • Pour les MLP, définissez
    • Up, projection Gate à être bloquée diagonale par blocs LoRA-B
    • Projection descendante à diagonale par blocs pour LoRA

Pour les autres modules et/ou architectures, consultez le code de votre moteur d'inférence cible. Les modules qui sont répartis par ligne doivent avoir LoRA-A en diagonale par blocs, tandis que les modules répartis par colonne doivent avoir LoRA-B en diagonale par blocs.

Update on GitHub