PEFT documentation

Смешанные типы адаптеров

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 невозможно смешивать разные типы адаптеров. Можно создать модель PEFT с двумя различными адаптерами LoRA (которые могут иметь разные параметры конфигурации), но объединить адаптеры LoRA и LoHa нельзя. Однако с PeftMixedModel это работает, если типы адаптеров совместимы. Основная цель поддержки смешанных типов адаптеров — объединение обученных адаптеров для инференса. Хотя обучение модели со смешанными адаптерами возможно, это не тестировалось и не рекомендуется.

Чтобы загрузить разные типы адаптеров в модель PEFT, используйте PeftMixedModel вместо PeftModel:

from peft import PeftMixedModel

base_model = ...  # load the base model, e.g. from transformers
# load first adapter, which will be called "default"
peft_model = PeftMixedModel.from_pretrained(base_model, <path_to_adapter1>)
peft_model.load_adapter(<path_to_adapter2>, adapter_name="other")
peft_model.set_adapter(["default", "other"])

Метод set_adapter() необходим для активации обоих адаптеров, в противном случае будет активен только первый адаптер. Вы можете продолжать добавлять адаптеры, многократно вызывая add_adapter().

PeftMixedModel не поддерживает сохранение и загрузку смешанных адаптеров. Адаптеры должны быть уже обучены, а для загрузки модели каждый раз необходимо запускать скрипт.

Советы

  • Не все типы адаптеров можно комбинировать. Список совместимых типов приведен в peft.tuners.mixed.COMPATIBLE_TUNER_TYPES. При попытке объединить несовместимые типы адаптеров будет выброшена ошибка.
  • Возможно объединять несколько адаптеров одного типа, что может быть полезно при комбинировании адаптеров с очень разными конфигурациями.
  • Если вы хотите объединить множество различных адаптеров, наиболее производительный способ — добавлять адаптеры одного типа последовательно. Например, добавьте LoRA1, LoRA2, LoHa1, LoHa2 в таком порядке, а не LoRA1, LoHa1, LoRA2 и LoHa2. Хотя порядок может влиять на результат, не существует объективно лучшего порядка, поэтому лучше выбрать самый быстрый.
Update on GitHub