PEFT documentation

FRoD: Эффективная дообучение полного ранга с вращательными степенями

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

FRoD: Эффективная дообучение полного ранга с вращательными степенями

FRoD — это метод эффективной по параметрам дообучения, который объединяет общую базу полного ранга с разреженными обучаемыми степенями свободы вращения. Обновление адаптера выражается через фиксированные тензоры проекции и обучаемые коэффициенты, что позволяет FRoD применять обновления полного ранга, сохраняя при этом небольшое количество обучаемых параметров.

Статья: Full-Rank Efficient Fine-Tuning with Rotational Degrees.

При сохранении параметров адаптера можно избежать хранения тензоров проекций, установив save_projection=False в FrodConfig. В этом случае проекции восстанавливаются из весов базовой модели и фиксированного случайного ключа из projection_prng_key. Это уменьшает размер контрольной точки, но по умолчанию установлено save_projection=True, чтобы загрузка контрольной точки не зависела от деталей регенерации.

В отличие от LoRA, FRoD позволяет выражать обновление полного ранга в каждом адаптируемом линейном слое, обучая при этом только диагональные коэффициенты и разреженный набор внедиагональных коэффициентов вращения. Это может быть полезно, когда обновление низкого ранга оказывается слишком ограничительным. Компромисс состоит в том, что FRoD вычисляет фиксированные тензоры проекции из базовых весов во время инъекции адаптера, что делает настройку более затратной, а реализацию — менее широко поддерживаемой по сравнению с LoRA.

Инициализация проекций может занимать много времени на больших моделях, так как FRoD выполняет разложение матриц по категориям целевых модулей перед внедрением адаптеров. По умолчанию отображается индикатор прогресса, который можно отключить с помощью FrodConfig(progressbar=False).

Для обучения с ограниченной памятью параметр runtime_offload_base_weight=True сохраняет базовые веса целевой модели на CPU, когда активный путь FRoD в них не нуждается. Эта опция включается явно, так как методы PEFT обычно удерживают все базовые параметры на ускорителе после перемещения модели и после прямых проходов.

В настоящее время FRoD имеет следующее ограничение:

  • Поддерживаются только слои nn.Linear и transformers.pytorch_utils.Conv1D.

Быстрый старт

from transformers import AutoModelForSequenceClassification

from peft import FrodConfig, TaskType, get_peft_model

model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-uncased", num_labels=2)

peft_config = FrodConfig(
    task_type=TaskType.SEQ_CLS,
    target_modules=["query", "value"],
    modules_to_save=["classifier"],
    sparse_rate=0.02,
    frod_dropout=0.0,
    runtime_offload_base_weight=True,
)

model = get_peft_model(model, peft_config)
model.print_healthcheck()

FrodConfig

класс peft.FrodConfig

< >

( 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]] = Noneprojection_prng_key: int = 0save_projection: bool = Truefrod_dropout: float = 0.0fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: Optional[list[str]] = Noneinit_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonesparse_rate: float = 0.01regularization_alpha: float = 0.001progressbar: bool = Trueruntime_offload_base_weight: bool = False )

Параметры

  • target_modules (Union[List[str], str]) — Имена модулей, к которым следует применить FRoD. Поддерживаются только линейные слои.
  • projection_prng_key (int) — Случайное зерно, используемое при инициализации разреженного паттерна FRoD COO.
  • save_projection (bool) — Сохранять ли тензоры проекции FRoD в state dict. Это увеличивает размер контрольной точки, но делает перезагрузку адаптера независимой от локального кэша. По умолчанию True.
  • frod_dropout (float) — Вероятность dropout для слоёв FRoD.
  • fan_in_fan_out (bool) — Установите это значение в True, если заменяемый слой хранит веса в формате (fan_in, fan_out). Например, gpt-2 использует Conv1D, который хранит веса в формате (fan_in, fan_out), поэтому это значение должно быть установлено в True.
  • bias (str) — Тип смещения для FRoD. Может принимать значения ‘none’, ‘all’ или ‘frod_only’. Если указано ‘all’ или ‘frod_only’, соответствующие смещения будут обновляться во время обучения. Обратите внимание, что это означает: даже при отключении адаптеров модель не будет выдавать тот же результат, что и базовая модель без адаптации.
  • modules_to_save (List[str]) — Список модулей, помимо слоёв FRoD, которые нужно сделать обучаемыми и сохранить в итоговом контрольном пункте.
  • init_weights (bool) — Определяет, следует ли инициализировать веса слоёв FRoD с использованием их стандартной инициализации. Не изменяйте этот параметр, если вы точно не знаете, что делаете.
  • layers_to_transform (Union[List[int],int]) — Индексы слоев для преобразования. Если этот аргумент указан, преобразования FRoD применяются к слоям с индексами, указанными в этом списке. Если передано одно целое число, преобразования FRoD применяются к слою с этим индексом.
  • layers_pattern (Optional[Union[List[str], str]]) — Имя шаблона слоя, используется только в том случае, если layers_to_transform отличается от None. Этот параметр должен указывать на nn.ModuleList модели, который часто называется 'layers' или 'h'.
  • sparse_rate (float) — Доля внедиагональных элементов в разреженной обучаемой матрице вращения. Большие значения увеличивают ёмкость и количество обучаемых параметров; меньшие значения дешевле. По умолчанию 0.01.
  • regularization_alpha (float) — Небольшое положительное значение, используемое при построении общего базиса из базовых весов. Оно стабилизирует обращение матрицы, когда слои в одной категории имеют коррелированные веса. По умолчанию 1e-3.
  • progressbar (bool) — Отображать ли индикатор прогресса при построении проекций FRoD. Инициализация проекций может занимать много времени на больших моделях, поскольку выполняется разложение матриц по категориям целевых модулей. По умолчанию True.
  • runtime_offload_base_weight (bool) — Определяет, следует ли хранить целевые базовые веса на CPU, если активный путь FRoD в них не нуждается. Это позволяет снизить потребление памяти GPU, поскольку FRoD напрямую восстанавливает адаптированный вес, однако нарушает стандартное соглашение PEFT, согласно которому все базовые параметры остаются на ускорителе после перемещения модели или выполнения прямого прохода. По умолчанию — False.

Это класс конфигурации для хранения конфигурации модели FrodModel.

Статья: https://doi.org/10.1609/aaai.v40i31.39813.

FrodModel

класс peft.FrodModel

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )

Update on GitHub