PEFT documentation
Сparse High Rank Adapters
С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
< 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 = 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 torandom) — 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 instantiatingconfig = ShiraConfig(...)and then settingconfig.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
< 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 (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.