PEFT documentation
Super-Tuning
Super-Tuning
Super-Tuning — это метод разреженного дообучения, который замораживает базовые веса и обучает только разреженную поддержку скалярных элементов, отобранных по величине весов. Установка r дополнительно выделяет адаптер низкого ранга в стиле LoRA, который аддитивно накладывается поверх разреженной поддержки (гибрид «Supra» из статьи).
По умолчанию используется оценка только по величине, не требующая данных. В абляции модели 8B из статьи указано, что magnitude-topk в среднем достигает 79,02%, превосходя Wanda-weighted saliency с результатом 78,66% при этом не требуя прохода калибровки. Оценка с весами активаций в стиле Wanda в данной реализации не поддерживается.
В настоящее время Super-Tuning имеет следующее ограничение:
- Поддерживаются только слои
nn.Linear.
Аннотация из статьи:
Дообучение больших языковых моделей с использованием параметрически эффективных методов стало стандартной практикой, однако существующие подходы, такие как LoRA, ограничивают обучаемое подпространство разложением низкого ранга. Мы представляем Super-Tuning — метод разреженного дообучения, который вместо этого выбирает небольшую поддержку из отдельных скалярных значений весов, формируя обучаемое множество неограниченного ранга при фиксированном бюджете параметров. Выбор осуществляется на основе сигналов значимости, вдохновленных методами отсечения (pruning): оценка только по величине (в стиле PaFi) или оценка с учетом активаций (в стиле Wanda). Мы показываем, что при дообучении моделей Llama-3.2-1B и Meta-Llama-3-8B и оценке на Math17K 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 hybrid (разреженная поддержка + 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]) — ранг LoRA для гибрида «Supra». ЕслиNone(по умолчанию), обучаемой является только разреженная поддержка (режим Super). Если задано положительное целое число, дополнительно выделяются параметры LoRAA([r, in_features]) иB([out_features, r]), вклад которых добавляется к разреженной поддержке в прямом проходе. - lora_alpha (
Optional[float]) — Коэффициент масштабирования LoRA для режима Supra. ЕслиNoneиrзадан, по умолчанию равно2 * r. Игнорируется, еслиr is None. - lora_dropout (
float) — Вероятность dropout для LoRA в режиме Supra. По умолчанию0.0. Игнорируется, еслиr is None. - init_weights (
bool) — ЕслиTrue(по умолчанию), разреженныеvaluesинициализируются нулями, а LoRABтакже инициализируется нулями — адаптер представляет собой тождественное преобразование при создании. ЕслиFalse, оба параметра инициализируются равномерным распределением Кайминга (используется в тестах для проверки нетривиального адаптера). LoRAAиспользует равномерное распределение Кайминга в обоих случаях. - 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
< 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 tuner (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