Pular para o conteúdo principal

Dominando Low-Rank Adaptation (LoRA): aprimorando grandes modelos de linguagem para uma adaptação eficiente

Explore a técnica inovadora de Low-Rank Adaptation (LoRA) no nosso guia completo. Descubra como a LoRA revoluciona o fine-tuning de grandes modelos de linguagem.
Atualizado 17 de set. de 2026  · 10 min lido

Explorar com IA

ChatGPTClaudePerplexity

\"LoRA:

\n

LoRA: Low-Rank Adaptation of Large Language Models

\n

A área de machine learning e processamento de linguagem natural (NLP) avançou de forma impressionante com a chegada dos grandes modelos de linguagem (LLMs), como GPT, LLaMa, Claude 2, entre outros. Esses modelos mostram capacidades excepcionais em diversas aplicações, de geração de texto a compreensão de linguagem.

\n

No entanto, a implementação prática e o fine-tuning desses modelos trazem grandes desafios, principalmente por causa do tamanho e da complexidade.

\n

É aí que entra o Low-Rank Adaptation (LoRA), oferecendo uma solução eficaz para esses desafios.

\n

O objetivo deste tutorial é construir um entendimento teórico e prático sobre o que é a LoRA e como você pode se beneficiar dela.

\n

Contexto

\n

A origem da LoRA remonta ao início de 2021, após o lançamento do GPT-3. A Microsoft, em colaboração com a OpenAI, enfrentou o desafio de tornar modelos grandes como o GPT-3 viáveis comercialmente.

\n

Eles descobriram que o one-shot prompting, sozinho, não era suficiente para atingir o desempenho ideal em produção, especialmente em tarefas complexas como traduzir linguagem natural para código. Isso levou à exploração de métodos de fine-tuning que fossem eficientes e com bom custo-benefício.

\n

A LoRA foi criada a partir da necessidade do produto de permitir um fine-tuning de grandes modelos de linguagem de forma rápida, eficiente e econômica, possibilitando especialização por domínio e troca ágil de tarefa ou de usuário em tempo de execução.

\n

O artigo de pesquisa sobre LoRA foi publicado em outubro de 2021 por um time de pesquisadores da Microsoft.

\n

Por que precisamos da LoRA?

\n

Vamos entender o problema antes mesmo de ver o que é a LoRA e como ela resolve a questão.

\n

Grandes modelos de linguagem como GPT-4, Claude 2, LLaMA 70b, etc., são ótimos, mas muito genéricos e enormes. Para adotar esses modelos em domínios específicos, como saúde ou bancos, ou para tarefas como converter texto em código, precisamos do chamado fine-tuning.

\n

Fine-tuning é o processo de treinar um modelo pré-treinado em um conjunto de dados específico e menor para especializar seu desempenho em uma tarefa ou domínio. À medida que os modelos crescem (por exemplo, o GPT-3 tem 175 bilhões de parâmetros), o fine-tuning completo, que reentreina todos os parâmetros, se torna inviável por causa do tempo, do custo e dos recursos necessários.

\n

A LoRA é uma técnica usada para fazer o fine-tuning de modelos grandes.

\n

Como a LoRA funciona

\n

Em alto nível, é assim que a LoRA funciona:

\n

Ela mantém o modelo original inalterado e adiciona pequenas partes ajustáveis em cada camada. Isso reduz significativamente os parâmetros treináveis do modelo e diminui a necessidade de memória de GPU no treinamento — outro grande desafio quando falamos de treinar ou fazer fine-tuning de modelos grandes.

\n

Por exemplo, o fine-tuning completo do GPT-3 exigiria treinar 175 bilhões de parâmetros. Usando LoRA, os parâmetros treináveis no GPT-3 caem em cerca de 10.000 vezes, e a necessidade de memória de GPU reduz por volta de três vezes.

\n

Em essência, a LoRA resolve estes problemas:

\n
    \n
  1. Velocidade - menos parâmetros treináveis significam treinamento mais rápido
  2. \n
  3. Recursos de computação - menos parâmetros treináveis exigem menos recursos de computação, tornando financeiramente viável fazer fine-tuning de modelos grandes.
  4. \n
  5. Eficiência de memória - com menos parâmetros treináveis, é possível mantê-los em memória, evitando leituras de disco, que são menos eficientes do que ler da memória.
  6. \n
\n

Matrizes de posto inferior (lower-rank)

\n

Antes de entrar nos detalhes da LoRA, vamos entender o conceito de matrizes de posto inferior.

\n

