Transformers documentation
PEFT
PEFT
Класс PeftAdapterMixin предоставляет функции из библиотеки PEFT для управления адаптерами в Transformers. Этот миксин поддерживает все методы PEFT, не основанные на обучении промптов (LoRA, IA3, AdaLoRA и другие). Методы prefix tuning (prompt tuning, prompt learning) не поддерживаются, поскольку их невозможно внедрить в модуль torch.
Класс, содержащий все функции для загрузки и использования весов адаптеров, поддерживаемых в библиотеке 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
< source >( peft_model_id: str | None = Noneadapter_name: str | None = Nonepeft_config: dict[str, typing.Any] | None = Noneadapter_state_dict: dict[str, 'torch.Tensor'] | None = Nonelow_cpu_mem_usage: bool = Falseis_trainable: bool = Falsehotswap: typing.Union[bool, typing.Literal['auto']] = 'auto'local_files_only: bool = Falseadapter_kwargs: dict[str, typing.Any] | None = Noneload_config: typing.Optional[ForwardRef('LoadStateDictConfig')] = None**kwargs )
Параметры
- 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³ и т. д.). Этот аргумент используется, если пользователь напрямую передаёт state dict PEFT. - adapter_state_dict (
dict[str, torch.Tensor], необязательный) — Словарь состояния адаптера для загрузки. Этот аргумент используется, если пользователи напрямую передают словари состояния PEFT. - low_cpu_mem_usage (
bool, необязательный, по умолчаниюFalse) — Снижает потребление памяти при загрузке адаптера PEFT. Это также должно ускорить процесс загрузки. - is_trainable (
bool, необязательный, по умолчаниюFalse) — Определяет, должен ли адаптер быть обучаемым. ЕслиFalse, адаптер будет заморожен и сможет использоваться только для инференса. - hotswap — (
"auto"илиbool, необязательный, по умолчанию"auto") Заменяет ли существующий адаптер (LoRA) новым загруженным адаптером на месте. Это означает, что вместо загрузки дополнительного адаптера существующие веса адаптера будут заменены весами нового адаптера. Это может быть быстрее и экономнее по памяти. Однако главное преимущество hotswap состоит в том, что при компиляции модели с помощью torch.compile загрузка нового адаптера не требует повторной компиляции модели. При использовании hotswap переданныйadapter_nameдолжен быть именем уже загруженного адаптера.Если у нового адаптера и старого адаптера разные ранги и/или значения LoRA alpha (т. е. масштабирование), перед загрузкой адаптера необходимо вызвать дополнительный метод:
Загрузите веса адаптера из файла или удалённой папки на Hub. Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас ознакомиться с ними в официальной документации PEFT: https://huggingface.co/docs/peft
Для загрузки весов адаптера требуется установка PEFT в качестве бэкенда.
add_adapter
< source >( adapter_configadapter_name: str | None = None )
Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас ознакомиться с ними подробнее в официальной документации PEFT: https://huggingface.co/docs/peft
Добавляет новый адаптер к текущей модели для целей обучения. Если имя адаптера не передано, ему будет присвоено имя по умолчанию в соответствии с конвенцией библиотеки PEFT (в PEFT в качестве имени адаптера по умолчанию используется «default»).
Обратите внимание, что вновь добавленный адаптер не активируется автоматически. Для его активации используйте model.set_adapter.
set_adapter
< source >( adapter_name: list[str] | str )
Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас ознакомиться с ними подробнее в официальной документации PEFT: https://huggingface.co/docs/peft
Устанавливает конкретный адаптер, принудительно заставляя модель использовать этот адаптер и отключая остальные адаптеры.
Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас ознакомиться с ними подробнее в официальной документации PEFT: https://huggingface.co/docs/peft
Отключите все адаптеры, подключенные к модели. В результате инференс будет выполняться только с базовой моделью.
Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас ознакомиться с ними подробнее в официальной документации PEFT: https://huggingface.co/docs/peft
Включите адаптеры, подключенные к модели.
enable_peft_hotswap
< source >( target_rank: int = 128check_compiled: typing.Literal['error', 'warn', 'ignore'] = 'error' )
Параметры
- target_rank (
int, необязательный, по умолчанию128) — Наибольший ранг среди всех адаптеров, которые будут загружены. - check_compiled (
str, необязательный, по умолчанию"error") — Как обрабатывать ситуацию, когда модель уже скомпилирована (в целом этого следует избегать). Варианты:- “error” (по умолчанию): вызывать ошибку
- “warn”: выдать предупреждение
- “ignore”: ничего не делать
Позволяет выполнять горячую замену адаптеров PEFT с различными рангами или, если модель скомпилирована, без запуска повторной компиляции.
Сейчас hotswapping поддерживается только для LoRA.
Вызов этого метода необходим только при горячей замене адаптеров, если модель скомпилирована или ранги загруженных адаптеров различаются. Если все ранги идентичны, а модель не скомпилирована, горячая замена работает без предварительного вызова этого метода.
Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас ознакомиться с ними подробнее в официальной документации PEFT: https://huggingface.co/docs/peft
Получает текущие активные адаптеры модели. В случае многоадаптерного вывода (комбинации нескольких адаптеров для вывода) возвращает список всех активных адаптеров, чтобы пользователи могли работать с ними соответствующим образом.
Для предыдущих версий PEFT (не поддерживающих вывод с несколькими адаптерами) module.active_adapter возвращает
одну строку.
get_adapter_state_dict
< source >( adapter_name: str | None = Nonestate_dict: dict | None = None )
Параметры
- 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
< source >( adapter_names: list[str] | str )
Удалить адаптер PEFT из базовой модели.