PEFT documentation

Llama-Adapter

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

Llama-Adapter

LLaMA-Adapter: Efficient Fine-tuning of Language Models with Zero-init Attention

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

< >

( 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

класс peft.AdaptionPromptModel

< >

( modelconfigs: dictadapter_name: str )

Реализует адаптивные промпты, описанные в https://huggingface.co/papers/2303.16199.

Верхние L модули внимания заменяются модулями AdaptedAttention, которые оборачивают исходные, но вставляют обучаемые промпты с гейтами (для нулевой инициализации).

Заметки о многоадаптерном паттерне:

  • Мы храним состояния различных адаптеров, поддерживая словарь модулей AdaptedAttention, индексируемый по имени адаптера.
  • Каждый раз при переключении адаптеров мы удаляем модули текущего активного адаптера из модели, сохраняем их в словаре и заменяем модулями нового адаптера.
  • Чтобы избежать дублирования и потенциально несовместимого состояния, текущий активный адаптер всегда удаляется из словаря.
  • Отключение адаптера также приведет к удалению модулей из модели.

add_adapter

< >

( adapter_name: strconfig: AdaptionPromptConfig )

Добавить адаптер с указанным именем и конфигурацией.

delete_adapter

< >

( adapter_name: str )

Удалить адаптер с указанным именем.

disable_adapter_layers

< >

( )

Отключите адаптерные слои, заменив модули AdaptedAttention.

enable_adapter_layers

< >

( )

Включите адаптерные слои, подставив кэшированные модули AdaptedAttention.

set_adapter

< >

( adapter_name: strinference_mode: bool = False )

Установите для модели адаптер с указанным именем.

Update on GitHub