PEFT documentation

Super-Tuning

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

Super-Tuning

Super-Tuningは、ベースの重みを凍結し、重みの絶対値によって選択されたスパースなスカラーエントリのサポートのみを学習するスパースファインチューニング手法です。rを設定すると、スパースなサポートの上に加法で合成されるLoRAスタイルの低ランクアダプタが追加的に割り当てられます(論文における「Supra」ハイブリッド)。

デフォルトのスコアリングはmagnitudeのみを基準とし、データ不要です。論文の8Bアブレーションでは、キャリブレーションパスを必要としないにもかかわらず、magnitude-topkが平均79.02%で、Wanda重み付きsaliencyの78.66%を上回ることが報告されています。この実装では、Wandaスタイルの活性化重み付きスコアリングは提供されていません。

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

  • サポートされているのはnn.Linearレイヤーのみです。

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

パラメータ効率の良い手法による大規模言語モデルのファインチューニングは標準的なプラクティスとなりましたが、LoRAのような既存のアプローチでは、学習可能な部分空間が低ランク分解に制限されています。本稿では、Super-Tuningというスパースファインチューニング手法を提案します。この手法は、固定のパラメータ予算のもとで、個々のスカラー重みエントリから小さなサポートを選択することで、ランクに制限のない学習可能な集合を実現します。選択は、プルーニングに着想を得たサリエンスシグナルによって導かれます。具体的には、絶対値のみを用いたスコアリング(PaFiスタイル)または、活性化値で重み付けされたスコアリング(Wandaスタイル)です。Math17Kで評価されたLlama-3.2-1BおよびMeta-Llama-3-8Bのファインチューニングにおいて、同程度のパラメータ予算で比較した場合、絶対値ベースのSuper-TuningはLoRAに匹敵するかそれを上回る性能を示すことを示しました。さらに、スパースサポートと低ランク成分を組み合わせるハイブリッド変種「Supra」は、下流タスクの精度をさらに向上させることが確認されました。

ベンチマーク概要

使用方法

純粋なスーパー(大きさスコアリング、データフリー):

from peft import SupertuningConfig, get_peft_model

config = SupertuningConfig(target_modules=["q_proj", "v_proj"], sparsity=0.99)
model = get_peft_model(base_model, config)

Supraハイブリッド(スパースサポートとLoRAの加法的合成):

config = SupertuningConfig(
    target_modules=["q_proj", "v_proj"], sparsity=0.99,
    r=8, lora_alpha=16,   # lora_alpha defaults to 2 * r when omitted
)
model = get_peft_model(base_model, config)

SupertuningConfig

クラス peft.SupertuningConfig

< >

( 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 = Falsetarget_modules: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[list[str]] = Nonesparsity: float = 0.99select_top: bool = Truer: Optional[int] = Nonelora_alpha: Optional[float] = Nonelora_dropout: float = 0.0init_weights: bool = Truesave_precomputed_indices: bool = True )

