PEFT documentation
DeLoRA: Decoupled Low-rank Adaptation
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
< 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 = 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
< 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 (
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.