Blank white background with no objects or features visible.

NOVA PESQUISA: 80% dos custos de IA são invisíveis na fatura. Mais de 200 líderes revelam para onde o dinheiro vai. Leia→

Como Fazer o Ajuste Fino de um Llama-2 (7B) para Superar o ChatGPT

By TrueFoundry

Updated: August 3, 2023

Grandes modelos de linguagem (LLMs) estão se tornando cada vez mais poderosos e estão sendo usados para uma variedade de tarefas, incluindo chatbots, geração de texto e resposta a perguntas. No entanto, os LLMs podem ser caros e intensivos em recursos para treinar. Nesta publicação do blog, mostraremos como fazer o fine-tuning de um LLM menor (7B) para ter um desempenho melhor que o ChatGPT.

Fine-tuning é um processo de treinamento de um LLM em um conjunto de dados específico para melhorar seu desempenho em uma tarefa particular. Neste caso, faremos o fine-tuning de um LLM de 7B para multiplicar dois números.

Então, vamos começar com o desempenho de diferentes grandes modelos de linguagem em uma tarefa simples de multiplicação: 458*987 = 452046.

Primeiro, vamos analisar o modelo Llama-2-7B recentemente lançado pela Meta. Nós implantamos o Llama-2 na TrueFoundry e o testamos com as integrações Langchain da TrueFoundry. Aqui está o resultado.

Llama-2-7B 

Como podemos ver claramente, ele não tem um bom desempenho na tarefa. (o que também é esperado dado o tamanho do modelo). Vamos ver como os modelos de ponta se comportam na mesma tarefa:

Vamos ver o resultado do ChatGPT (GPT3.5 Turbo):

ChatGPT (GPT3.5 Turbo) 

Agora, a resposta (451.086) está muito próxima da resposta real, que é 452.046, mas a resposta não está correta.
Vamos tentar com um prompt diferente (para fazer um cálculo passo a passo e ver o que ele faz):

0:00/1×

ChatGPT com prompt personalizado para multiplicação

Mas, novamente, ele chega a um resultado incorreto: 450.606 🤨

Finalmente, vamos tentar o modelo de ponta (GPT-4) e verificar como ele se comporta na tarefa:

GPT 4

Está muito próximo da resposta correta (452.046) e pode parecer correto para qualquer um. Mas, claramente, a resposta está incorreta.

Por que os LLMs estão tendo um desempenho ruim em tarefas simples de multiplicação?

A resposta para esta pergunta é muito simples. Elas não são "treinadas" para isso.

LLMs são treinadas em vastos conjuntos de dados de texto e código, mas esses dados nem sempre são estruturados de uma forma que seja útil para o raciocínio matemático. Por exemplo, os dados podem não incluir representações explícitas de conceitos matemáticos, como adição, subtração, multiplicação e divisão. Isso pode dificultar que as LLMs aprendam a realizar essas operações corretamente.

Então, pensamos: seria possível treinar uma LLM para realizar operações matemáticas? Fizemos um experimento e os resultados foram bastante promissores!

Ajuste fino do Llama-2 7B para aprender multiplicação

Curadoria de um Conjunto de Dados

Para começar, fizemos a curadoria de um conjunto de dados de 40.000 linhas de prompts e instruções. Tentamos imitar os passos exatos seguidos no método de multiplicação longa, que envolve a quebra do multiplicando e do multiplicador em seus dígitos individuais, depois multiplicando cada dígito do multiplicando por cada dígito do multiplicador e colocando os resultados nas posições apropriadas com base em seus valores de posição. Finalmente, todos os produtos individuais são somados para obter o resultado final.

Aqui está um prompt de exemplo:

Você é um assistente prestativo que fornece respostas detalhadas para perguntas de multiplicação. Certifique-se de fornecer uma explicação completa usando o método de multiplicação longa para o problema matemático apresentado abaixo.

Se você não souber a resposta para uma pergunta, por favor, não compartilhe informações falsas. Quanto é 5244 * 1932?

