PEFT documentation
Настройка LayerNorm
Настройка 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
< 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: 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
< source >( 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.