Executando verificação de segurança...
8

Implementando um finetuning de um modelo GPT usando a biblioteca python OpenAI

Antes de começar será preciso criar uma conta no site https://platform.openai.com/ e criar uma API KEY.

Fine Tuning com OpenAI

Cenário

Vamos treinar um modelo para responder perguntas específicas sobre manutenção de máquinas, como interpretar códigos de erro ou fornecer orientações detalhadas.

Treinamento

O conjunto de dados deve ser preparado no formato JSONL (JSON Lines), onde cada linha contém um tríade de mensagens simulando system, user e assistant. Veja um exemplo para o contexto de manutenção. Crie um arquivo chamado finetune.jsonl com o seguinte conteúdo:

{"messages": [{"role": "system", "content": "Vocé um chatbot amigável que ajuda com respostas sobre manutenção preventiva."}, {"role": "user", "content": "O que significa o código de erro E102?\n\n###"}, {"role": "assistant", "content": " O código de erro E102 indica superaquecimento do motor. Verifique o nível de óleo e o sistema de resfriamento."}]}
{"messages": [{"role": "system", "content": "Vocé um chatbot amigável que ajuda com respostas sobre manutenção preventiva."}, {"role": "user", "content": "Como substituir o filtro hidráulico da prensa modelo X200?\n\n###"}, {"role": "assistant", "content": " Desligue a máquina, drene o óleo do sistema e instale um novo filtro modelo FH-300. Consulte o manual para etapas detalhadas."}]}
{"messages": [{"role": "system", "content": "Vocé um chatbot amigável que ajuda com respostas sobre manutenção preventiva."}, {"role": "user", "content": "Quais verificações fazer antes de ligar o torno CNC?\n\n###"}, {"role": "assistant", "content": " Certifique-se de que todas as ferramentas estão fixadas corretamente, o lubrificante está no nível adequado e o programa de operação foi carregado corretamente."}]}
{"messages": [{"role": "system", "content": "Você é um chatbot amigável que ajuda com respostas sobre manutenção preventiva."}, {"role": "user", "content": "Como verificar a tensão da correia do compressor?\n\n###"}, {"role": "assistant", "content": "Desligue o compressor e verifique a tensão pressionando a correia no meio. A tensão correta deve permitir um movimento de 1 a 2 cm. Ajuste conforme necessário."}]}
{"messages": [{"role": "system", "content": "Você é um chatbot amigável que ajuda com respostas sobre manutenção preventiva."}, {"role": "user", "content": "O que verificar antes de realizar a manutenção de uma máquina de solda?\n\n###"}, {"role": "assistant", "content": "Desligue a máquina e verifique as conexões elétricas, o nível de gás e a integridade do cabo de solda. Certifique-se de que a ventilação está funcionando corretamente."}]}
{"messages": [{"role": "system", "content": "Você é um chatbot amigável que ajuda com respostas sobre manutenção preventiva."}, {"role": "user", "content": "Qual a frequência para troca de óleo de um gerador de 20 kVA?\n\n###"}, {"role": "assistant", "content": "Recomenda-se trocar o óleo do gerador a cada 250 horas de operação ou a cada 6 meses, o que ocorrer primeiro. Verifique também o filtro de óleo a cada troca."}]}
{"messages": [{"role": "system", "content": "Você é um chatbot amigável que ajuda com respostas sobre manutenção preventiva."}, {"role": "user", "content": "Como fazer a calibração de uma balança industrial?\n\n###"}, {"role": "assistant", "content": "Para calibrar a balança, coloque pesos padrão sobre a plataforma e ajuste o visor para refletir o peso correto. Repita o processo em diferentes pontos de carga."}]}
{"messages": [{"role": "system", "content": "Você é um chatbot amigável que ajuda com respostas sobre manutenção preventiva."}, {"role": "user", "content": "O que devo verificar em um motor elétrico antes de colocá-lo em operação?\n\n###"}, {"role": "assistant", "content": "Verifique o nível de lubrificação, a integridade dos cabos de alimentação e a rotação do eixo manualmente. Certifique-se também de que o motor está limpo e sem obstruções."}]}
{"messages": [{"role": "system", "content": "Você é um chatbot amigável que ajuda com respostas sobre manutenção preventiva."}, {"role": "user", "content": "Como realizar a limpeza do filtro de ar de um compressor?\n\n###"}, {"role": "assistant", "content": "Desligue o compressor e retire o filtro de ar. Limpe-o com ar comprimido ou substitua-o, se necessário, para garantir uma boa performance do equipamento."}]}
{"messages": [{"role": "system", "content": "Você é um chatbot amigável que ajuda com respostas sobre manutenção preventiva."}, {"role": "user", "content": "O que deve ser inspecionado em uma empilhadeira antes de usá-la?\n\n###"}, {"role": "assistant", "content": "Verifique o nível de combustível ou carga da bateria, o funcionamento dos pneus, a integridade dos freios, a carga máxima permitida e os controles hidráulicos."}]}

