PEFT documentation

C3A: 円周畳み込みによるパラメータ効率の良いファインチューニング

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

C3A: 円周畳み込みによるパラメータ効率の良いファインチューニング

C3Aは、Circular Convolutionを活用して、合理的なリソースの範囲内で高ランクの適応を実現するパラメータ効率の良いファインチューニング手法です。

C3Aでは、他の手法よりもはるかに大きな学習率(LR)を使用する必要があります。例えば、C3AのLRは1e-1が適切な出発点です。また、はるかに小さいウェイトディケイを使用すべきです。詳細については、method_comparisonフォルダを参照してください。

の block_size, は、調整可能なパラメータやパフォーマンスに影響します。まず、 gcd(d1,d2)\mathrm{gcd}(d_1,d_2) に近い値を選ぶことができます。ここで、 rr は、このタスクで使用する LoRA のランクです。

C3Aには現在、以下の制約があります:

  • サポートされているのはnn.Linearレイヤーのみです。
  • 量子化レイヤーはサポートされていません。
  • ブロックサイズは、対象レイヤーの入力サイズと出力サイズの両方の共通約数である必要があります。

これらの制約が使用ケースに合わない場合は、他の方法を検討してください。

論文の抄録は以下の通りです:

Low-Rank Adaptation (LoRA) は、低ランク行列 A\mathbf{A} と B\mathbf{B} を利用して重みの変化(すなわち $\Delta \mathbf{W} = \mathbf{B} \mathbf{A}$)を表すことで、大規模な基盤モデルのファインチューニングにおいて人気を博しています。この手法は、 A\mathbf{A} と B\mathbf{B} を順次乗算することで、フルデルタ行列に伴う重いメモリ消費を軽減し、学習可能なパラメータ数を削減します。アクティベーションとの乗算を通じて、この手法は計算効率とメモリ効率の両面で優れた性能を発揮します。その成功にもかかわらず、本質的な低ランク特性が性能を制限する可能性があります。この問題に対処するためにいくつかのバリアントが提案されていますが、それらは LoRA による重要な計算効率とメモリ効率をしばしば見落としています。本論文では、Circular Convolution Adaptation (C3A) を提案します。C3A は、性能を向上させた高ランク適応を実現するだけでなく、計算能力とメモリ利用の両面でも優れた性能を発揮します。広範な実験により、C3A がさまざまなファインチューニングタスクにおいて LoRA とそのバリアントを一貫して上回ることが示されています。

ベンチマーク概要

API

C3AConfig

クラス peft.C3AConfig

< >

( 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 = Falseblock_size: int = 256target_modules: Optional[Union[list[str], str]] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = Nonelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Noneblock_size_pattern: Optional[dict] = <factory>init_weights: Optional[Union[bool, Literal['gaussian', 'kaiming_uniform', 'xavier_uniform']]] = 'xavier_uniform' )

パラメータ

  • block_size (int) — C3Aのブロックサイズです。ターゲット層の入力サイズおよび出力サイズの両方で割り切れる必要があります。 block_sizeにどの値を設定すべきか分からない場合は、ターゲット層のすべての入力サイズおよび出力サイズの最大公約数を設定してください。 この値を大きくすると、パラメータ数が少なくなります。
  • target_modules (Union[list[str],str]) — C3A を適用するモジュールの名前です。
  • bias (str) — C3A のバイアスタイプ。‘none’、‘all’、‘c3a_only’ のいずれかを指定できます。‘all’ または ‘c3a_only’ を指定した場合、対応するバイアスが学習中に更新されます。この設定により、アダプターを無効にしても、適応なしのベースモデルが生成する出力と同一の出力は得られない点にご注意ください。
  • modules_to_save (list[str]) — C3A層を除き、学習可能に設定して最終チェックポイントに保存されるモジュールのリスト
  • layers_to_transform (Union[list[int],int]) — 変換対象のレイヤーのインデックスです。この引数が指定されている場合、このリストに指定されたレイヤーのインデックスに対して C3A が適用されます。単一の整数が渡された場合、そのインデックスのレイヤーに対して C3A が適用されます。
  • layers_pattern (str) — layers_to_transform が None と異なり、かつレイヤーパターンが共通のレイヤーパターンに含まれない場合にのみ使用される、レイヤーパターンの名前です。
  • block_size_pattern (dict) — デフォルトで指定されたものとは異なる block_size を、レイヤー名または正規表現から block_size へのマッピングとして指定します。例えば、{"model.decoder.layers.0.encoder_attn.k_proj": 1280}
  • init_weights (Union[bool, Literal["gaussian", "kaiming_uniform", "xavier_uniform"]]) — デフォルト値は ‘xavier_uniform’ です。False に設定した場合も ‘xavier_uniform’ が使用されます。重みをゼロに設定して C3A を無効化 (no-op) するには、値を True に設定してください。

これは、C3AModelの設定を保存するための設定クラスです。

C3AModel

クラス peft.C3AModel

< >

( 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

パラメータ

  • model (torch.nn.Module) — 適応させる対象のモデル。
  • config (C3AConfig) — C3Aモデルの設定です。
  • adapter_name (str) — アダプターの名前。デフォルトは"default"です。

戻り値

torch.nn.Module

C3Aモデル。

事前学習済みのTransformersモデルからC3Aモデルを作成します。

この手法の詳細は、https://huggingface.co/papers/2407.19342に記載されています。

属性:

  • model (PreTrainedModel) — 適応させる対象のモデル。
  • peft_config (C3AConfig): C3Aモデルの設定です。
Update on GitHub