PEFT documentation
Métodos de ajuste fino eficientes em parâmetros
Métodos de ajuste fino eficientes em parâmetros
Os métodos PEFT treinam o menor número possível de parâmetros, buscando um desempenho comparável ao do fine-tuning completo. Como menos parâmetros treináveis são menos expressivos, o mesmo desempenho não é garantido. Em troca, você usa menos memória, frequentemente menos computação, e ganha recursos como troca rápida entre adaptadores de especialistas e menos esquecimento do conhecimento prévio.
Dar conselhos gerais para treinar modelos grandes é difícil, mas para modelos generativos, especialmente modelos de linguagem, você pode seguir estas etapas:
- use prompting (por exemplo, exemplos few-shot no prompt) para verificar se o modelo já é capaz de executar a tarefa. Se o modelo resolver seu problema, ótimo! Agora você pode usar métodos baseados em prompt para aprender o prompt e economizar tokens preciosos.
- Se os métodos baseados em prompt não forem suficientes, você pode usar ajuste de camada e métodos de adaptador. Esses métodos são geralmente mais expressivos que os métodos baseados em prompt e se aproximam mais do ajuste fino completo.
- Certifique-se de medir a retenção do conhecimento já aprendido, pois cada etapa de ajuste fino pode potencialmente desaprender o conhecimento anterior.
A suite de comparação de métodos PEFT tem como objetivo fornecer uma visão geral (aproximada) dos métodos implementados em benchmarks e modelos selecionados.
Nem todos os métodos de PEFT são iguais e existem diferenças entre as capacidades:
- Quantização: nem todos os métodos suportam modelos base quantizados
- Recursos: nem todos os recursos são suportados por todos os métodos (por exemplo, múltiplos adaptadores, inferência com adaptadores mistos, mesclagem/desmesclagem)
- Tipos de camadas: camadas lineares são geralmente suportadas, mas nem todos os métodos de adaptador suportam camadas de incorporação (importante para estender o vocabulário) ou camadas convolucionais (importantes para alguns modelos de imagem)
- Tempo de execução: os métodos PEFT geralmente adicionam sobrecarga em tempo de execução, mas parte disso pode ser mitigada (por exemplo, mesclando os pesos do adaptador)
Métodos baseados em prompt
Prompting prepara um modelo pré-treinado congelado para uma tarefa específica de nível inferior, incluindo um prompt de texto que descreve a tarefa ou até mesmo demonstra um exemplo dela. Com o prompting, você pode evitar o treinamento completo de um modelo separado para cada tarefa de nível inferior, usando o mesmo modelo pré-treinado congelado. Isso é muito mais fácil, pois você pode usar o mesmo modelo para várias tarefas diferentes, e é significativamente mais eficiente treinar e armazenar um conjunto menor de parâmetros de prompt do que treinar todos os parâmetros do modelo.
Existem duas categorias de métodos de prompt:
- prompts rígidos são prompts de texto criados manualmente com tokens de entrada discretos; a desvantagem é que é necessário muito esforço para criar um bom prompt
- os soft prompts são tensores aprendíveis concatenados com os embeddings de entrada que podem ser otimizados para um conjunto de dados; a desvantagem é que eles não são legíveis por humanos, pois você não está correspondendo esses “tokens virtuais” aos embeddings de uma palavra real
A biblioteca PEFT suporta vários tipos de métodos de prompting (p-tuning, prefix tuning, prompt tuning, ...), explore o sumário para uma lista completa dos métodos de soft prompt. Se você estiver interessado em aplicar esses métodos a outras tarefas e casos de uso, dê uma olhada na nossa coleção de notebooks!
Alguns conhecimentos sobre o processo geral de treinamento de um modelo de linguagem causal seriam muito úteis e permitiriam que você se concentrasse nos métodos de soft prompting. Se você é novo no assunto, recomendamos dar uma olhada primeiro no guia Causal language modeling da documentação do Transformers. Quando estiver pronto, volte e veja o quão fácil é incorporar o PEFT ao seu treinamento!
Ajuste de Camadas
Layer Tuning categoriza os métodos que visam especificamente um tipo de camada ou um aspecto de uma camada, por exemplo, LayerNorm Tuning visa apenas as camadas LayerNorm e TrainableTokens visa apenas tokens específicos na matriz de incorporação. Isso contrasta com os métodos baseados em prompt, que trabalham com a entrada do modelo, ou com os métodos de adaptador, que estendem os pesos existentes e são geralmente mais independentes do tipo de camada, visando camadas lineares ou convolucionais.
Métodos de adaptador
Os métodos de adaptador podem ser vistos como formas de adicionar matrizes treináveis relativamente pequenas a modelos existentes para ajuste fino. O objetivo é introduzir poucos parâmetros treináveis para direcionar o modelo grande na direção da tarefa que precisa de ajuste fino, economizando recursos, como memória ou computação.
Uma forma popular de implementar adaptadores é inserir matrizes treináveis menores que são uma decomposição de baixo posto do layout do peso adaptado, para economizar memória. Existem várias maneiras diferentes de expressar a matriz de pesos como uma decomposição de baixo posto, mas Low-Rank Adaptation (LoRA) é o método mais comum. A biblioteca PEFT suporta várias outras variações dessa formulação - algumas são variantes diretas do LoRA e estão documentadas sob LoRA, outras são diferentes o suficiente para contar como seus próprios métodos, como Low-Rank Hadamard Product (LoHa), Low-Rank Kronecker Product (LoKr) e Adaptive Low-Rank Adaptation (AdaLoRA). Se você estiver interessado em aplicar esses métodos a outras tarefas e casos de uso, como segmentação semântica e classificação de tokens, dê uma olhada na nossa coleção de notebooks!
LoRA é um dos métodos PEFT mais populares e um bom ponto de partida se você está começando a usar PEFT. Foi desenvolvido originalmente para modelos de linguagem de grande escala, mas é um método de treinamento extremamente popular para modelos de difusão devido à sua eficiência e eficácia.
Adaptadores de baixo rank são apenas uma das possíveis formulações de adaptadores; o PEFT implementa muitos outros tipos de adaptadores. Por exemplo, os métodos de Fine-Tuning Ortogonal (OFT, BOFT, …) usam decomposições ortogonais dos pesos do adaptador para alcançar um tamanho reduzido. Métodos como MiSS dividem matrizes em fragmentos e compartilham esses fragmentos para economizar memória. O IA3 introduz vetores aprendidos que reescalam as ativações de chave, valor e feed-forward.
Update on GitHub