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-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

< >

( 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). Если задано положительное целое число, дополнительно выделяются параметры LoRA A ([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 инициализируются нулями, а LoRA B также инициализируется нулями — адаптер представляет собой тождественное преобразование при создании. Если False, оба параметра инициализируются равномерным распределением Кайминга (используется в тестах для проверки нетривиального адаптера). LoRA A использует равномерное распределение Кайминга в обоих случаях.
  • 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, необязательный) — Создаёт пустые веса адаптера на мета-устройстве для ускорения загрузки.

Возвращает

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

Update on GitHub