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
LoRA (Low-Rank Adaptation) é um método de ajuste fino com parâmetros eficientes, cuja ideia central é:
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 |
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 |
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
pip install loralib
# Ou instalar a partir do código-fonte
pip install git+https://github.com/microsoft/LoRA
# ===== 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)
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
# 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)
Atualmente, a biblioteca LoRA suporta os seguintes tipos de camadas:
nn.Linear
→ lora.Linear
nn.Embedding
→ lora.Embedding
nn.Conv2d
→ lora.Conv2d
lora.MergedLinear
(para camadas lineares mescladas, como projeção QKV)# 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
)
# 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')
# Modo de avaliação: mesclar pesos, eliminar latência de inferência
model.eval()
# Modo de treinamento: restaurar estado de separação
model.train()
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.