PEFT documentation

PVeRA: вероятностная адаптация случайных матриц на основе векторов

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

PVeRA: вероятностная адаптация случайных матриц на основе векторов

PVeRA — это метод эффективной по параметрам дообучения, основанный на VeRA и относящийся к семейству адаптеров на базе LoRA. Он сохраняет крайне низкий бюджет параметров VeRA, но повышает качество работы за счёт обучения распределения латентных адаптаций. Это также позволяет моделям, адаптированным с помощью PVeRA, генерировать оценки доверительных интервалов Монте-Карло путём выборки из обученного распределения на этапе инференса.

При сохранении параметров адаптера можно отказаться от хранения матриц низкого ранга, установив save_projection=False в PveraConfig. В этом случае эти матрицы будут восстановлены на основе фиксированного случайного зерна из аргумента projection_prng_key. Это уменьшает размер контрольной точки, но мы не можем гарантировать воспроизводимость на всех устройствах и во всех будущих версиях PyTorch. Если вы хотите обеспечить воспроизводимость, установите save_projection=True (это значение по умолчанию).

Для обработки различных форм адаптируемых слоёв PVeRA инициализирует общие матрицы A и B максимальным требуемым размером для каждого измерения. Во время прямого прохода подматрицы A и B для данного слоя вырезаются из этих общих матриц и используются, как описано в статье. Например, адаптация двух линейных слоёв форм (100, 20) и (80, 50) создаст матрицы A и B форм (rank, 50) и (100, rank) соответственно. Затем, чтобы адаптировать слой формы (100, 20), будут извлечены подматрицы A и B форм (rank, 20) и (100, rank).

В настоящее время PVeRA имеет следующее ограничение:

  • Поддерживаются только слои nn.Linear.
  • Латентное представление не является легкодоступным для обучения с использованием расхождения Кульбака-Лейблера.

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

В последние годы появились крупные фундаментальные модели, которые продвигают границы производительности для широкого спектра задач. Обучение или даже дообучение таких моделей требует огромных наборов данных и вычислительных ресурсов, которые часто дефицитны и дороги. Методы адаптации предлагают вычислительно эффективное решение для преодоления этих ограничений, позволяя дообучать такие модели на малых объёмах данных и вычислительных мощностях. Это достигается путём добавления новых обучаемых модулей к замороженным базовым моделям, содержащим лишь малую долю обучаемых параметров, и настройки только этих модулей на новых задачах. Недавно было показано, что адаптер VeRA превосходит другие методы параметрически эффективной адаптации за счёт использования пары замороженных случайных матриц низкого ранга, общих для всех слоёв. В данной статье мы предлагаем PVeRA — вероятностную версию адаптера VeRA, которая изменяет матрицы низкого ранга VeRA вероятностным образом. Это изменение естественным образом позволяет учитывать внутреннюю неоднозначность входных данных и допускает различные конфигурации выборки при обучении и тестировании. Комплексная оценка была проведена на бенчмарке VTAB-1k с семью адаптерами, при этом PVeRA показал лучшие результаты по сравнению с VeRA и другими адаптерами.

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

API

PveraConfig

класс peft.PveraConfig

< >

( 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 = Falser: int = 256target_modules: Optional[Union[list[str], str]] = Noneprojection_prng_key: int = 0save_projection: bool = Truepvera_dropout: float = 0.0d_initial: float = 0.1fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: Optional[list[str]] = Noneinit_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonesample_at_inference: bool = Falsegenerator_seed: Optional[int] = None )

