PEFT documentation
Смешанные типы адаптеров
Смешанные типы адаптеров
Как правило, в 🤗 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. Хотя порядок может влиять на результат, не существует объективно лучшего порядка, поэтому лучше выбрать самый быстрый.