パラメータ

  • target_modules (Optional[Union[List[str], str]]) — アダプタを適用するモジュールの名前。文字列の場合は正規表現による一致、リストの場合はサフィックスまたは完全一致、Noneの場合はモデルアーキテクチャのデフォルトが使用されます。
  • modules_to_save (Optional[List[str]]) — Supertuning のレイヤー以外で、最終的なチェックポイントに保存すべき学習可能なモジュール(例: ランダム初期化された分類ヘッド)
  • sparsity (float) — [0.0, 1.0) における目標スパース性比率。0.99 は、重みエントリの 1% が学習可能であることを意味します。デフォルト値は 0.99 です。
  • select_top (bool) — マグニチュードスコアのどの端を学習可能なサポートとして保持するかを指定します。True の場合、マグニチュードが最大のエントリを保持します(論文の Super / Supra に対応)。False の場合、マグニチュードが最小のエントリを保持します(論文の -bottom 変種に対応)。論文では、最適な方向はモデルやタスクによって異なることが報告されています。デフォルト値は True です。
  • r (Optional[int]) — “Supra”ハイブリッドのLoRAランクです。None(デフォルト)の場合、学習可能なのはスパースサポートのみです(Superモード)。 正の整数に設定すると、LoRAのA([r, in_features])とB ([out_features, r])のパラメータが追加的に割り当てられ、その寄与がフォワードパスにおいてスパースサポートに加算されます。
  • lora_alpha (Optional[float]) — Supra モード用の LoRA スケーリング係数です。None かつ r が設定されている場合、デフォルト値は 2 * r になります。r is None の場合は無視されます。
  • lora_dropout (float) — Supra モード用の LoRA dropout 確率。デフォルト値は 0.0 です。r is None の場合は無視されます。
  • init_weights (bool) — True の場合(デフォルト)、スパースな values はゼロ初期化され、LoRA の B もゼロ初期化されます。これにより、アダプタは構築時に恒等更新となります。False の場合、両者は Kaiming-uniform 初期化されます(テストで非自明なアダプタを検証するために使用されます)。LoRA の A は、どちらの場合も Kaiming-uniform 初期化が使用されます。
  • save_precomputed_indices (bool) — state dict にスパースサポートのインデックスを保存するかどうか。デフォルトは True です。チェックポイントのサイズを削減するには False に設定してください。この場合、インデックスはロード時にベース重みの絶対値から決定論的に再構築されます。再構築は、ベースモデルの重みが学習時に使用されたものと同じであることを前提としています。わずかな数値ドリフトにより、topk の同点処理の結果が異なる可能性があります。

SupertuningModelの構成クラスです。

Super-Tuning (arXiv:2607.09287) はベースの重みを凍結し、重みの絶対値に基づいて選択されたスパースなスカラーエントリのサポートのみを学習します。r を設定すると、スパースなサポートの上に LoRA スタイルの低ランクアダプタが追加的に割り当てられます(論文における “Supra” ハイブリッド)。

デフォルト(magnitude スコアリング、r=None)は、論文で報告された最良の単一メカニズム構成を再現します。Meta-Llama-3-8B において、magnitude-topk の平均 79.02% は Wanda の 78.66% を上回り、かつキャリブレーションパスを必要としません。 Wanda スタイルの活性化重み付きスコアリングは、この実装では提供されていません。

論文: https://arxiv.org/abs/2607.09287

SupertuningModel

クラス peft.SupertuningModel

< >

( 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 (PreTrainedModel) — 適応させるベースモデル。
  • config (SupertuningConfig) — Supertuningの設定です。
  • adapter_name (str) — アダプター名。デフォルトは"default"です。
  • low_cpu_mem_usage (bool、省略可) — メタデバイス上に空のアダプター重みを生成して、読み込みを高速化します。

戻り値

torch.nn.Module

Supertuningでラップされたモデル。

Super-Tuningチューナー(arXiv:2607.09287)。

ベースの重みを凍結し、重みの絶対値によって選択されたスパースなスカラーエントリのサポートのみを学習します(論文における単一メカニズムの最良構成。データ不要)。config.rが設定されている場合、スパースなサポートと加算的に構成されるLoRAのA/Bパラメータも追加で割り当てます(論文のSupraハイブリッド)。

例(純粋なSuper):

>>> from transformers import AutoModelForCausalLM
>>> from peft import SupertuningConfig, get_peft_model

>>> base = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-1B")
>>> config = SupertuningConfig(target_modules=["q_proj", "v_proj"], sparsity=0.99)
>>> model = get_peft_model(base, config)

例(Supraハイブリッド):

>>> config = SupertuningConfig(
...     target_modules=["q_proj", "v_proj"],
...     sparsity=0.99,
...     r=8,
...     lora_alpha=16,
... )
>>> model = get_peft_model(base, config)

論文: https://arxiv.org/abs/2607.09287

Update on GitHub