E aqui está uma resposta de exemplo:

Aqui estão os passos para multiplicar 5244 * 1932 usando o método de multiplicação longa.
Passo 1: Divida 5244 em seus dígitos individuais: 5 (casa dos milhares), 2 (casa das centenas), 4 (casa das dezenas) e 4 (casa das unidades).
Passo 2: Da mesma forma, divida 1932 em seus dígitos individuais: 1 (casa dos milhares), 9 (casa das centenas), 3 (casa das dezenas) e 2 (casa das unidades).
- 4 (da casa das unidades do primeiro número) * 2 (da casa das unidades do segundo número) = 8 -> Desloque 0 casas para a esquerda (porque estamos multiplicando pela casa das unidades do segundo número) para obter 8
- 4 (da casa das unidades do primeiro número) * 3 (da casa das dezenas do segundo número) = 12 -> Desloque 1 casa para a esquerda (porque estamos multiplicando pela casa das dezenas do segundo número) para obter 120
- 4 (da casa das unidades do primeiro número) * 9 (da casa das centenas do segundo número) = 36 -> Desloque 2 casas para a esquerda (porque estamos multiplicando pela casa das centenas do segundo número) para obter 3600
- 4 (da casa das unidades do primeiro número) * 1 (da casa dos milhares do segundo número) = 4 -> Desloque 3 casas para a esquerda (porque estamos multiplicando pela casa dos milhares do segundo número) para obter 4000
- 4 (da casa das dezenas do primeiro número) * 2 (da casa das unidades do segundo número) = 8 -> Desloque 1 casa para a esquerda (porque estamos multiplicando pela casa das unidades do segundo número) para obter 80
- 4 (da casa das dezenas do primeiro número) * 3 (da casa das dezenas do segundo número) = 12 -> Desloque 2 casas para a esquerda (porque estamos multiplicando pela casa das dezenas do segundo número) para obter 1200
- 4 (da casa das dezenas do primeiro número) * 9 (da casa das centenas do segundo número) = 36 -> Desloque 3 casas para a esquerda (porque estamos multiplicando pela casa das centenas do segundo número) para obter 36000
- 4 (da casa das dezenas do primeiro número) * 1 (da casa dos milhares do segundo número) = 4 -> Desloque-o 4 casas para a esquerda (porque estamos a multiplicar pela casa dos milhares do segundo número) para obter 40000
- 2 (da casa das centenas do primeiro número) * 2 (da casa das unidades do segundo número) = 4 -> Desloque-o 2 casas para a esquerda (porque estamos a multiplicar pela casa das unidades do segundo número) para obter 400
- 2 (da casa das centenas do primeiro número) * 3 (da casa das dezenas do segundo número) = 6 -> Desloque-o 3 casas para a esquerda (porque estamos a multiplicar pela casa das dezenas do segundo número) para obter 6000
- 2 (da casa das centenas do primeiro número) * 9 (da casa das centenas do segundo número) = 18 -> Desloque-o 4 casas para a esquerda (porque estamos a multiplicar pela casa das centenas do segundo número) para obter 180000
- 2 (da casa das centenas do primeiro número) * 1 (da casa dos milhares do segundo número) = 2 -> Desloque-o 5 casas para a esquerda (porque estamos a multiplicar pela casa dos milhares do segundo número) para obter 200000
- 5 (da casa dos milhares do primeiro número) * 2 (da casa das unidades do segundo número) = 10 -> Desloque-o 3 casas para a esquerda (porque estamos a multiplicar pela casa das unidades do segundo número) para obter 10000
- 5 (da casa dos milhares do primeiro número) * 3 (da casa das dezenas do segundo número) = 15 -> Desloque-o 4 casas para a esquerda (porque estamos a multiplicar pela casa das dezenas do segundo número) para obter 150000
- 5 (da casa dos milhares do primeiro número) * 9 (da casa das centenas do segundo número) = 45 -> Desloque-o 5 casas para a esquerda (porque estamos a multiplicar pela casa das centenas do segundo número) para obter 4500000
- 5 (da casa dos milhares do primeiro número) * 1 (da casa dos milhares do segundo número) = 5 -> Desloque-o 6 casas para a esquerda (porque estamos a multiplicar pela casa dos milhares do segundo número) para obter 5000000

