PEFT documentation
Llama-Adapter
Llama-Adapter

Llama-Adapter — это метод PEFT, специально разработанный для превращения Llama в модель, следующую инструкциям. Модель Llama замораживается, и обучается только набор адаптационных промптов, добавляемых в начало входных токенов инструкции. Поскольку случайно инициализированные модули, вставляемые в модель, могут привести к потере части её существующих знаний, Llama-Adapter использует внимание с нулевой инициализацией и нулевым гейтингом, чтобы постепенно добавлять инструктивные промпты в модель.
Аннотация из статьи:
Мы представляем LLaMA-Adapter — лёгкий метод адаптации для эффективной дообучения LLaMA в модель, следующую инструкциям. Используя 52K демонстраций self-instruct, LLaMA-Adapter добавляет лишь 1,2M обучаемых параметров к замороженной модели LLaMA 7B, а дообучение занимает менее часа на 8 GPU A100. Конкретно, мы используем набор обучаемых адаптационных промптов, которые добавляются к входным токенам текста на более высоких слоях трансформера. Затем предлагается механизм внимания с нулевой инициализацией и нулевым гейтингом, который адаптивно внедряет новые инструктивные сигналы в LLaMA, при этом эффективно сохраняя её предобученные знания. Благодаря эффективному обучению LLaMA-Adapter генерирует ответы высокого качества, сопоставимые с Alpaca, полностью дообученным на 7B параметрах. Кроме того, наш подход можно просто расширить на мультимодальный вход, например, изображения, для LLaMA с условием по изображению, что обеспечивает превосходную способность к рассуждениям на ScienceQA. Наш код доступен по адресу https://github.com/ZrrSkywalker/LLaMA-Adapter.
Обзор бенчмарков
API
AdaptionPromptConfig
класс peft.AdaptionPromptConfig
< source >( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falsetarget_modules: str = Noneadapter_len: int = Noneadapter_layers: int = None )
Хранит конфигурацию AdaptionPromptModel.
AdaptionPromptModel
Реализует адаптивные промпты, описанные в https://huggingface.co/papers/2303.16199.
Верхние L модули внимания заменяются модулями AdaptedAttention, которые оборачивают исходные, но вставляют обучаемые промпты с гейтами (для нулевой инициализации).
Заметки о многоадаптерном паттерне:
- Мы храним состояния различных адаптеров, поддерживая словарь модулей AdaptedAttention, индексируемый по имени адаптера.
- Каждый раз при переключении адаптеров мы удаляем модули текущего активного адаптера из модели, сохраняем их в словаре и заменяем модулями нового адаптера.
- Чтобы избежать дублирования и потенциально несовместимого состояния, текущий активный адаптер всегда удаляется из словаря.
- Отключение адаптера также приведет к удалению модулей из модели.
Добавить адаптер с указанным именем и конфигурацией.
Удалить адаптер с указанным именем.
Отключите адаптерные слои, заменив модули AdaptedAttention.
Включите адаптерные слои, подставив кэшированные модули AdaptedAttention.
Установите для модели адаптер с указанным именем.