PEFT documentation

Настройка LayerNorm

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

Настройка LayerNorm

Настройка LayerNorm (LN Tuning) — это метод PEFT, который выполняет дообучение только параметров слоёв LayerNorm в модели. В статье было протестировано качество работы этого метода на больших языковых моделях и показано, что он способен обеспечивать высокую производительность при значительном сокращении числа обучаемых параметров и потребления памяти GPU. Однако метод не ограничен языковыми моделями и может применяться к любой модели, использующей слои LayerNorm. В данной реализации по умолчанию выполняется дообучение всех слоёв layernorm внутри модели, но можно настроить дообучение и других типов слоёв, таких как MLP или Attention. Для этого необходимо указать target_modules в LNTuningConfig.

Аннотация из статьи:

В данной статье представлена эффективная стратегия преобразования больших языковых моделей (LLM) в мультимодальные большие языковые модели (MLLM). Рассматривая этот процесс как адаптацию к новой области, то есть переход от понимания текста к работе с несколькими модальностями, мы обнаруживаем, что для достижения высоких результатов достаточно настраивать только LayerNorm в каждом блоке внимания. Более того, при сравнении с другими методами настройки, такими как полная дообучение параметров или LoRA, преимущества данного подхода в плане эффективности весьма значительны. Например, по сравнению с LoRA на модели масштаба 13B, производительность в среднем возрастает более чем на 20% по пяти мультимодальным задачам, при этом количество обучаемых параметров сокращается на 41,9%, а потребление памяти GPU снижается на 17,6%. Помимо этой стратегии настройки LayerNorm, мы показываем, что выборочная настройка только на диалоговых данных позволяет дополнительно повысить эффективность. Помимо этих эмпирических результатов, мы проводим комплексный анализ, чтобы исследовать роль LayerNorm в адаптации LLM к мультимодальной области и в повышении выразительной способности модели.

Обзор бенчмарков

API

LNTuningConfig

класс peft.LNTuningConfig

< >

( 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: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[Union[list[str], str]] = None )

Параметры

  • target_modules (Optional[Union[List[str], str]]) — Список имен модулей или регулярное выражение для имен модулей, которые следует заменить на LNTuning. Например, ‘.decoder.’ или ‘.encoder.’. Если этот параметр не указан, модули будут выбраны в соответствии с архитектурой модели. Если архитектура неизвестна, будет выброшена ошибка — в этом случае необходимо указать целевые модули вручную.
  • exclude_modules (Optional[Union[List[str], str]]) — Имена модулей, к которым не следует применять адаптер. При передаче строки выполняется сопоставление по регулярному выражению. При передаче списка строк выполняется точное совпадение или проверяется, заканчивается ли имя модуля каким-либо из переданных строк.
  • modules_to_save (Optional[Union[List[str], str]]) — Список модулей, которые будут установлены как обучаемые и сохранены в итоговой контрольной точке. Например, в задачах классификации последовательностей или классификации токенов последний слой classifier/score инициализируется случайным образом, поэтому его необходимо сделать обучаемым и сохранить.

Это класс конфигурации для хранения конфигурации модели LNTuningModel.

LNTuningModel

класс peft.LNTuningModel

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None ) → ‘torch.nn.Module’

Параметры

  • model (torch.nn.Module) — Модель, подлежащая адаптации.
  • config (LNTuningConfig) — конфигурация модели LN tuning.
  • adapter_name (str) — имя адаптера, по умолчанию "default".
  • low_cpu_mem_usage (bool, optional, по умолчанию False) — Этот параметр не влияет на настройку LN, но присутствует для согласованности с другими методами PEFT.

Возвращает

‘torch.nn.Module’

Адаптированная модель с включенным LayerNorm.

Создаёт настройку LayerNorm из предобученной трансформерной модели.

Метод подробно описан в https://huggingface.co/papers/2312.11420.

Пример:

>>> from transformers import AutoModelForCausalLM
>>> from peft import get_peft_model, TaskType, LNTuningConfig

>>> peft_config = LNTuningConfig(
...     task_type=TaskType.CAUSAL_LM,
... )

>>> model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")
>>> model = get_peft_model(model, peft_config)
>>> model.print_trainable_parameters()

Атрибуты:

  • model (PreTrainedModel) — Модель, подлежащая адаптации.
  • peft_config (LNTuningConfig): конфигурация модели LN tuning.
Update on GitHub