PEFT documentation

Adaptadores de Rango Alto Esparsos

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

Adaptadores de Rango Alto Esparsos

Sparse High Rank Adapters ou SHiRA é um tipo alternativo de adaptador e tem se mostrado com vantagens significativas em relação aos adaptadores de baixo rank. Especificamente, o SHiRA atinge melhor precisão que o LoRA para uma variedade de tarefas de visão e linguagem. Ele também oferece fusão de múltiplos adaptadores mais simples e de maior qualidade, reduzindo significativamente a perda de conceito, um problema comum enfrentado pelos adaptadores de baixo rank. O SHiRA faz o ajuste fino diretamente de um pequeno número de parâmetros do modelo base para ajustar o modelo a qualquer tarefa de adaptação.

SHiRA atualmente possui a seguinte restrição:

  • Apenas camadas nn.Linear são suportadas.

O resumo do artigo é:

A Low Rank Adaptation (LoRA) tem recebido enorme atenção na pesquisa recente de IA generativa. Uma das principais vantagens da LoRA é sua capacidade de ser fundida com modelos pré-treinados, sem adicionar sobrecarga durante a inferência. No entanto, do ponto de vista de implantação em dispositivos móveis, podemos evitar a sobrecarga de inferência no modo fundido, mas perdemos a capacidade de alternar adaptadores rapidamente, ou sofrer latência de inferência significativa (até 30% maior) ao permitir alternância rápida no modo não fundido. A LoRA também exibe perda de conceito quando múltiplos adaptadores são usados simultaneamente. Neste artigo, propomos os Sparse High Rank Adapters (SHiRA), um novo paradigma que não incorre em sobrecarga de inferência, permite alternância rápida e reduz significativamente a perda de conceito. Especificamente, o SHiRA pode ser treinado ajustando diretamente apenas 1-2% dos pesos do modelo base, mantendo os demais inalterados. Isso resulta em um adaptador altamente esparsa que pode ser alternado diretamente no modo fundido. Fornecemos, além disso, insights teóricos e empíricos sobre como a alta esparsidade no SHiRA pode auxiliar a fusão de múltiplos adaptadores ao reduzir a perda de conceito. Nossos extensos experimentos em LVMs e LLMs demonstram que o ajuste fino de apenas uma pequena fração dos parâmetros no modelo base supera significativamente a LoRA, ao mesmo tempo em que permite alternância rápida e fusão de múltiplos adaptadores. Por fim, fornecemos uma implementação de SHiRA eficiente em latência e memória, baseada na Library Parameter-Efficient Finetuning (PEFT), que treina em uma velocidade quase a mesma da LoRA, consumindo até 16% menos memória de pico na GPU, tornando o SHiRA fácil de adotar para casos de uso práticos. Para demonstrar os benefícios da alternância rápida durante a inferência, mostramos que carregar o SHiRA em um modelo base pode ser 5x a 16x mais rápido do que a fusão da LoRA em uma CPU.

Visão geral do benchmark

API

ShiraConfig

classe 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 )

Parâmetros

  • r (int, opcional, padrão 32) — Para um módulo de destino específico, o número de parâmetros SHiRA é calculado como r(m+n), onde as dimensões originais do tensor são m x n. Isso significa que o número de parâmetros SHiRA é o mesmo que o de um adaptador LoRA. SHiRA é um adaptador de alto rank. Definir este parâmetro r não restringe o rank a esse valor.
  • 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, opcional, padrão None) — semente aleatória para o gerador do torch para random_mask.
  • target_modules (Union[List[str], str]) — Lista de nomes de módulos ou expressão regular dos nomes de módulos a serem substituídos por SHiRA. Por exemplo, [‘q’, ‘v’] ou ‘.decoder.(SelfAttention|EncDecAttention).*(q|v)$‘. Somente camadas lineares são suportadas.
  • fan_in_fan_out (bool) — Defina como True se a camada a ser substituída armazenar os pesos como (fan_in, fan_out). Por exemplo, o gpt-2 usa Conv1D, que armazena os pesos como (fan_in, fan_out), e portanto este parâmetro deve ser definido como True.
  • init_weights (bool, padrão True) — Inicializa o peso do SHiRA com valores zero. Se definido como False, os pesos do SHiRA são inicializados com valores randn em vez de zeros, e isso é usado apenas para testes.
  • modules_to_save (List[str]) — Lista de módulos, além das camadas SHiRA, que devem ser configurados como treináveis e salvos no checkpoint final.

Esta é a classe de configuração para armazenar a configuração de um ShiraModel.

ShiraModel

classe 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

Parâmetros

  • model (PreTrainedModel) — O modelo a ser adaptado.
  • config (ShiraConfig) — A configuração do modelo SHiRA.
  • adapter_name (str) — O nome do adaptador, padrão é "default".

Retorna

torch.nn.Module

O modelo SHiRA.

Cria um modelo Sparse High Rank Adapter (SHiRA) a partir de um modelo pré-treinado.

Exemplo:

>>> 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)

Atributos:

Update on GitHub