PEFT documentation

Сparse High Rank Adapters

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

Сparse High Rank Adapters

Спарсенные адаптеры высокого ранга, или SHiRA, представляют собой альтернативный тип адаптера и обладают значительными преимуществами перед адаптерами низкого ранга. В частности, SHiRA обеспечивает более высокую точность, чем LoRA, для широкого круга задач в области компьютерного зрения и обработки естественного языка. Кроме того, SHiRA предлагает более простой и качественный механизм слияния нескольких адаптеров, значительно снижая потерю концепций — проблему, с которой часто сталкиваются адаптеры низкого ранга. SHiRA напрямую дообучает небольшое количество параметров базовой модели для настройки модели на любую задачу адаптации.

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

  • Поддерживаются только слои nn.Linear.

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

Low Rank Adaptation (LoRA) привлекла значительное внимание в недавних исследованиях генеративного ИИ. Одним из главных преимуществ LoRA является возможность слияния с предобученными моделями без добавления накладных расходов во время вывода. Однако с точки зрения развертывания на мобильных устройствах мы можем либо избежать накладных расходов на вывод в режиме слияния, но потерять возможность быстрой смены адаптеров, либо терпеть значительное (до 30% выше) время задержки вывода, обеспечивая быструю смену в режиме без слияния. LoRA также демонстрирует потерю концепций при одновременном использовании нескольких адаптеров. В этой статье мы предлагаем Sparse High Rank Adapters (SHiRA), новый подход, который не создает накладных расходов на вывод, обеспечивает быструю смену адаптеров и значительно снижает потерю концепций. В частности, SHiRA может обучаться путем прямой настройки только 1–2% весов базовой модели при сохранении остальных без изменений. Это приводит к созданию высоко разреженного адаптера, который можно переключать непосредственно в режиме слияния. Мы также предоставляем теоретические и эмпирические сведения о том, как высокая разреженность в SHiRA может способствовать слиянию нескольких адаптеров за счет снижения потери концепций. Наши обширные эксперименты на LVM и LLM показывают, что дообучение лишь небольшой доли параметров базовой модели значительно превосходит LoRA, обеспечивая как быструю смену, так и слияние нескольких адаптеров. Наконец, мы предоставляем реализацию SHiRA с низкой задержкой и эффективным использованием памяти на основе библиотеки Parameter-Efficient Finetuning (PEFT), которая обучается почти с той же скоростью, что и LoRA, при этом потребляя до 16% меньше пиковой памяти GPU, что делает SHiRA простой для внедрения в практических сценариях. Чтобы продемонстрировать преимущества быстрой смены во время вывода, мы показываем, что загрузка SHiRA в базовую модель может быть в 5–16 раз быстрее, чем слияние LoRA на CPU.

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

API

ShiraConfig

класс peft.ShiraConfig

< >

( 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 = 32mask_type: Literal['random'] = 'random'random_seed: Optional[int] = Nonetarget_modules: Optional[Union[list[str], str]] = Nonefan_in_fan_out: bool = Falseinit_weights: bool = Truemodules_to_save: Optional[list[str]] = None )

Параметры

  • r (int, необязательный, по умолчанию 32) — Для заданного целевого модуля количество параметров SHiRA вычисляется как r(m+n), где m x n — размеры исходного тензора. Это означает, что количество параметров SHiRA совпадает с количеством параметров адаптера LoRA. SHiRA — это адаптер высокого ранга. Установка параметра r не ограничивает ранг этим значением.
  • mask_type (str, defaults to random) — Type of mask function. Defaults to a random sparse mask. An optional user-defined mask_fn to compute the mask value can also be supplied by instantiating config = ShiraConfig(...) and then setting config.mask_fn = <your custom mask function>. For a pretrained weight with shape m x n, the custom mask function must return only one mask (shape: m x n) which must be binary 0 or 1 with num_shira_parameters = r(m + n) for linear layers. Device and dtype of mask must be same as base layer’s weight’s device and dtype. Please see mask_functions.py for more details and to see the default random sparse mask implementation.
  • random_seed (int, необязательный, по умолчанию None) — случайное зерно для генератора torch для random_mask.
  • target_modules (Union[List[str], str]) — Список имен модулей или регулярное выражение для имен модулей, которые следует заменить на SHiRA. Например, [‘q’, ‘v’] или ‘.decoder.(SelfAttention|EncDecAttention).*(q|v)$‘. Поддерживаются только линейные слои.
  • fan_in_fan_out (bool) — Установите это значение в True, если заменяемый слой хранит веса в формате (fan_in, fan_out). Например, gpt-2 использует Conv1D, который хранит веса в формате (fan_in, fan_out), поэтому это значение должно быть установлено в True.
  • init_weights (bool, по умолчанию True) — Инициализировать веса SHiRA нулевыми значениями. Если установлено в False, веса SHiRA инициализируются значениями randn вместо нулей, и это используется только для тестирования.
  • modules_to_save (List[str]) — Список модулей, помимо слоёв SHiRA, которые должны быть установлены как обучаемые и сохранены в итоговом контрольном пункте.

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

ShiraModel

класс peft.ShiraModel

< >

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

Возвращает

torch.nn.Module

Модель SHiRA.

Создаёт модель Sparse High Rank Adapter (SHiRA) на основе предобученной модели.

Пример:

>>> from transformers import AutoModelForCausalLM
>>> from peft import ShiraConfig, get_peft_model

>>> base_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m")
>>> config = ShiraConfig(r=32)
>>> model = get_peft_model(base_model, config)

Атрибуты:

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