PEFT documentation

C3A: Ajuste fino eficiente de parâmetros por meio de convolução circular

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: Ajuste fino eficiente de parâmetros por meio de convolução circular

C3A é uma técnica de ajuste fino eficiente em parâmetros que utiliza a Convolução Circular para alcançar adaptação de alto rank dentro de limites de recursos razoáveis.

Observe que você deve usar uma taxa de aprendizado (LR) muito maior para o C3A do que para outros métodos. Por exemplo, uma LR de 1e-1 para o C3A é um bom ponto de partida. Além disso, um decaimento de peso muito menor deve ser usado. Você pode consultar a pasta method_comparison para mais detalhes.

No caso de block_size, ele afeta os parâmetros ajustáveis e o desempenho. Para começar, você pode escolher um gcd(d1,d2)\mathrm{gcd}(d_1,d_2) próximo de $\frac{\sqrt{d_1 \times d_2}}{r}$, onde rr é o rank do LoRA que você usaria para esta tarefa.

O C3A possui atualmente as seguintes restrições:

  • Apenas camadas nn.Linear são suportadas.
  • Camadas quantizadas não são suportadas.
  • O tamanho do bloco deve ser um divisor comum dos tamanhos de entrada e saída das camadas de destino.

Se essas restrições não funcionarem para o seu caso de uso, considere outros métodos.

O resumo do artigo é:

A Low-Rank Adaptation (LoRA) ganhou popularidade para o ajuste fino de grandes modelos de fundação, aproveitando matrizes de baixo posto A\mathbf{A} e B\mathbf{B} para representar as mudanças de pesos (ou seja, $\Delta \mathbf{W} = \mathbf{B} \mathbf{A}$). Este método reduz os parâmetros treináveis e mitiga o alto consumo de memória associado a matrizes delta completas, multiplicando sequencialmente A\mathbf{A} e B\mathbf{B} com a ativação. Apesar do seu sucesso, a característica intrínseca de baixo posto pode limitar seu desempenho. Embora várias variantes tenham sido propostas para abordar esse problema, elas frequentemente ignoram a crucial eficiência computacional e de memória trazida pela LoRA. Neste artigo, propomos a Circular Convolution Adaptation (C3A), que não apenas alcança adaptação de alto posto com desempenho aprimorado, mas também se destaca tanto em poder computacional quanto em utilização de memória. Experimentos extensos demonstram que a C3A supera consistentemente a LoRA e suas variantes em diversas tarefas de ajuste fino.

Visão geral do benchmark

API

C3AConfig

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

Parâmetros

  • block_size (int) — tamanho do bloco para C3A, deve ser divisível tanto pelo tamanho de entrada quanto pelo tamanho de saída da camada alvo. Se você não tem ideia de qual block_size usar, defina-o como o maior divisor comum de todos os tamanhos de entrada & saída das suas camadas alvo. Aumentar esse valor resultará em menos parâmetros.
  • target_modules (Union[list[str],str]) — Os nomes dos módulos aos quais aplicar o C3A.
  • bias (str) — Tipo de viés para C3A. Pode ser ‘none’, ‘all’ ou ‘c3a_only’. Se for ‘all’ ou ‘c3a_only’, os vieses correspondentes serão atualizados durante o treinamento. Tenha em mente que isso significa que, mesmo ao desativar os adaptadores, o modelo não produzirá a mesma saída que o modelo base teria sem adaptação.
  • modules_to_save (list[str]) — lista de módulos, além das camadas C3A, que devem ser configurados como treináveis e salvos no checkpoint final.
  • layers_to_transform (Union[list[int],int]) — Os índices das camadas a serem transformadas. Se este argumento for especificado, o C3A será aplicado aos índices das camadas especificados nesta lista. Se um único inteiro for passado, o C3A será aplicado à camada neste índice.
  • layers_pattern (str) — O nome do padrão de camada, usado apenas se layers_to_transform for diferente de None e se o padrão de camada não estiver no padrão de camadas comum.
  • block_size_pattern (dict) — O mapeamento de nomes de camadas ou expressões regulares para block_size que são diferentes do padrão especificado. Por exemplo, {"model.decoder.layers.0.encoder_attn.k_proj": 1280}
  • init_weights (Union[bool, Literal["gaussian", "kaiming_uniform", "xavier_uniform"]]) — Padrão: ‘xavier_uniform’. Definir isso como False também usa ‘xavier_uniform’. Para definir os pesos como zeros (tornando o C3A um no-op), defina o valor como True.

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

C3AModel

classe 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

Parâmetros

  • model (torch.nn.Module) — O modelo a ser adaptado.
  • config (C3AConfig) — A configuração do modelo C3A.
  • adapter_name (str) — O nome do adaptador, padrão é "default".

Retorna

torch.nn.Module

O modelo C3A.

Cria um modelo C3A a partir de um modelo transformers pré-treinado.

O método é descrito em detalhes em https://huggingface.co/papers/2407.19342.

Atributos:

Update on GitHub