Matrizes de posto inferior são um conceito de matemática, mais especificamente de álgebra linear. Em termos simples, o posto (rank) de uma matriz mede o \"conteúdo de informação\" ou a \"dimensionalidade\" dos dados representados por ela. Vamos por partes:

\n
    \n
  • Matriz:
    Uma matriz é um arranjo retangular de números. Por exemplo, uma matriz 3x3 tem 3 linhas e 3 colunas.
  • \n
\n
    \n
  • Posto de uma matriz
    O posto é determinado pelo número de linhas ou colunas linearmente independentes. Linearmente independente significa que nenhuma linha (ou coluna) pode ser formada por combinação linear de outras.
    Se todas as linhas (ou colunas) são independentes, a matriz tem posto completo.
    Se algumas podem ser formadas pela combinação de outras, a matriz tem posto inferior.
  • \n
\n
    \n
  • Matrizes de posto inferior:
    Uma matriz tem posto inferior se seu posto é menor que o máximo possível dado seu tamanho. Por exemplo, em uma 3x3, se o posto for menor que 3, é uma matriz de posto inferior.
  • \n
\n

Exemplo:

\n

Considere uma matriz 3 x 3:

\n

\"image2.png\"

\n

Aqui, a segunda linha é apenas a primeira multiplicada por 2, e a terceira é a primeira multiplicada por 3. Isso significa que as linhas não são linearmente independentes. O posto dessa matriz é 1 (já que apenas a primeira linha é independente), menor que o posto máximo para 3x3, que é 3. Logo, é uma matriz de posto inferior.

\n

Matrizes de posto inferior são importantes em várias aplicações, como compressão de dados, em que reduzir o posto ajuda a comprimir mantendo o máximo possível de informação.

\n

O posto de uma matriz se aplica igualmente a linhas e colunas. O ponto crucial é que o posto é o mesmo, seja calculado pelas linhas ou pelas colunas. Isso decorre de uma propriedade fundamental da álgebra linear chamada Teorema do Posto-Nulidade (Rank-Nullity).

\n

Em termos simples, o teorema afirma que as dimensões do espaço das linhas e do espaço das colunas de uma matriz são iguais. Essa dimensão comum é o que chamamos de posto da matriz.

\n

Assim, no exemplo acima da matriz 3 x 3, o posto é 1, o que significa que há apenas uma linha e apenas uma coluna linearmente independentes.

\n

O que é a LoRA?

\n

Em palavras bem simples, a LoRA aproveita o conceito de matrizes de posto inferior para tornar o treinamento do modelo extremamente eficiente e rápido.

\n

Modelos grandes têm muitos parâmetros. Por exemplo, o GPT-3 tem 175 bilhões de parâmetros. Esses parâmetros são números armazenados em matrizes. Armazená-los exige muito espaço.

\n

Fine-tuning completo significa treinar todos os parâmetros, o que exige uma quantidade extraordinária de recursos de computação — facilmente milhões de dólares para um modelo do porte do GPT.

\n

Diferente do fine-tuning tradicional, que ajusta o modelo inteiro, a LoRA foca em modificar um subconjunto menor de parâmetros (matrizes de posto inferior), reduzindo o custo computacional e de memória.

\n

A LoRA parte do entendimento de que modelos grandes possuem, inerentemente, uma estrutura de baixa dimensionalidade. Ao usar matrizes de baixo posto, a LoRA adapta esses modelos com eficiência. A ideia central é que mudanças significativas podem ser representadas com menos parâmetros, tornando a adaptação mais eficiente.

\n

\"Fine-Tuning

\n

Fonte: Fine-Tuning LLMs: LoRA or Full-Parameter? An in-depth Analysis with Llama 2

\n

Como funciona na prática?

\n

Primeiro, decompomos as grandes matrizes de pesos em matrizes menores usando a técnica de posto inferior, como explicado acima. Isso reduz drasticamente o número de parâmetros treináveis. Em um modelo como o GPT-3, os parâmetros treináveis caem em 10.000 vezes. Ou seja, em vez de treinar 175 bilhões de parâmetros, com LoRA você treina apenas 17,5 milhões.

\n

Não alteramos nenhum parâmetro do modelo pré-treinado. Em vez disso, treinamos apenas as matrizes de baixo posto, o que acontece muito mais rápido por haver menos parâmetros.

\n

Os pesos são aditivos. Para inferência, basta somar os pesos das matrizes de baixo posto aos pesos pré-treinados, sem latência adicional. Essas matrizes também são muito pequenas, então é fácil carregá-las e descarregá-las para tarefas e usuários diferentes.

\n

Vantagens da LoRA

