PEFT documentation

C3A: Эффективное по параметрам дообучение с помощью круговой свёртки

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

C3A: Эффективное по параметрам дообучение с помощью круговой свёртки

C3A — это метод дообучения с высокой эффективностью по параметрам, который использует свёртку по кругу (Circular Convolution) для достижения адаптации высокого ранга в рамках разумных ограничений ресурсов.

Обратите внимание, что для C3A следует использовать значительно более высокую скорость обучения (LR), чем для других методов. Например, LR 1e-1 для C3A является хорошей отправной точкой. Кроме того, следует использовать значительно меньшее значение weight decay. Дополнительные сведения можно найти в папке method_comparison.

Для параметра block_size, он влияет на настраиваемые параметры и производительность. Для начала можно выбрать gcd(d1,d2)\mathrm{gcd}(d_1,d_2) вблизи $\frac{\sqrt{d_1 \times d_2}}{r}$, где rr — это ранг LoRA, который вы планируете использовать для этой задачи.

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

  • Поддерживаются только слои nn.Linear.
  • Квантованные слои не поддерживаются.
  • Размер блока должен быть общим делителем как входного, так и выходного размеров целевых слоёв.

Если эти ограничения не подходят для вашего сценария использования, рассмотрите другие методы.

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

Метод Low-Rank Adaptation (LoRA) получил широкое распространение для дообучения крупных базовых моделей, используя матрицы низкого ранга A\mathbf{A} и B\mathbf{B} для представления изменений весов (то есть $\Delta \mathbf{W} = \mathbf{B} \mathbf{A}$). Этот метод сокращает количество обучаемых параметров и снижает значительное потребление памяти, связанное с полными матрицами дельта, за счёт последовательного умножения A\mathbf{A} и B\mathbf{B} на активацию. Несмотря на свою эффективность, внутренняя характеристика низкого ранга может ограничивать производительность. Хотя было предложено несколько вариантов для решения этой проблемы, они часто упускают из виду важную вычислительную и энергетическую эффективность, обеспечиваемую LoRA. В данной статье мы предлагаем Circular Convolution Adaptation (C3A), который не только обеспечивает адаптацию высокого ранга с улучшенной производительностью, но и превосходит по вычислительной мощности и использованию памяти. Многочисленные эксперименты показывают, что C3A стабильно превосходит LoRA и его варианты в различных задачах дообучения.

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

API

C3AConfig

класс peft.C3AConfig

< >

( 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 = Falseblock_size: int = 256target_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]] = Noneblock_size_pattern: Optional[dict] = <factory>init_weights: Optional[Union[bool, Literal['gaussian', 'kaiming_uniform', 'xavier_uniform']]] = 'xavier_uniform' )

Параметры

  • block_size (int) — размер блока для C3A, должен делиться на размер входа и размер выхода целевого слоя. Если вы не знаете, какое значение block_size использовать, установите его равным наибольшему общему делителю всех размеров входов и выходов ваших целевых слоев. Увеличение этого значения приведет к уменьшению количества параметров.
  • target_modules (Union[list[str],str]) — Имена модулей, к которым следует применить C3A.
  • bias (str) — Тип смещения для C3A. Может принимать значения ‘none’, ‘all’ или ‘c3a_only’. Если указано ‘all’ или ‘c3a_only’, соответствующие смещения будут обновляться во время обучения. Обратите внимание, что это означает: даже при отключении адаптеров модель не будет выдавать тот же результат, что и базовая модель без адаптации.
  • modules_to_save (list[str]) — список модулей, отличных от слоёв C3A, которые будут установлены как обучаемые и сохранены в итоговом контрольном пункте.
  • layers_to_transform (Union[list[int],int]) — Индексы слоев для преобразования. Если этот аргумент указан, C3A применяется к индексам слоев, указанным в этом списке. Если передано одно целое число, C3A применяется к слою с этим индексом.
  • layers_pattern (str) — Имя шаблона слоя, используется только если layers_to_transform отличается от None и если шаблон слоя не входит в число общих шаблонов слоёв.
  • block_size_pattern (dict) — Соответствие между именами слоев или регулярными выражениями и значениями block_size, отличными от значения по умолчанию. Например, {"model.decoder.layers.0.encoder_attn.k_proj": 1280}
  • init_weights (Union[bool, Literal["gaussian", "kaiming_uniform", "xavier_uniform"]]) — По умолчанию используется ‘xavier_uniform’. Если установить это значение в False, также будет использован ‘xavier_uniform’. Чтобы установить веса в нули (чтобы сделать C3A нетривиальной операцией), установите значение в True.

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

C3AModel

класс peft.C3AModel

< >

( 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 (C3AConfig) — конфигурация модели C3A.
  • adapter_name (str) — имя адаптера, по умолчанию "default".

Возвращает

torch.nn.Module

Модель C3A.

Создаёт модель C3A из предобученной модели transformers.

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

Атрибуты:

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