PEFT documentation

DeLoRA: Decoupled Low-rank Adaptation

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

DeLoRA: Decoupled Low-rank Adaptation

DeLoRA — это метод эффективной дообучения, который неявно поддерживает границу Фробениуса относительно предобученных весов, нормализуя и масштабируя обучаемые матрицы низкого ранга. Это позволяет эффективно разделить обучение направлений (слагаемое BA) и величины (слагаемое границы) обновлений весов, избегая катастрофических сдвигов в адаптированных весах и повышая устойчивость к выбору гиперпараметров.

Примечание:

  • используйте скорость обучения в 10–100 раз большую, чем для стандартных вариантов LoRA (типичные значения: 1e-3/1e-2/..)
  • убедитесь, что начальный параметр границы lambda не слишком мал (типичные значения около 10/15/..). Можно задать разные значения lambda для разных слоёв

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

  • Поддерживаются только слои nn.Linear.
  • Квантованные слои не поддерживаются.

Если эти ограничения не подходят для вашего сценария использования, рассмотрите другие методы.

Аннотация из статьи:

Методы параметрически эффективной дообучения (PEFT) недавно приобрели значительную популярность благодаря широкой доступности крупных предобученных моделей. Эти методы позволяют быстро адаптировать модель к задачам нижнего уровня с минимальными вычислительными затратами. Однако популярные методы дообучения, такие как LoRA, демонстрируют ограниченную устойчивость при выборе гиперпараметров или в условиях расширенных режимов обучения, что препятствует достижению оптимальных результатов «из коробки». В отличие от них, ограниченные подходы, такие как ETHER, обеспечивают большую устойчивость, но ограничены адаптацией с крайне низким рангом и преобразованиями фиксированной силы, что снижает выразительную способность адаптации. В данной работе мы предлагаем Decoupled Low-rank Adaptation (DeLoRA) — новый метод дообучения, который нормализует и масштабирует обучаемые матрицы низкого ранга. Ограничивая расстояние преобразования, DeLoRA эффективно разделяет угловое обучение и силу адаптации, повышая устойчивость без ущерба для производительности. Проведя оценку на задачах генерации изображений по заданному описанию, понимания естественного языка и обучения по инструкциям, мы показываем, что DeLoRA соответствует или превосходит по производительности конкурирующие методы PEFT, демонстрируя при этом более высокую устойчивость.

Обзор бенчмарков

API

DeloraConfig

класс peft.DeloraConfig

< >

( 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 = Falser: int = 8delora_lambda: int = 15module_dropout: float = 0.0target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonebias: Literal['none', 'all', 'delora_only'] = 'none'init_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonerank_pattern: Optional[dict] = <factory>lambda_pattern: Optional[dict] = <factory>modules_to_save: Optional[list[str]] = None )

Параметры

  • r (int) — Ранг адаптера DeLoRA.
  • delora_lambda (int) — Начальное значение границы адаптера DeLoRA. Эта переменная задаёт верхнюю границу нормы Фробениуса изменения весов, предотвращая чрезмерное отклонение дообученной модели от исходной.
  • module_dropout (float) — Вероятность dropout для отключения модулей DeLoRA во время обучения.
  • target_modules (Optional[Union[List[str], str]]) — Имена модулей, к которым следует применить адаптер. Если это значение указано, будут заменены только модули с указанными именами. При передаче строки выполняется сопоставление по регулярному выражению. При передаче списка строк выполняется точное совпадение или проверяется, заканчивается ли имя модуля каким-либо из переданных строк. Если это значение указано как ‘all-linear’, выбираются все линейные/Conv1D модули, за исключением выходного слоя. Если это значение не указано, модули выбираются в соответствии с архитектурой модели. Если архитектура неизвестна, будет выброшена ошибка — в этом случае следует указать целевые модули вручную.
  • exclude_modules (Optional[Union[List[str], str]]) — Имена модулей, к которым не следует применять адаптер. При передаче строки выполняется сопоставление по регулярному выражению. При передаче списка строк выполняется точное совпадение или проверяется, заканчивается ли имя модуля каким-либо из переданных строк.
  • bias (str) — Тип смещения для DeLoRA. Может принимать значения ‘none’, ‘all’ или ‘delora_only’. Если указано ‘all’ или ‘delora_only’, соответствующие смещения будут обновляться во время обучения. Обратите внимание, что это означает: даже при отключении адаптеров модель не будет выдавать тот же результат, что и базовая модель без адаптации.
  • init_weights (bool) — Определяет, следует ли выполнять инициализацию весов адаптера. Если True (по умолчанию): A инициализируется с помощью kaiming uniform, а B — нулями. Если False: A и B инициализируются с помощью kaiming uniform, что сразу приводит к ненулевому дельта-вкладу. Как правило, это не рекомендуется для обычного использования.
  • layers_to_transform (Union[List[int], int]) — Индексы слоёв, подлежащих трансформации. Если передан список целых чисел, адаптер будет применён к слоям с индексами, указанными в этом списке. Если передано одно целое число, трансформации будут применены к слою с этим индексом.
  • layers_pattern (Optional[Union[List[str], str]]) — Имя шаблона слоя, используется только в том случае, если layers_to_transform отличается от None. Этот параметр должен указывать на nn.ModuleList модели, который часто называется 'layers' или 'h'.
  • rank_pattern (dict) — Соответствие между именами слоёв или регулярными выражениями и рангами, отличными от ранга по умолчанию, заданного параметром r. Например, {'^model.decoder.layers.0.encoder_attn.k_proj': 16}.
  • lambda_pattern (dict) — Соответствие между именами слоев или регулярными выражениями и лямбда-функциями, отличными от лямбды по умолчанию, заданной параметром delora_lambda. Например, {'^model.decoder.layers.0.encoder_attn.k_proj': 16}.
  • modules_to_save (Optional[List[str]]) — Список модулей, помимо адаптерных слоёв, которые нужно сделать обучаемыми и сохранить в итоговой контрольной точке.

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

DeloraModel

класс peft.DeloraModel

< >

( 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 (torch.nn.Module) — Модель, подлежащая адаптации.
  • config (DeloraConfig) — конфигурация модели DeLoRA.
  • adapter_name (str) — имя адаптера, по умолчанию "default".

Возвращает

torch.nn.Module

Модель DeLoRA.

Создаёт модель DeLoRA на основе предобученной модели transformers.

Метод подробно описан в статье DeLoRA: Decoupled Low-rank Adaptation.

Атрибуты:

  • model (PreTrainedModel) — Модель, подлежащая адаптации.
  • peft_config (DeloraConfig): конфигурация модели DeLoRA.
Update on GitHub