PEFT documentation

テンソル並列LoRAサービングにおける通信オーバーヘッドの排除のためのブロック対角LoRA

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サービングにおける通信オーバーヘッドの排除のためのブロック対角LoRA

Block-Diagonal LoRA (BD-LoRA) は、一部の LoRA 係数をブロック対角行列に制約する LoRA のバリアントです。これにより、複数 GPU 上で推論を実行する際の通信オーバーヘッドを排除し、より高速なサービングが可能になります。ブロック対角の制約にもかかわらず、BD-LoRA は同程度のパラメータ数において、通常の LoRA と同様の性能を発揮します。

BD-LoRA はテンソル並列性との併用を前提として設計されており、これはモデルの重みを複数の GPU に分割して配置することを意味します。一般的な分割戦略は Megatron Sharding Strategy. 2つの線形層 $W_1$、 W2W_2 が連続して適用される場合(例えば Transformer の MLP モジュールにおける up プロジェクションと down プロジェクション)、最初の層は列並列方式で分割し(これには LoRA B がブロック対角行列である必要があります)、2番目の層は行並列方式で分割します(これには LoRA A がブロック対角行列である必要があります)。アテンションモジュールについても、Q、K、V プロジェクションをまとめて W1W_1 と、out プロジェクションを $W_2$ とみなして、同様に分割を行うことができます。この分割により、互換性のある推論エンジンが各ブロック対角行列のシャードを異なる GPU に分散配置でき、GPU 間の部分結果の通信を不要にします。下の図には、正確な分割戦略と、これによって計算負荷がどのように削減されるかが示されています。

論文: https://hf.co/papers/2510.23346

パフォーマンス、ランク、パラメータ数

BD-LoRAは、同じパラメータ数においてLoRAと同等の性能を達成します(下の画像、またはpeftリポジトリのルートにあるmethod_comparisonフォルダを参照)。ただし、BD-LoRAの他のすべての要素がブロック対角行列であるため、同じランクでは、BD-LoRAアダプタのパラメータ数はLoRAアダプタよりも少なくなります。BD-LoRAの性能が競争力を持つのは、ランクをそれに応じて増加させた場合のみです。このサンプルノートブックの末尾に、ランクを一致させるためのサンプルコードを提供しています。

API

BdLoraConfig

クラス peft.BdLoraConfig

< >

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

パラメータ

  • target_modules_bd_a — LoRA-A がブロック対角行列となるモジュール。リスト内の各パターンをpattern is in target_nameによってモジュール名と照合します。例: [‘up_proj’, ‘q_proj’, ‘v_proj’, ‘k_proj’]
  • target_modules_bd_b — LoRA-B がブロック対角行列となるモジュール。リスト内の各パターンをpattern is in target_nameによってモジュール名と照合します。例: [‘out_proj’, ‘down_proj’]
  • nblocks — ブロック対角行列のブロック数
  • match_strict — true に設定すると、各 target_module がブロック対角 LoRA-A または LoRA-B を持つことを必須とし、そうでない場合はエラーを発生させます。モジュール内の一部のレイヤーが BD-LoRA から恩恵を受けられない場合など、LoRA と BD-LoRA の学習を混合するには、これを False に設定できます。

BD-LoRA(Block-Diagonal LoRA)の設定。BD-LoRAは、推論エンジンでの効率的なマルチLoRAサービングに使用できるLoRAのバリアントです。特定のLoRAモジュールをブロック対角行列に設定することでGPU間通信を削減し、高速化を実現します。

どのLoRA係数をブロック対角行列として設定すべきかを判断するには、次のガイドラインに従ってください。

  • アテンションについては、
    • LoRA-Bブロック対角行列となるQ、K、Vの射影
    • LoRA-Aブロック対角行列にする出力投影
  • MLP については、
    • Up、Gateの投影をLoRA-Bブロック対角にする
    • LoRA-Aブロック対角行列へのダウンプロジェクション

その他のモジュールおよび/またはアーキテクチャについては、対象の推論エンジンのコードを確認してください。行方向にシャーディングされているモジュールはLoRA-Aがブロック対角行列、列方向にシャーディングされているモジュールはLoRA-Bがブロック対角行列である必要があります。

Update on GitHub