\n

Há várias vantagens em usar LoRA para fine-tuning:

\n

1. Eficiência no treinamento e na implantação

\n

A LoRA reduz a carga computacional, permitindo adaptação mais rápida dos modelos. Ao exigir menos parâmetros treináveis, torna viável fazer fine-tuning de modelos grandes em hardwares menos potentes.

\n

2. Manutenção da qualidade e da velocidade de inferência

\n

Mesmo com menos parâmetros, a LoRA mantém a qualidade do modelo original e a velocidade de inferência.

\n

3. Redução do tamanho de checkpoints

\n

A LoRA reduz drasticamente o tamanho dos checkpoints. Por exemplo, no GPT-3, o checkpoint caiu de 1 TB para apenas 25 MB.

\n

4. Sem latência de inferência

\n

A LoRA não adiciona latência durante a inferência. As matrizes de baixo posto são usadas no treinamento e então fundidas aos parâmetros originais para a inferência, garantindo que não haja lentidão. Isso possibilita alternar rapidamente o modelo em tempo de execução sem penalidade de latência.

\n

5. Versatilidade

\n

A LoRA pode ser aplicada a qualquer modelo que use multiplicação de matrizes (como uma support vector machine), tornando-se uma técnica amplamente aplicável em muitos outros casos. Na prática, a LoRA é muito usada em modelos de Stable Diffusion para incorporar estilos em grandes modelos de imagem.

\n

LoRA no Stable Diffusion

\n

A técnica LoRA também é amplamente adotada em modelos de imagem como o Stable Diffusion.

\n

A ideia é basicamente a mesma dos modelos de linguagem. Em vez de fazer fine-tuning completo de modelos grandes como o Stable Diffusion, treinamos apenas matrizes de baixo posto em conjuntos de dados pequenos.

\n

Em modelos de linguagem, o objetivo é a especificidade de domínio. Em modelos de imagem, o caso de uso mais evidente é adotar um estilo ou manter um personagem consistente na geração.

\n

Essas matrizes de baixo posto são conhecidas como adapters; elas são bem pequenas e há milhares disponíveis na internet para você baixar, aplicar sobre o seu modelo base do Stable Diffusion e gerar imagens com estilo específico.

\n

Alguns usos comuns de LoRA no Stable Diffusion são:

\n
    \n
  • Especialização de estilo - estilo anime, pintura a óleo, etc.
  • \n
  • Especialização de personagem - gerar imagens do Mario ou Bob Esponja com consistência
  • \n
  • Melhorias de qualidade - mais detalhes, rostos melhores, etc.
  • \n
\n

Você pode combinar várias LoRAs para obter resultados que reflitam múltiplas especializações.

\n

\"image1.png\"

\n

Diferentes adapters para modelos Stable Diffusion (Fonte da imagem)

\n

Se você quer aprender a fazer o fine-tuning do Stable Diffusion XL com fotos pessoais, confira o blog Fine-tuning Stable Diffusion XL with DreamBooth and LoRA no Datacamp.

\n

Combinando LoRA com prefix-tuning

\n

Prefix-tuning é um método leve em que vetores contínuos chamados \"prefixos\" são otimizados e adicionados à entrada de cada camada do Transformer. O modelo é treinado de forma \"prefix-stripped\", focando apenas nesses vetores.

\n

Benefícios do prefix-tuning:

\n
    \n
  • Exige armazenar apenas pequenos vetores de prefixo por tarefa, em vez de cópias completas de modelos ajustados.
  • \n
  • Facilita a troca de tarefas e a personalização.
  • \n
  • Tem desempenho comparável ao fine-tuning completo, especialmente com poucos dados.
  • \n
  • É computacionalmente mais barato, pois apenas os prefixos são atualizados durante o treinamento.
  • \n
\n

A LoRA e o prefix-tuning podem ser combinados dentro do framework PEFT (Parameter Efficient Fine-Tuning):

\n
    \n
  • A LoRA reduz o total de parâmetros, enquanto o prefix-tuning oferece controle específico por tarefa
  • \n
  • Juntos, permitem um fine-tuning especializado com mínimo de dados e computação
  • \n
  • São ideais para adaptação de domínio de grandes LLMs usando dados limitados do domínio
  • \n
  • Esse fine-tuning modular libera todo o potencial de LLMs para usuários com recursos restritos.
  • \n
\n

Exemplo de implementação de LoRA usando a biblioteca Loralib em Python

\n

Para implementar LoRA, você pode usar a biblioteca Loralib, da Microsoft. Para instalar:

\n
pip install loralib\n
\n

