# PEFT[[transformers.integrations.PeftAdapterMixin]]

Класс [PeftAdapterMixin](/docs/transformers/main/ru/main_classes/peft#transformers.integrations.PeftAdapterMixin) предоставляет функции из библиотеки [PEFT](https://huggingface.co/docs/peft/index) для управления адаптерами в Transformers. Этот миксин поддерживает все методы PEFT, не основанные на обучении промптов (LoRA, IA3, AdaLoRA и другие). Методы prefix tuning (prompt tuning, prompt learning) не поддерживаются, поскольку их невозможно внедрить в модуль torch.

#### transformers.integrations.PeftAdapterMixin[[transformers.integrations.PeftAdapterMixin]]

```python
transformers.integrations.PeftAdapterMixin()
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L57)

Класс, содержащий все функции для загрузки и использования весов адаптеров, поддерживаемых в библиотеке PEFT. Для получения подробной информации об адаптерах и их внедрении в модель на основе трансформера обратитесь к документации библиотеки PEFT: https://huggingface.co/docs/peft/index

В настоящее время поддерживаются только методы PEFT, не использующие промпты (LoRA, IA³ и т. д.). Другие модели PEFT, такие как prompt tuning и prompt learning, не входят в область применения, поскольку эти адаптеры нельзя «встроить» в модуль torch. Для использования этих методов обратитесь к руководству по использованию библиотеки PEFT.

С помощью этого миксина, если установлена правильная версия PEFT (>= 0.20.0), становится возможным:

- Загрузите адаптер, сохранённый по локальному пути или в удалённом репозитории Hub, и внедрите его в модель
- Подключите новые адаптеры к модели и обучите их с помощью Trainer или самостоятельно.
- Подключите несколько адаптеров и последовательно активируйте / деактивируйте их
- Активировать / деактивировать все адаптеры из модели.
- Получите `state_dict` активного адаптера.

#### load_adapter[[transformers.integrations.PeftAdapterMixin.load_adapter]]

```python
load_adapter(peft_model_id: str | None = None, adapter_name: str | None = None, peft_config: dict[str, typing.Any] | None = None, adapter_state_dict: dict[str, 'torch.Tensor'] | None = None, low_cpu_mem_usage: bool = False, is_trainable: bool = False, hotswap: typing.Union[bool, typing.Literal['auto']] = 'auto', local_files_only: bool = False, adapter_kwargs: dict[str, typing.Any] | None = None, load_config: typing.Optional[ForwardRef('LoadStateDictConfig')] = None, **kwargs)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L80)

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

peft_model_id (`str`, *необязательный*) : Идентификатор модели для поиска на Hub или локальный путь к файлу конфигурации адаптера и весам адаптера.

adapter_name (`str`, *необязательный*) : Имя адаптера для использования. Если не задано, будет использовано имя "default".

load_config (`LoadStateDictConfig`, *необязательный*) : конфигурация загрузки для повторного использования при загрузке весов адаптера, как правило, из `from_pretrained`.

kwargs (`dict[str, Any]`, *необязательный*) : Дополнительные поля `LoadStateDictConfig`, передаваемые в качестве именованных аргументов.

peft_config (`dict[str, Any]`, *необязательный*) : Конфигурация добавляемого адаптера. Поддерживаются все конфигурации обучения, не использующие промпты (LoRA, IA³ и т. д.). Этот аргумент используется, если пользователь напрямую передаёт словари состояний PEFT.

adapter_state_dict (`dict[str, torch.Tensor]`, *необязательный*) : Словарь состояний (state dict) адаптера для загрузки. Этот аргумент используется, если пользователи напрямую передают state dict PEFT.

low_cpu_mem_usage (`bool`, *необязательный*, по умолчанию `False`) : Сокращает использование памяти при загрузке адаптера PEFT. Это также должно ускорить процесс загрузки.

is_trainable (`bool`, *необязательный*, по умолчанию `False`) : Указывает, должен ли адаптер быть обучаемым. Если `False`, адаптер будет заморожен и сможет использоваться только для инференса.

hotswap : (`"auto"` или `bool`, *необязательный*, по умолчанию `"auto"`) Заменять ли существующий адаптер (LoRA) на вновь загруженный адаптер на месте. Это означает, что вместо загрузки дополнительного адаптера будут взяты веса существующего адаптера и заменены весами нового адаптера. Это может быть быстрее и экономнее по памяти. Однако главное преимущество горячей замены состоит в том, что при компиляции модели с помощью torch.compile загрузка нового адаптера не требует повторной компиляции модели. При использовании горячей замены переданный `adapter_name` должен быть именем уже загруженного адаптера. Если у нового и старого адаптеров разные ранги и/или значения LoRA alpha (т.е. масштабирование), перед загрузкой адаптера необходимо вызвать дополнительный метод: ```py model = AutoModel.from_pretrained(...) max_rank = ...  # the highest rank among all LoRAs that you want to load # call *before* compiling and loading the LoRA adapter model.enable_peft_hotswap(target_rank=max_rank) model.load_adapter(file_name_1, adapter_name="default") # optionally compile the model now model = torch.compile(model, ...) output_1 = model(...) # now you can hotswap the 2nd adapter, use the same name as for the 1st # hotswap is activated by default since enable_peft_hotswap was called model.load_adapter(file_name_2, adapter_name="default") output_2 = model(...) ``` По умолчанию горячая замена отключена и требует передачи `hotswap=True`. Если вы сначала вызвали `enable_peft_hotswap`, она включена. В этом случае вы все еще можете отключить ее вручную, передав `hotswap=False`. Обратите внимание, что горячая замена имеет несколько ограничений, описанных здесь: https://huggingface.co/docs/peft/main/en/package_reference/hotswap

