Home
Login

Biblioteca LoRA de código aberto da Microsoft, implementando a técnica de adaptação de baixa classificação para grandes modelos de linguagem, reduzindo significativamente os parâmetros de treinamento durante o ajuste fino do modelo.

MITPython 12.1kmicrosoftLoRA Last Updated: 2024-12-17

Apresentação Detalhada do Projeto Microsoft LoRA

Visão Geral do Projeto

Microsoft LoRA é uma biblioteca Python de código aberto da Microsoft que implementa a técnica "LoRA: Low-Rank Adaptation of Large Language Models" (Adaptação de Baixa Patente de Grandes Modelos de Linguagem). Este projeto oferece uma solução revolucionária para o ajuste fino eficiente de grandes modelos de linguagem.

Endereço do Projeto: https://github.com/microsoft/LoRA

Endereço do Artigo: https://arxiv.org/abs/2106.09685

Princípios Técnicos Fundamentais

Introdução à Tecnologia LoRA

LoRA (Low-Rank Adaptation) é um método de ajuste fino com parâmetros eficientes, cuja ideia central é:

  • Congelar os pesos pré-treinados originais: Não modificar os parâmetros originais do modelo
  • Adicionar matrizes de decomposição de baixa patente: Adaptar o modelo aprendendo um par de matrizes de baixa patente
  • Reduzir significativamente os parâmetros de treinamento: Treinar apenas os parâmetros da matriz de baixa patente adicionada

Vantagens Técnicas

  1. Extremamente eficiente em termos de parâmetros
  • Em comparação com o ajuste fino completo do GPT-3 175B, o LoRA pode reduzir os parâmetros de treinamento em 10.000 vezes
  • Requisitos de memória da GPU reduzidos em 3 vezes
  1. Excelente manutenção do desempenho
  • Desempenho igual ou melhor do que o ajuste fino completo em RoBERTa, DeBERTa, GPT-2, GPT-3
  • Resultados notáveis no benchmark GLUE
  1. Implantação amigável
  • Sem latência de inferência adicional
  • Suporte para troca de tarefas eficiente
  • Requisitos de armazenamento significativamente reduzidos

Desempenho

Resultados do Benchmark GLUE

No benchmark GLUE, o LoRA demonstrou um desempenho excelente:

Modelo Número de Parâmetros de Treinamento Precisão MNLI Precisão SST-2 Precisão MRPC
RoBERTa Base Ajuste Fino Completo 125M 87.6 94.8 90.2
RoBERTa Base LoRA 0.8M 87.6±.1 95.1±.2 89.7±.7
DeBERTa XXL Ajuste Fino Completo 1.5B 91.1 96.8 92.9
DeBERTa XXL LoRA 4.7M 91.9±.1 96.9±.2 92.6±.6

Tarefas de Geração de Texto GPT-2

Em tarefas de geração de texto como E2E, DART, WebNLG, etc., o LoRA também apresenta um excelente desempenho:

Método Parâmetros de Treinamento E2E (BLEU) DART (BLEU) WebNLG (BLEU)
GPT-2 M Ajuste Fino Completo 354.92M 68.2 46.0 47.6
GPT-2 M LoRA 0.35M 70.4±.1 47.1±.2 55.3±.2

Estrutura do Projeto

microsoft/LoRA/
├── loralib/           # Código-fonte da biblioteca principal
├── examples/
│   ├── NLG/          # Exemplo de geração de linguagem natural GPT-2
│   └── NLU/          # Exemplo de compreensão de linguagem natural RoBERTa/DeBERTa
├── README.md
└── setup.py

Instalação e Uso

Método de Instalação

pip install loralib

# Ou instalar a partir do código-fonte
pip install git+https://github.com/microsoft/LoRA

Exemplo de Uso Básico

1. Substituir Camadas Lineares

# ===== Antes da modificação =====
# layer = nn.Linear(in_features, out_features)

# ===== Após a modificação =====
import loralib as lora
layer = lora.Linear(in_features, out_features, r=16)

2. Marcar Parâmetros Treináveis

import loralib as lora

model = BigModel()
# Definir apenas os parâmetros que contêm "lora_" como treináveis
lora.mark_only_lora_as_trainable(model)

# Loop de treinamento
for batch in dataloader:
    # Fluxo de treinamento normal
    pass

3. Salvar e Carregar Checkpoints

# Salvar parâmetros LoRA
torch.save(lora.lora_state_dict(model), 'lora_checkpoint.pt')

# Carregar modelo pré-treinado
model.load_state_dict(torch.load('pretrained.pt'), strict=False)
# Carregar parâmetros LoRA
model.load_state_dict(torch.load('lora_checkpoint.pt'), strict=False)

Tipos de Camadas Suportadas

Atualmente, a biblioteca LoRA suporta os seguintes tipos de camadas:

  • nn.Linearlora.Linear
  • nn.Embeddinglora.Embedding
  • nn.Conv2dlora.Conv2d
  • lora.MergedLinear (para camadas lineares mescladas, como projeção QKV)

Recursos Avançados

1. Suporte para Camadas Lineares Mescladas

# Para cenários como projeção QKV
qkv_proj = lora.MergedLinear(
    d_model, 3*d_model, 
    r=8, 
    enable_lora=[True, False, True]  # Aplicar LoRA apenas a Q e V
)

2. Treinamento de Vetores de Bias

# Treinar bias relacionados ao LoRA
lora.mark_only_lora_as_trainable(model, bias='lora_only')

# Treinar todos os bias
lora.mark_only_lora_as_trainable(model, bias='all')

3. Mesclagem de Pesos em Tempo de Inferência

# Modo de avaliação: mesclar pesos, eliminar latência de inferência
model.eval()

# Modo de treinamento: restaurar estado de separação
model.train()

Cenários de Aplicação

  1. Ajuste fino de grandes modelos: Reduzir significativamente os custos de ajuste fino
  2. Aprendizado multitarefa: Troca de tarefas eficiente
  3. Ambientes com recursos limitados: Reduzir os requisitos de memória e armazenamento
  4. Desenvolvimento rápido de protótipos: Acelerar o processo de adaptação do modelo

Integração com o Ecossistema

  • Hugging Face PEFT: Já integrado à biblioteca PEFT do HF
  • Ecossistema PyTorch: Totalmente compatível com o framework PyTorch
  • Modelos pré-treinados: Suporta vários modelos pré-treinados convencionais

Resumo

O projeto Microsoft LoRA oferece uma solução inovadora para o ajuste fino eficiente de grandes modelos de linguagem. Através da engenhosa técnica de adaptação de baixa patente, mantém um excelente desempenho do modelo, ao mesmo tempo que reduz significativamente os custos de computação e armazenamento. Este projeto não só tem um valor académico importante, como também fornece um caminho técnico viável para aplicações industriais práticas, sendo um trabalho marcante na área do ajuste fino eficiente em termos de parâmetros.

Star History Chart