A forma como você treina sua rede neural normalmente muda muito pouco para adotar a LoRA.

\n
# ===== Before =====\n# layer = nn.Linear(in_features, out_features)\n\n# ===== After ======\nimport loralib as lora\n# Add a pair of low-rank adaptation matrices with rank r=16\nlayer = lora.Linear(in_features, out_features, r=16)\n
\n

Antes de iniciar o loop de treinamento, você só precisa adicionar:

\n
import loralib as lora\n\nmodel = YourNeuralNetwork()\n\n# This sets requires_grad to False for all parameters\nlora.mark_only_lora_as_trainable(model)\n\n# Training loop\nfor batch in dataloader:\n   ...\n
\n

Ao salvar um checkpoint, você pode gerar um state_dic que contém apenas os parâmetros da LoRA.

\n
# ===== Before =====\n# torch.save(model.state_dict(), checkpoint_path)\n\n# ===== After =====\ntorch.save(lora.lora_state_dict(model), checkpoint_path)\n
\n

Se você ainda não entende bem redes neurais, não se preocupe. Confira o blog How to Train a LLM with PyTorch para dominar o processo de treinar grandes modelos de linguagem com PyTorch, do setup inicial à implementação final.

\n

Créditos: o exemplo de código foi reproduzido do Microsoft/LoRA no GitHub.

\n

Conclusão

\n

A LoRA surge como uma técnica indispensável para enfrentar os grandes desafios impostos pelo tamanho e pela complexidade dos modelos modernos.

\n

Ao aproveitar matrizes de posto inferior, a LoRA oferece uma abordagem mais eficiente e econômica para adaptação de modelos, reduzindo significativamente os parâmetros treináveis e a necessidade de memória de GPU — o que viabiliza treinamentos mais rápidos e uso de memória mais eficiente.

\n

A aplicação da LoRA vai além dos modelos de linguagem, chegando a modelos de imagem como o Stable Diffusion, em que facilita a especialização de estilo e a consistência de personagens na geração de imagens.

\n

Se você ficou curioso e quer explorar o que dá para construir com essas tecnologias, confira nosso guia no blog 5 Projects You Can Build with Generative AI Models para saber mais.


Moez Ali's photo
Author
Moez Ali
LinkedIn
Twitter

Cientista de dados, fundador e criador do PyCaret

Tópicos
Inteligência Artificial
Aprendizado de máquina

Comece sua jornada em IA hoje mesmo!

Curso

Conceitos de IA Generativa

2 h
117.2K
Descubra como usar IA generativa de forma responsável e seu impacto futuro na sociedade.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

blog

Introdução ao LLaMA da Meta AI

O LLaMA, uma estrutura revolucionária de código aberto, tem como objetivo tornar mais acessível a pesquisa de modelos de linguagem de grande porte.
Abid Ali Awan's photo

Abid Ali Awan

8 min

blog

Entendendo e atenuando o viés em modelos de idiomas grandes (LLMs)

Mergulhe em um passo a passo abrangente sobre a compreensão do preconceito nos LLMs, o impacto que ele causa e como atenuá-lo para garantir a confiança e a justiça.
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

12 min

blog

Avaliação do LLM: Métricas, metodologias, práticas recomendadas

Saiba como avaliar modelos de linguagem grandes (LLMs) usando métricas importantes, metodologias e práticas recomendadas para tomar decisões informadas.
Stanislav Karzhev's photo

Stanislav Karzhev

9 min

Tutorial

Guia de Introdução ao Ajuste Fino de LLMs

O ajuste fino dos grandes modelos de linguagem (LLMs, Large Language Models) revolucionou o processamento de linguagem natural (PLN), oferecendo recursos sem precedentes em tarefas como tradução de idiomas, análise de sentimentos e geração de textos. Essa abordagem transformadora aproveita modelos pré-treinados como o GPT-2, aprimorando seu desempenho em domínios específicos pelo processo de ajuste fino.
Josep Ferrer's photo

Josep Ferrer

11 min

Tutorial

Como treinar um LLM com o PyTorch

Domine o processo de treinamento de grandes modelos de linguagem usando o PyTorch, desde a configuração inicial até a implementação final.
Zoumana Keita 's photo

Zoumana Keita

8 min

Tutorial

Ajuste fino do Llama 3.1 para classificação de textos

Comece a usar os novos modelos Llama e personalize o Llama-3.1-8B-It para prever vários distúrbios de saúde mental a partir do texto.
Abid Ali Awan's photo

Abid Ali Awan

13 min

Ver MaisVer Mais