O delimitador \n\n### no prompt ajuda o modelo a entender o início e o fim de cada pergunta.

A role user deve conter apenas a resposta sem detalhes extras.

São necessários no mínimo 10 exemplos. Não necessariamente mais exemplos melhor, pois você pode estar causando overfitting do modelo. Ou seja, criando um modelo enviesado a responder sempre com a mesma resposta sem poder de generalização.

Fine-tuning:

import os
from openai import OpenAI
from dotenv import load_dotenv

# Carregando variáveis de ambiente a partir do arquivo .env
load_dotenv(r".env")
OPENAI_SERVICE_ACCOUNT_KEY = os.getenv("OPENAI_SERVICE_ACCOUNT_KEY")

# Configurar a chave da API
client = OpenAI(api_key=OPENAI_SERVICE_ACCOUNT_KEY)

# Subir o arquivo de treinamento
file_obj = client.files.create(file=open("finetune.jsonl", "rb"), purpose="fine-tune")

# Criar modelo fine-tuned
job = client.fine_tuning.jobs.create(
    training_file=file_obj.id,
    # model="gpt-4o-mini-2024-07-18"
    model="gpt-3.5-turbo-0125",
)
print(job.fine_tuned_model)

https://platform.openai.com/docs/guides/fine-tuning/

Você pode tunar o modelo Vision (para imagens!!!)

Pelo dashboard é possível acompanhar a evolução do treinamento, veja figura abaixo:

train

Ao final do treinamento pegue o id do modelo fine-tuned criado:
model_id

Ahhhhh tem custo! Quanto maior o volume de dados, maior o tempo de treinamento e consequentemente o custo pra gerar o modelo fine-tuned. Esse exemplo custou certa de $0,08 ou 40 centavos convertidos para moeda brasileira.

cost

Utilização do modelo fine-tuned:

# O job demora uns 10min pra executar, é preciso acompanhar a evolução pelo dashboard: https://platform.openai.com/
# Quando o job finalizar você poderá acessar o nome do modelo criado para ser usado posteriormente
model_name = "ft:gpt-3.5-turbo-0125:iamferraz::AXdYDa3O"

completion = client.chat.completions.create(
    model=model_name,
    messages=[
        {
            "role": "system",
            "content": "Vocé um chatbot amigável que ajuda com respostas sobre manutenção preventiva.",
        },
        {
            "role": "user",
            "content": "O que significa o código de erro E102?",
        },
    ],
    max_tokens=100,
)

print(completion.choices[0].message)

Resultado esperado

O modelo fornecerá respostas específicas baseadas nos dados de treinamento, como:

“O código de erro E102 indica superaquecimento do motor. Verifique o nível de óleo e o sistema de resfriamento.”

Esse resultado era esperado dado que passamos o seguinte dado de treinamento:

{"messages": [{"role": "system", "content": "Vocé um chatbot amigável que ajuda com respostas sobre manutenção preventiva."}, {"role": "user", "content": "O que significa o código de erro E102?\n\n###"}, {"role": "assistant", "content": " O código de erro E102 indica superaquecimento do motor. Verifique o nível de óleo e o sistema de resfriamento."}]}

Conclusão

O fine tuning é ideal para criar modelos ajustados às necessidades específicas do seu negócio.

O código fonte pode ser encontrado aqui!

Carregando publicação patrocinada...
2
1
2

Bancana demais Iam, mas achei bem puxado o valor, 10 linhas por 40 centavos me parece caro caso for treinar algo bem maior, atualmente tenho estudado e compreendido um pouco sobre IA mas me surge algumas dúvidas em relação a RAG e fine tuning, no caso especifico, não seria melhor usar um RAG pensando em custo/beneficio? Existe uma performance melhor com o fine tuning?
Ambos tem o mesmo proposito?

2

Sabem me dizer se outros modelos ( não o da OpenAI) podemos usar a mesma estratégia de código para fazer o fine tunning? Ou ficou o formato do json e algum outro parâmetro muito específico para o gpt-3.5-turbo-0125, por exemplo?

1

Cada modelo tem sua peculiaridade. Mas o formato é um pouco parecido entre eles (json)... Olha a doc do Gemini (Google) https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini-supervised-tuning-prepare?hl=pt-br

{
  "systemInstruction": {
    "role": string,
    "parts": [
      {
        "text": string
      }
    ]
  },
  "contents": [
    {
      "role": string,
      "parts": [
        {
          // Union field data can be only one of the following:
          "text": string,
          "fileData": {
            "mimeType": string,
            "fileUri": string
          }
        }
      ]
    }
  ]
}
1

Cara, que legal. Me ajuda numa coisa: para fazer isso para a área médica (sou médico) como para auxiliar em condutas, leitura de exames de imagem... Seria possível?

Qual o link dos prints mostrados no artigo? Seria possível fazer essa database de treinamento a partir e arquivos pdf? (Não sei programar, no caso - mas estou aprendendo)

Parece uma ótima solução, e o preço me soou bem em conta para as possibilidades..

1