PEFT documentation
Super-Tuning
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
< 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 模式)。 当设置为正整数时,还会额外分配 LoRAA([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初始化为零,LoRAB初始化为零——适配器在构建时为单位更新。当False时,两者均使用 Kaiming 均匀分布初始化(测试中用于验证非平凡适配器)。LoRAA在两种情况下均使用 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 风格的激活加权评分。
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,可选) — 在 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)