PEFT documentation

Функции для интеграции PEFT

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Функции для интеграции PEFT

Набор функций, которые могут быть полезны для моделей, не являющихся PeftModel, например, для интеграции с transformers или diffusers

Функции, представленные здесь, можно считать «публичным API» PEFT, поэтому их безопасно использовать в пакетах, обеспечивающих интеграцию с PEFT.

Приведите типы данных весов адаптера

peft.tuners.tuners_utils.cast_adapter_dtype

< >

( model: nn.Moduleadapter_name: strautocast_adapter_dtype: bool = True )

Параметры

  • adapter_name (str) — Имя адаптера.
  • autocast_adapter_dtype (bool, необязательный) — Определяет, следует ли автоматически приводить тип данных адаптера. По умолчанию True.

Вспомогательный метод для приведения весов адаптера к правильному типу данных (dtype). Он переназначает новые параметры слоям адаптера; если какой-либо объект ссылается на старые параметры, они не будут обновлены.

В настоящее время это приводит только к повышению точности float-типов до float32.

Удалить адаптер PEFT из модели

peft.tuners.tuners_utils.delete_adapter

< >

( 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

< >

( 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

< >

( 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

< >

( 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

< >

( 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

< >

( 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

< >

( 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()).

Настройка весов адаптера также обеспечивает повторное вставку имени адаптера. Это имя может отличаться от того, которое изначально использовалось для обучения адаптера.

Update on GitHub