PEFT documentation
VB-LoRA: Экстремально эффективная дообучение с использованием банков векторов
VB-LoRA: Экстремально эффективная дообучение с использованием банков векторов
Обзор
VB-LoRA — это метод эффективной дообучения, расширяющий LoRA за счёт обучения схеме разделения параметров на уровне подвекторов, что обеспечивает значительно более высокую эффективность использования параметров. Это делает VB-LoRA особенно полезным в сценариях, где критичны затраты на хранение и передачу данных. Метод работает путём разложения матриц низкого ранга из разных слоёв и модулей, таких как K, Q, V и FFN, на подвекторы, которые затем глобально разделяются через банк векторов.
Аннотация из статьи:
По мере того как внедрение больших языковых моделей расширяется, а потребность в кастомизации моделей для конкретного пользователя или задачи возрастает, методы параметрически эффективной дообучения (PEFT), такие как адаптация низкого ранга (LoRA) и её варианты, несут значительные затраты на хранение и передачу данных. Чтобы дополнительно сократить количество хранимых параметров, мы вводим парадигму «разделяй и делись», которая преодолевает ограничения низкорангового разложения по размерностям матриц, модулям и слоям за счёт глобального обмена параметрами через векторный банк. В качестве реализации этой парадигмы для LoRA наше предложенное VB-LoRA компонирует все низкоранговые матрицы LoRA из общего векторного банка с использованием дифференцируемого модуля top-k смешивания. VB-LoRA достигает экстремальной параметрической эффективности, сохраняя при этом сопоставимые или лучшие результаты по сравнению с передовыми методами PEFT. Многочисленные эксперименты демонстрируют эффективность VB-LoRA на задачах понимания естественного языка, генерации естественного языка и дообучения по инструкциям. При дообучении модели Llama2-13B VB-LoRA использует лишь 0,4% хранимых параметров LoRA, при этом достигая превосходных результатов.
Советы по использованию
VB-LoRA использует разреженный модуль top-k для обучения механизму шаринга. При сохранении параметров адаптера можно сохранить только веса top-k и их индексы, установив
save_only_topk_weights = TrueвVBLoRAConfig, или сохранить все обучаемые логиты, установив это значение вFalse. Включениеsave_only_topk_weights = Trueзначительно сокращает занимаемое место; например, для Llama2-7B размер файла хранения уменьшается с 308 МБ до 2,5 МБ. Обратите внимание, что модели, сохранённые сsave_only_topk_weights = True, предназначены только для слияния или инференса и не могут использоваться для возобновления обучения.У VB-LoRA есть два набора параметров обучения: параметры векторного банка и параметры логитов. На практике мы обнаружили, что для параметров логитов требуется более высокая скорость обучения, а для параметров векторного банка — более низкая. При использовании оптимизатора AdamW типичные значения скорости обучения составляют 0.01 для логитов и 0.001 для параметров векторного банка.
Обзор бенчмарков
API
VBLoRAConfig
класс peft.VBLoRAConfig
< 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 = Falser: int = 4num_vectors: int = 256vector_length: int = 256topk: int = 2target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonesave_only_topk_weights: bool = Falsevblora_dropout: float = 0.0fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: Optional[list[str]] = Noneinit_vector_bank_bound: float = 0.02init_logits_std: float = 0.1layers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = None )
Параметры
- r (
int) — Ранг инкрементальных матриц. - num_vectors (
int) — Количество векторов в векторном банке. Используйте более высокие значения при увеличении размера модели. - vector_length (
int) — Длина векторов в векторном банке. Длина векторов должна делиться на размерность скрытого слоя модели. - topk (
int) — Значение K для отбора top-K. Увеличение значения K приводит к росту размера сохраняемой модели. На практике установка K=2 обычно обеспечивает наилучшее сочетание производительности и эффективности по параметрам. Подробнее см. обсуждение в статье. - target_modules (
Union[List[str], str]) — Имена модулей, к которым следует применить адаптер. Если это значение указано, будут заменены только модули с указанными именами. При передаче строки выполняется сопоставление по регулярному выражению. При передаче списка строк выполняется точное совпадение или проверяется, заканчивается ли имя модуля каким-либо из переданных строк. Если это значение указано как ‘all-linear’, выбираются все линейные/Conv1D модули, за исключением выходного слоя. Если это значение не указано, модули выбираются в соответствии с архитектурой модели. Если архитектура неизвестна, будет выброшена ошибка — в этом случае следует указать целевые модули вручную. - exclude_modules (
Optional[Union[List[str], str]]) — Имена модулей, к которым не следует применять адаптер. При передаче строки выполняется сопоставление по регулярному выражению. При передаче списка строк выполняется точное совпадение или проверяется, заканчивается ли имя модуля каким-либо из переданных строк. - save_only_topk_weights (
bool) — Сохранять только веса topk. Установкаsave_only_topk_weights = Trueзначительно уменьшает объем занимаемого места. Однако модели, сохраненные в этом режиме, можно использовать только для слияния или инференса, но не для возобновления обучения. - vblora_dropout (
float) — Вероятность dropout для слоёв VBLoRA. - fan_in_fan_out (
bool) — Установите это значение в True, если заменяемый слой хранит веса в формате (fan_in, fan_out). Например, gpt-2 используетConv1D, который хранит веса в формате (fan_in, fan_out), поэтому это значение должно быть установлено вTrue. - bias (
str) — Тип смещения для VBLoRA. Может принимать значения ‘none’, ‘all’ или ‘vblora_only’. Если указано ‘all’ или ‘vblora_only’, соответствующие смещения будут обновляться во время обучения. Обратите внимание, что это означает: даже при отключении адаптеров модель не будет выдавать тот же результат, что и базовая модель без адаптации. - modules_to_save (
List[str]) — Список модулей, помимо слоёв VBLoRA, которые нужно сделать обучаемыми и сохранить в итоговой контрольной точке. - init_vector_bank_bound (
float) — Векторный банк инициализируется равномерным распределением между -init_vector_bank_bound и init_vector_bank_bound. Избегайте инициализации векторного банка нулями, чтобы предотвратить нулевые градиенты. Как правило, эффективны небольшие значения, например 0.02. Инициализация с большим значением может привести к нестабильности обучения. - init_logits_std (
float) — Логиты инициализируются с помощью нормального распределения со стандартным отклонением init_logits_std. По умолчанию равно 0.1. - layers_to_transform (
Union[List[int],int]) — Индексы слоев, которые необходимо преобразовать. Если передан список целых чисел, адаптер будет применен к слоям с индексами, указанными в этом списке. Если передано одно целое число, преобразования будут применены к слою с этим индексом. - layers_pattern (
Optional[Union[List[str], str]]) — Имя шаблона слоя, используется только в том случае, еслиlayers_to_transformотличается отNone. Этот параметр должен указывать наnn.ModuleListмодели, который часто называется'layers'или'h'.
Это класс конфигурации для хранения настроек модели VBLoRAModel.
VBLoRAModel
класс peft.VBLoRAModel
< 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 (PreTrainedModel) — Модель, подлежащая адаптации.
- config (VBLoRAConfig) — конфигурация модели VBLoRA.
- adapter_name (
str) — имя адаптера, по умолчанию"default". - low_cpu_mem_usage (
bool,optional, по умолчаниюFalse) — Создаёт пустые веса адаптера на meta-устройстве. Полезно для ускорения процесса загрузки.
Возвращает
torch.nn.Module
Модель VBLoRA.
Создаёт модель VBLoRA на основе предобученной модели transformers.
Метод подробно описан в https://huggingface.co/papers/2405.15179.
Пример:
>>> from transformers import AutoModelForCausalLM
>>> from peft import VBLoRAConfig, get_peft_model
>>> base_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m")
>>> config = VBLoRAConfig(
... task_type="SEQ_CLS",
... r=4,
... target_modules=["fc1", "fc2", "k_proj", "out_proj", "q_proj", "v_proj"],
... num_vectors=60,
... vector_length=256,
... save_only_topk_weights=True,
... )
>>> model = get_peft_model(base_model, config)Атрибуты:
- model (PreTrainedModel) — Модель, подлежащая адаптации.
- peft_config (VBLoRAConfig): конфигурация модели VBLoRAConfig.
Возвращает количество сохраняемых параметров VB-LoRA и других сохраняемых параметров.
Выводит количество сохраняемых параметров VB-LoRA и общее количество сохраняемых параметров.