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” 混合方案)。

默认评分仅基于幅值,且无需数据。该论文的 8B 消融实验报告称,magnitude-topk 的平均准确率为 79.02%,优于 Wanda 加权显著性评分的 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”进一步提升了下游准确率。

基准测试概览

用法

纯 Super(幅度评分,无数据):

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 均匀分布初始化(测试中用于验证非平凡适配器)。LoRA A 在两种情况下均使用 Kaiming 均匀分布初始化。
  • save_precomputed_indices (bool) — 是否将稀疏支持索引保存到 state dict 中。默认为 True。将其设置为 False 可减小 checkpoint 的体积——索引将在加载时根据基础权重的幅值确定性地重建。重建过程假设基础模型权重与训练时使用的权重完全一致;微小的数值漂移可能导致 topk 平局裁决结果不同。

SupertuningModel 的配置类。

Super-Tuning(arXiv:2607.09287)冻结基础权重,仅训练由权重幅值选出的稀疏标量条目支撑集。设置 r 还会在稀疏支撑集之上额外分配一个 LoRA 风格的低秩适配器(即论文中的 “Supra” 混合方案)。

默认设置(幅度评分,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,可选) — 在 meta 设备上创建空的适配器权重以加快加载速度。

返回值

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