PEFT documentation
Super-Tuning
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
< 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 = 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 スタイルの活性化重み付きスコアリングは、この実装では提供されていません。
SupertuningModel
クラス peft.SupertuningModel
< 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
パラメータ
- 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)