Agora, some todos esses resultados:
A soma de 8 + 120 + 3600 + 4000 + 80 + 1200 + 36000 + 40000 + 400 + 6000 + 180000 + 200000 + 10000 + 150000 + 4500000 + 5000000 = 10131408.

Em seguida, escrevemos um script Python que gera pares de prompt-resposta selecionando aleatoriamente dois dígitos para multiplicação. Curamos um conjunto de dados com 40.000 linhas.

Ajustando o Modelo

Agora, assim que o conjunto de dados estiver pronto, precisamos ajustar o modelo.
Estamos a usar a variante de chat ajustada (7 mil milhões de parâmetros) da Meta de Llama-2 como modelo base.

Realizámos o ajuste fino usando ajuste fino QLora usando as bibliotecas BitsAndBytes e Peft. Aqui está a configuração lora que usámos:

LoraConfig(
   lora_alpha=16,
   lora_dropout=0.1,
   r=64,
   bias="none",
   task_type="CAUSAL_LM",
   target_modules=[
       "q_proj",
       "k_proj",
       "v_proj",
       "o_proj",
   ],
)

Levou cerca de 8 horas para treinar em uma máquina GPU A100 de 40GB para um conjunto de dados de 40.000 linhas.

Finalmente, implantamos o modelo ajustado em TrueFoundry novamente e aqui estão os resultados:

Então, finalmente!! Podemos ver que o modelo ajustado é capaz de calcular o resultado corretamente.

Conclusão

Embora a aritmética não seja uma tarefa para a qual usaremos LLM, este exemplo demonstra como um LLM "pequeno" (7B parâmetros) ajustado corretamente para uma tarefa específica pode superar os LLMs "grandes" (como GPT3.5 turbo - 175B parâmetros e GPT-4) em uma tarefa específica.

Os modelos menores com ajuste fino têm baixo custo de inferência, são melhores em tarefas especializadas e podem ser facilmente implantados na sua própria nuvem!

Publicamos um artigo detalhado no blog sobre o ajuste fino do Llama 2

The fastest way to build, govern and scale your AI

Sign Up
Table of Contents

Govern, Deploy and Trace AI in Your Own Infrastructure

Book a 30-min with our AI expert

Book a Demo

The fastest way to build, govern and scale your AI

Book Demo

Discover More

July 20, 2023
|
5 min read

LLMOps CoE: A próxima fronteira no cenário de MLOps

May 25, 2023
|
5 min read

LLMs de Código Aberto: Abrace ou Pereça

August 27, 2025
|
5 min read

Mapeando o Mercado de IA On-Prem: De Chips a Planos de Controle

September 28, 2023
|
5 min read

O que é Ajuste Fino LoRA? O Guia Definitivo

May 21, 2026
|
5 min read

Adicionando OAuth2 a Jupyter Notebooks no Kubernetes

Engenharia e Produto
May 21, 2026
|
5 min read

Uma equipe de 2 pessoas atendendo um modelo para 1,5 milhão de pessoas com TrueFoundry

Engenharia e Produto
May 21, 2026
|
5 min read

Acelere o Processamento de Dados em 30–40x com NVIDIA RAPIDS no TrueFoundry

GPU
Engenharia e Produto
May 21, 2026
|
5 min read

Uma Parceria para IA Responsável: Truefoundry e Enkrypt AI

No items found.
No items found.

Recent Blogs

Black left pointing arrow symbol on white background, directional indicator.
Black left pointing arrow symbol on white background, directional indicator.
Take a quick product tour
Start Product Tour
Product Tour