PEFT documentation
FourierFT: дообучение с дискретным преобразованием Фурье
FourierFT: дообучение с дискретным преобразованием Фурье
FourierFT — это метод эффективной по параметрам дообучения, использующий дискретное преобразование Фурье для сжатия настраиваемых весов модели. Этот метод превосходит LoRA в бенчмарке GLUE и типовых задачах классификации с использованием ViT, требуя значительно меньшего количества параметров.
В настоящее время FourierFT имеет следующие ограничения:
- Поддерживаются только слои
nn.Linear. - Квантованные слои не поддерживаются.
Если эти ограничения не подходят для вашего сценария использования, рассмотрите другие методы.
Аннотация из статьи:
Метод адаптации с низким рангом (LoRA) в последнее время привлек значительное внимание в контексте дообучения базовых моделей. Он эффективно сокращает количество обучаемых параметров, используя матрицы низкого ранга A и B для представления изменения весов, то есть Delta W=BA. Несмотря на прогресс, достигнутый с помощью LoRA, при работе с обширными адаптациями для кастомизации или более крупными базовыми моделями возникают проблемы с хранением данных. В данной работе мы стремимся дополнительно сжать количество обучаемых параметров, используя мощную выразительность преобразования Фурье. Конкретно, мы представляем FourierFT, который рассматривает Delta W как матрицу в пространственной области и обучает лишь небольшую долю её спектральных коэффициентов. С помощью обученных спектральных коэффициентов мы выполняем обратное дискретное преобразование Фурье для восстановления Delta W. Эмпирически наш метод FourierFT демонстрирует сопоставимые или лучшие результаты при меньшем количестве параметров по сравнению с LoRA на различных задачах, включая понимание естественного языка, генерацию естественного языка, дообучение по инструкциям и классификацию изображений. Например, при дообучении по инструкциям модели LLaMA2-7B метод FourierFT превосходит LoRA, имея лишь 0.064M обучаемых параметров, в то время как у LoRA их 33.5M.
Обзор бенчмарков
API
FourierFTConfig
класс peft.FourierFTConfig
< 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 = Falsen_frequency: int = 1000scaling: float = 150.0random_loc_seed: Optional[int] = 777fan_in_fan_out: bool = Falsetarget_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = Nonelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonen_frequency_pattern: Optional[dict] = <factory>init_weights: bool = False )
Параметры
- n_frequency (
int) — Количество обучаемых частот для дискретного преобразования Фурье. ‘n_frequency’ — это целое число, большее 0 и не превосходящее d^2 (при условии, что вес W имеет размеры d на d). Кроме того, это количество обучаемых параметров, необходимых для обновления каждого веса delta W. ‘n_frequency’ влияет на производительность и эффективность PEFT. В частности, оно мало влияет на скорость обучения, но более высокие значения (как правило) приводят к увеличению затрат памяти GPU и повышению точности. При одинаковыхtarget_modulesколичество параметров LoRA составляет (2dr/n_frequency) от количества параметров FourierFT. Приведённые ниже примеры настроек ‘n_frequency’ могут служить ориентиром для пользователей. Для задач NLU с моделью RoBERTa-large использование ‘n_frequency’: 1000 позволяет практически достичь результатов, сравнимых с ‘r’: 8 в LoRA. При этом количество параметров LoRA примерно в 16 раз больше, чем у FourierFT. Для задач классификации изображений с моделями Vit-large использование ‘n_frequency’: 3000 позволяет практически достичь результатов, сравнимых с ‘r’: 16 в LoRA, при этом количество параметров LoRA примерно в 11 раз больше, чем у FourierFT. - scaling (
float) — Значение масштабирования для матрицы дельта W. Это важный гиперпараметр, используемый для масштабирования, аналогичный параметру ‘lora_alpha’ в методе LoRA. Значение ‘scaling’ может быть определено в процессе поиска гиперпараметров. Однако, если пользователи хотят пропустить этот процесс, можно обратиться к настройкам в следующих сценариях. Для моделей RoBERTa-base и RoBERTa-large этот параметр можно установить в 100.0 или 150.0 для всех задач NLU (GLUE). Для моделей семейства LLaMA этот параметр можно установить в 300.0 для всех задач instruction tuning. Для моделей ViT-base и ViT-large этот параметр можно установить в 300.0 для всех задач классификации изображений. - random_loc_seed (
int) — Зерно для случайного расположения частот, то есть матрицы спектральных входов. - target_modules (
Union[list[str],str]) — Список имен модулей или регулярное выражение для имен модулей, которые следует заменить на FourierFT. Например, [‘q’, ‘v’] или ‘.decoder.(SelfAttention|EncDecAttention).*(q|v)$‘. Поддерживаются только линейные слои. - exclude_modules (
Optional[Union[List[str], str]]) — Имена модулей, к которым не следует применять адаптер. При передаче строки выполняется сопоставление по регулярному выражению. При передаче списка строк выполняется точное совпадение или проверяется, заканчивается ли имя модуля каким-либо из переданных строк. - fan_in_fan_out (
bool) — Установите это значение в True, если заменяемый слой хранит веса в формате (fan_in, fan_out). - bias (
str) — Тип смещения для FourierFT. Может принимать значения ‘none’, ‘all’ или ‘fourier_only’. - modules_to_save (
list[str]) — Список модулей, помимо слоёв FourierFT, которые должны быть установлены как обучаемые и сохранены в итоговой контрольной точке. Например, в задачах классификации последовательностей или классификации токенов последний слойclassifier/scoreинициализируется случайным образом, поэтому его необходимо сделать обучаемым и сохранить. - layers_to_transform (
Union[list[int],int]) — Индексы слоев для преобразования. Если этот аргумент указан, PEFT будет преобразовывать только те индексы слоев, которые перечислены в этом списке. Если передано одно целое число, PEFT преобразует только слой с этим индексом. - layers_pattern (
Optional[Union[List[str], str]]) — Имя шаблона слоя, используется только еслиlayers_to_transformотличается от None и если шаблон слоя не входит в число общих шаблонов слоёв. Этот параметр должен указывать наnn.ModuleListмодели, который часто называется'layers'или'h'. - n_frequency_pattern (
dict) — Соответствие между именами слоёв или регулярными выражениями и значениями n_frequency, отличными от значения по умолчанию. Например,{model.decoder.layers.0.encoder_attn.k_proj: 1000}. - init_weights (
bool) — Инициализация весов Фурье. Установите False (значение по умолчанию), если спектр инициализируется стандартным нормальным распределением. Установите True, если спектр инициализируется нулями.
Это класс конфигурации для хранения конфигурации модели FourierFTModel.
FourierFTModel
класс peft.FourierFTModel
< 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 (FourierFTConfig) — Конфигурация модели FourierFT.
- adapter_name (
str) — имя адаптера, по умолчанию"default". - low_cpu_mem_usage (
bool,optional, по умолчаниюFalse) — Создаёт пустые веса адаптера на meta-устройстве. Полезно для ускорения процесса загрузки.
Возвращает
torch.nn.Module
Модель FourierFT.
Создаёт модель FourierFT на основе предобученной модели transformers.
Метод подробно описан в https://huggingface.co/papers/2405.03003.
Атрибуты:
- model (PreTrainedModel) — Модель, подлежащая адаптации.
- peft_config (FourierFTConfig): Конфигурация модели Fourier.