adapter_kwargs (`dict[str, Any]`, *необязательный*) : Дополнительные именованные аргументы, передаваемые в метод `from_pretrained` конфигурации адаптера и метод `find_adapter_config_file`.

Загрузите веса адаптера из файла или удалённой папки на Hub. Если вы не знакомы с адаптерами и методами PEFT, рекомендуем ознакомиться с ними в официальной документации PEFT: https://huggingface.co/docs/peft

Для загрузки весов адаптера требуется установка PEFT в качестве бэкенда.

#### add_adapter[[transformers.integrations.PeftAdapterMixin.add_adapter]]

```python
add_adapter(adapter_config, adapter_name: str | None = None)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L390)

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

adapter_config (`~peft.PeftConfig`) : конфигурация добавляемого адаптера; поддерживаются методы обучения без промптов (LoRA, IA³ и т. д.).

adapter_name (`str`, *необязательный*, по умолчанию `"default"`) : Имя добавляемого адаптера. Если имя не передано, адаптеру будет присвоено имя по умолчанию.

Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас прочитать о них подробнее в официальной документации PEFT: https://huggingface.co/docs/peft

Добавляет новый адаптер к текущей модели для целей обучения. Если имя адаптера не передано, ему назначается имя по умолчанию в соответствии с конвенцией библиотеки PEFT (в PEFT в качестве имени адаптера по умолчанию используется "default").

Обратите внимание, что вновь добавленный адаптер не активируется автоматически. Для его активации используйте `model.set_adapter`.

#### set_adapter[[transformers.integrations.PeftAdapterMixin.set_adapter]]

```python
set_adapter(adapter_name: list[str] | str)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L430)

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

adapter_name (`Union[list[str], str]`) : Имя адаптера для установки. Также может быть списком строк для установки нескольких адаптеров.

Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас прочитать о них подробнее в официальной документации PEFT: https://huggingface.co/docs/peft

Устанавливает конкретный адаптер, принудительно заставляя модель использовать этот адаптер и отключая остальные адаптеры.

#### disable_adapters[[transformers.integrations.PeftAdapterMixin.disable_adapters]]

```python
disable_adapters()
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L471)

Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас прочитать о них подробнее в официальной документации PEFT: https://huggingface.co/docs/peft

Отключите все адаптеры, подключенные к модели. В результате инференс будет выполняться только с базовой моделью.

#### enable_adapters[[transformers.integrations.PeftAdapterMixin.enable_adapters]]

```python
enable_adapters()
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L490)

Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас прочитать о них подробнее в официальной документации PEFT: https://huggingface.co/docs/peft

Включите адаптеры, подключенные к модели.

#### enable_peft_hotswap[[transformers.integrations.PeftAdapterMixin.enable_peft_hotswap]]

```python
enable_peft_hotswap(target_rank: int = 128, check_compiled: typing.Literal['error', 'warn', 'ignore'] = 'error')
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L353)

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

target_rank (`int`, *необязательный*, по умолчанию `128`) : Наибольший ранг среди всех адаптеров, которые будут загружены.

check_compiled (`str`, *необязательный*, по умолчанию `"error"`) : способ обработки случая, когда модель уже скомпилирована, чего следует избегать. Варианты: - "error" (по умолчанию): вызвать ошибку - "warn": вывести предупреждение - "ignore": ничего не делать

Включает возможность горячей замены адаптеров PEFT с различными рангами или, если модель скомпилирована, без запуска повторной компиляции.

Сейчас hotswapping поддерживается только для LoRA.

Вызов этого метода необходим только при горячей замене адаптеров, если модель скомпилирована или ранги загруженных адаптеров различаются. Если все ранги идентичны, а модель не скомпилирована, горячая замена работает без предварительного вызова этого метода.

#### active_adapters[[transformers.integrations.PeftAdapterMixin.active_adapters]]

```python
active_adapters()
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L508)

Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас прочитать о них подробнее в официальной документации PEFT: https://huggingface.co/docs/peft

Получает текущие активные адаптеры модели. В случае многоадаптерного вывода (комбинации нескольких адаптеров для вывода) возвращает список всех активных адаптеров, чтобы пользователи могли работать с ними соответствующим образом.

Для предыдущих версий PEFT (не поддерживающих вывод с несколькими адаптерами) `module.active_adapter` возвращает одну строку.

#### get_adapter_state_dict[[transformers.integrations.PeftAdapterMixin.get_adapter_state_dict]]

```python
get_adapter_state_dict(adapter_name: str | None = None, state_dict: dict | None = None)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L537)

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

adapter_name (`str`, *необязательный*) : Имя адаптера, из которого нужно получить state dict. Если имя не передано, используется активный адаптер.

state_dict (вложенный словарь `torch.Tensor`, *необязательный*) : Словарь состояния модели. По умолчанию используется `self.state_dict()`, но этот параметр можно задать, если при восстановлении словаря состояния модели требуются особые меры предосторожности (например, при использовании параллелизма моделей).

Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас прочитать о них подробнее в официальной документации PEFT: https://huggingface.co/docs/peft

Получает словарь состояния адаптера, который должен содержать только тензоры весов указанного адаптера adapter_name. Если adapter_name не передан, используется активный адаптер.

#### delete_adapter[[transformers.integrations.PeftAdapterMixin.delete_adapter]]

```python
delete_adapter(adapter_names: list[str] | str)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L622)

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

adapter_names (`Union[list[str], str]`) : Имя или имена удаляемого адаптера.

Удалить адаптер PEFT из базовой модели.