Параметры

  • r (int, необязательный, по умолчанию 256) — размерность параметра PVeRA («ранг»). Здесь следует выбирать значения выше, чем ранги LoRA, поскольку PVeRA разделяет параметры между слоями и, следовательно, использует значительно меньше параметров, чем LoRA.
  • target_modules (Union[List[str], str]) — Имена модулей, к которым следует применить PVeRA. Поддерживаются только линейные слои. При передаче строки выполняется сопоставление по регулярному выражению. Если указано значение ‘all-linear’, выбираются все линейные/Conv1D модули. Если это поле не указано, модули выбираются в соответствии с архитектурой модели. Если архитектура неизвестна, будет выброшена ошибка.
  • projection_prng_key (int) — Ключ инициализации PRNG для PVeRA. Используется для инициализации pvera_A и pvera_B для новых моделей или при загрузке контрольной точки, в которую эти проекции не были включены. По умолчанию 0.
  • save_projection (bool) — Сохранять ли проекции pvera_A / pvera_B в state dict вместе с весами lambda_b / lambda_d для каждого слоя. Это увеличит размер контрольной точки, но гарантирует возможность перезагрузки контрольной точки на всех конфигурациях системы. По умолчанию True.
  • pvera_dropout (float) — Вероятность dropout для слоёв PVeRA.
  • d_initial (float, необязательный, по умолчанию 0.1) — Начальное значение для вектора pvera_lambda_d, используемое при инициализации параметров PVeRA. Рекомендуется использовать малые значения (<=0.1).
  • fan_in_fan_out (bool) — Установите это значение в True, если заменяемый слой хранит веса в формате (fan_in, fan_out). Например, gpt-2 использует Conv1D, который хранит веса в формате (fan_in, fan_out), поэтому это значение должно быть установлено в True.
  • bias (str) — Тип смещения для PVeRA. Может принимать значения ‘none’, ‘all’ или ‘pvera_only’. Если указано ‘all’ или ‘pvera_only’, соответствующие смещения будут обновляться во время обучения. Обратите внимание, что это означает: даже при отключении адаптеров модель не будет выдавать тот же результат, что и базовая модель без адаптации.
  • modules_to_save (List[str]) — Список модулей, помимо слоёв PVeRA, которые должны быть установлены как обучаемые и сохранены в итоговой контрольной точке.
  • init_weights (bool) — Определяет, следует ли инициализировать веса слоев PVeRA с использованием их стандартной инициализации. Не изменяйте этот параметр, если вы точно не знаете, что делаете.
  • layers_to_transform (Union[List[int],int]) — Индексы слоев для преобразования. Если этот аргумент указан, преобразования PVeRA применяются к слоям с индексами, указанными в этом списке. Если передано одно целое число, преобразования PVeRA применяются к слою с этим индексом.
  • layers_pattern (Optional[Union[List[str], str]]) — Имя шаблона слоя, используется только в том случае, если layers_to_transform отличается от None. Этот параметр должен указывать на nn.ModuleList модели, который часто называется 'layers' или 'h'.
  • sample_at_inference (bool, по умолчанию False) — Определяет, следует ли при выводе данных (inference) выполнять выборку из обученного распределения PVeRA. Если значение равно False, используется обученное среднее.
  • generator_seed (int, по умолчанию None) — Случайный сид для генератора, используемого для выборки из изученного распределения.

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

Статья: https://www.arxiv.org/abs/2512.07703.

PveraModel

класс peft.PveraModel

< >

( 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 (PreTrainedModel) — Модель, подлежащая адаптации.
  • config (PveraConfig) — конфигурация модели PVeRA.
  • adapter_name (str) — имя адаптера, по умолчанию "default".
  • low_cpu_mem_usage (bool, optional, по умолчанию False) — Создаёт пустые веса адаптера на meta-устройстве. Полезно для ускорения процесса загрузки.

Возвращает

torch.nn.Module

Модель PVeRA.

Создаёт модель Probabilistic Vector-based Random Matrix Adaptation (PVeRA) на основе предобученной модели transformers.

Пример:

>>> from transformers import AutoModel
>>> from peft import PveraConfig, get_peft_model

>>> base_model = AutoModel.from_pretrained("facebook/dinov2-base")
>>> config = PveraConfig(r=128, sample_at_inference=False)
>>> model = get_peft_model(base_model, config)

Атрибуты:

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