# DeLoRA: Decoupled Low-rank Adaptation
[DeLoRA](https://huggingface.co/papers/2503.18225) — это метод эффективной дообучения, который неявно поддерживает границу Фробениуса относительно предобученных весов, нормализуя и масштабируя обучаемые матрицы низкого ранга. Это позволяет эффективно разделить обучение направлений (слагаемое 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, демонстрируя при этом более высокую устойчивость.

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

<iframe src="https://peft-internal-testing-peft-method-comparison-embed.hf.space/?highlight[type]=DELORA" frameborder="0" width="850" height="1000"
>

# API

## DeloraConfig[[peft.DeloraConfig]]

#### peft.DeloraConfig[[peft.DeloraConfig]]

```python
peft.DeloraConfig(task_type: Optional[Union[str, TaskType]] = None, peft_type: Optional[Union[str, PeftType]] = None, auto_mapping: Optional[dict] = None, peft_version: Optional[str] = None, base_model_name_or_path: Optional[str] = None, revision: Optional[str] = None, inference_mode: bool = False, r: int = 8, delora_lambda: int = 15, module_dropout: float = 0.0, target_modules: Optional[Union[list[str], str]] = None, exclude_modules: Optional[Union[list[str], str]] = None, bias: Literal['none', 'all', 'delora_only'] = 'none', init_weights: bool = True, layers_to_transform: Optional[Union[list[int], int]] = None, layers_pattern: Optional[Union[list[str], str]] = None, rank_pattern: Optional[dict] = <factory>, lambda_pattern: Optional[dict] = <factory>, modules_to_save: Optional[list[str]] = None)
```

[Источник](https://github.com/huggingface/peft/blob/main/src/peft/tuners/delora/config.py#L24)

**Параметры:**

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](/docs/peft/main/ru/package_reference/delora#peft.DeloraModel).

## DeloraModel[[peft.DeloraModel]]

#### peft.DeloraModel[[peft.DeloraModel]]

```python
peft.DeloraModel(model, peft_config: Union[PeftConfig, dict[str, PeftConfig]], adapter_name: str, low_cpu_mem_usage: bool = False, state_dict: Optional[dict[str, torch.Tensor]] = None)
```

[Источник](https://github.com/huggingface/peft/blob/main/src/peft/tuners/delora/model.py#L28)

**Параметры:**

model (`torch.nn.Module`) : модель, подлежащая адаптации.

config ([DeloraConfig](/docs/peft/main/ru/package_reference/delora#peft.DeloraConfig)) : конфигурация модели DeLoRA.

adapter_name (`str`) : Имя адаптера, по умолчанию `"default"`.

**Возвращает:** `torch.nn.Module`

Модель DeLoRA.

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

Метод подробно описан в статье [DeLoRA: Decoupled Low-rank Adaptation](https://huggingface.co/papers/2503.18225).

**Атрибуты**:
- **model** ([PreTrainedModel](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel)) -- Модель, подлежащая адаптации.
- **peft_config** ([DeloraConfig](/docs/peft/main/ru/package_reference/delora#peft.DeloraConfig)): конфигурация модели DeLoRA.

