PEFT documentation
Функции для интеграции PEFT
Функции для интеграции PEFT
Набор функций, которые могут быть полезны для моделей, не являющихся PeftModel, например, для интеграции с transformers или diffusers
Функции, представленные здесь, можно считать «публичным API» PEFT, поэтому их безопасно использовать в пакетах, обеспечивающих интеграцию с PEFT.
Приведите типы данных весов адаптера
peft.tuners.tuners_utils.cast_adapter_dtype
< source >( model: nn.Moduleadapter_name: strautocast_adapter_dtype: bool = True )
Вспомогательный метод для приведения весов адаптера к правильному типу данных (dtype). Он переназначает новые параметры слоям адаптера; если какой-либо объект ссылается на старые параметры, они не будут обновлены.
В настоящее время это приводит только к повышению точности float-типов до float32.
Удалить адаптер PEFT из модели
peft.tuners.tuners_utils.delete_adapter
< source >( model: nn.Moduleadapter_name: strprefix: strlayer_cls: type[BaseTunerLayer] = <class 'peft.tuners.tuners_utils.BaseTunerLayer'> ) → new_adapter (list[str] | None)
Параметры
- model (
nn.Module) — Модель, из которой следует удалить адаптер. - adapter_name (str) — Имя удаляемого адаптера.
- prefix (str) — Префикс метода PEFT, например, “lora_” для LoRA.
- layer_cls (тип, необязательно) —
Класс слоя адаптера. По умолчанию
BaseTunerLayer.
Возвращает
new_adapter (list[str] | None)
Имя оставшегося адаптера после удаления или None, если активных адаптеров не осталось. Используйте это значение для установки нового активного адаптера модели при необходимости.
Удаление существующего адаптера PEFT.
Примечание: эта функция не удаляет конфигурацию PEFT с модели, если она есть. Также она не полностью очищает слои PEFT, если удалён последний адаптер PEFT. Для этого рассмотрите возможность использования model.unload(), если вы используете экземпляр модели PEFT, или просто перезагрузите базовую модель.
Получить state dict адаптера PEFT
peft.get_peft_model_state_dict
< source >( modelstate_dict = Noneadapter_name: str = 'default'unwrap_compiled: bool = Falsesave_embedding_layers: bool | Literal['auto'] = 'auto' )
Параметры
- model (PeftModel) — Модель Peft. При использовании torch.nn.DistributedDataParallel, DeepSpeed или FSDP моделью должна быть базовая/развернутая модель (т.е. model.module).
- state_dict (
dict, необязательный, по умолчаниюNone) — Словарь состояния модели. Если не указан, будет использован словарь состояния переданной модели. - adapter_name (
str, необязательный, по умолчанию"default") — Имя адаптера, состояние которого (state dict) должно быть возвращено. - unwrap_compiled (
bool, необязательный, по умолчаниюFalse) — Следует ли развернуть модель, если использовался torch.compile. - save_embedding_layers (
Union[bool, str], , необязательный, по умолчаниюauto) — ЕслиTrue, сохраняет слои эмбеддингов в дополнение к весам адаптеров. Еслиauto, проверяет общие слои эмбеддинговpeft.utils.other.EMBEDDING_LAYER_NAMESвtarget_modulesконфигурации, если они доступны. На основе этого устанавливает булев флаг. Работает только с моделями 🤗 transformers.
Получите state dict указанного адаптера модели PEFT.
Это включает только параметры PEFT, а не параметры базовой модели. Таким образом, возвращаемый state_dict, как правило, значительно меньше по размеру, чем полная модель. Чтобы получить полный state_dict, просто вызовите model.state_dict().
Если выбранные записи содержат распределённые тензоры (например, FSDP2 или DTensor TP), все участвующие ранги должны вызвать эту функцию: сбор этих записей в полные тензоры является коллективной операцией. Невыбранные веса базовой модели остаются разбитыми на фрагменты.
Обратите внимание, что имя адаптера удаляется из state_dict, так как это произвольное имя, которое может быть изменено при загрузке адаптера. Например, если имя адаптера — 'default', а исходный ключ — 'model.q_proj.lora_A.default.weight', то возвращаемый ключ будет 'model.q_proj.lora_A.weight'. Используйте эту функцию вместе с set_peft_model_state_dict(), чтобы учесть имя адаптера при загрузке весов.
Внедрите адаптер PEFT в модель на основе конфигурации PEFT
peft.inject_adapter_in_model
< source >( peft_config: PeftConfigmodel: torch.nn.Moduleadapter_name: str = 'default'low_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )
Параметры
- peft_config (
PeftConfig) — Объект конфигурации, содержащий параметры модели PEFT. - model (
torch.nn.Module) — Входная модель, в которую будет внедрен адаптер. - adapter_name (
str,optional, по умолчанию"default") — Имя адаптера, который будет внедрён. Если не указано, используется имя адаптера по умолчанию («default»). - low_cpu_mem_usage (
bool,optional, по умолчаниюFalse) — Создаёт пустые веса адаптера на meta-устройстве. Полезно для ускорения процесса загрузки. - state_dict (
dict, необязательный, по умолчаниюNone) — Если сюда переданstate_dict, адаптеры будут внедряться на основе записей в state_dict. Это может быть полезно, когда точныеtarget_modulesметода PEFT неизвестны, например, если чекпоинт был создан без метаданных. Обратите внимание, что значения изstate_dictне используются, только ключи применяются для определения правильных слоев, которые следует адаптировать.
Создайте слои PEFT и внедрите их в модель на месте.
В настоящее время API не поддерживает методы обучения промптов, адаптивные промпты или тюнеры, которые сохраняют состояние адаптера, общим для нескольких целевых слоёв. Для последних используйте get_peft_model().
Эта функция похожа на get_peft_model(), но не возвращает экземпляр PeftModel. Вместо этого она возвращает исходный, изменённый экземпляр переданной модели.
Установите активный(ые) адаптер(ы) PEFT модели
peft.tuners.tuners_utils.set_adapter
< source >( modeladapter_name: str | list[str]inference_mode: bool = Falselayer_cls: type[BaseTunerLayer] = <class 'peft.tuners.tuners_utils.BaseTunerLayer'> )
Параметры
- model (
nn.Module) — Модель, для которой следует установить адаптер(ы). - adapter_name (str, list[str]) — Имя или список имён адаптеров, которые нужно установить как активные
- inference_mode (bool, optional) —
Следует ли заморозить активированный адаптер (т. е.
requires_grad=False). По умолчанию False. - layer_cls (тип, необязательно) —
Класс слоя адаптера. По умолчанию
BaseTunerLayer.
Установите активный(ые) адаптер(ы) PEFT модели.
Активными адаптерами называются те адаптеры, которые участвуют в прямом проходе. Используйте эту функцию, если хотите переключаться между несколькими адаптерами PEFT.
Установите режим обучения для указанных адаптеров
peft.tuners.tuners_utils.set_training
< source >( modeladapter_names: str | Sequence[str]training: bool = True )
Параметры
- model (
nn.Module) — Модель, для которой следует обновить режимы обучения адаптерных модулей. - adapter_names (
strилиSequence[str]) — Имя адаптера или список имён адаптеров, для которых нужно обновить режим обучения. - training (
bool, необязательный) — Включить (True, по умолчанию) или отключить (False) режим обучения.
Включить или отключить режим обучения для указанных модулей адаптеров.
Установите атрибут requires_grad для указанных адаптеров
peft.tuners.tuners_utils.set_requires_grad
< source >( modeladapter_names: str | Sequence[str]requires_grad: bool = True )
Параметры
- model (
nn.Module) — Модель, для которой необходимо обновить требования к градиентам адаптера. - adapter_names (
strилиSequence[str]) — Имя адаптера или список имён адаптеров, для которых следует включить/отключить градиенты. - requires_grad (
bool, необязательный) — Включить (True, по умолчанию) или отключить (False).
Включить или отключить градиенты для указанных адаптера(ов).
Загрузите веса словаря состояний PEFT в модель
peft.set_peft_model_state_dict
< source >( modelpeft_model_state_dictadapter_name = 'default'ignore_mismatched_sizes: bool = Falselow_cpu_mem_usage: bool = False )
Параметры
- model (PeftModel) — Модель Peft.
- peft_model_state_dict (
dict) — Словарь состояния модели Peft. - adapter_name (
str, необязательный, по умолчанию"default") — Имя адаптера, для которого следует установить state dict. - ignore_mismatched_sizes (
bool, необязательный, по умолчаниюFalse) — Следует ли игнорировать несоответствие размеров в state dict. - low_cpu_mem_usage (
bool,optional, по умолчаниюFalse) — Этот аргумент должен бытьTrue, еслиmodelбыла загружена с весами адаптера на мета-устройстве, например, после вызоваinject_adapter_in_modelсlow_cpu_mem_usage=True. В противном случае оставьте значениеFalse.
Установите state dict модели PEFT.
Если задан state_dict PEFT (как возвращаемый get_peft_model_state_dict()), вставьте веса в модель. В модели должны уже быть установлены адаптеры PEFT (например, с помощью inject_adapter_in_model()).
Настройка весов адаптера также обеспечивает повторное вставку имени адаптера. Это имя может отличаться от того, которое изначально использовалось для обучения адаптера.