🔥 Como treinar a sua própria SLM (small language model) ou Mini LLM - Passo a passo neste artigo!
Sempre quis criar uma IA capaz de gerar textos no seu estilo ou especializada em um tema específico? Vou mostrar como fiz isso com o meu projeto "Mini LLM", uma ferramenta simples mas poderosa para fine-tuning de modelos de linguagem.
⭐ Primeiro passo: Acesse o repositório do projeto e deixe sua estrela para apoiar a iniciativa!
Configuração Inicial
-
Clone o repositório e instale as dependências conforme o README:
git clone https://github.com/paulocoutinhox/mini-llm cd mini-llm pip install -r requirements.txt
-
Prepare seus dados de treinamento:
mkdir -p temp touch temp/data.txt
Agora adicione ao arquivo
data.txt
os textos que você quer que o modelo aprenda. Pode ser qualquer conteúdo: livros, artigos técnicos, ou até suas próprias conversas!
Treinamento do Modelo
Execute o treinamento com:
python3 main.py --train --clean
Por padrão, o sistema usa o modelo EleutherAI/gpt-neo-2.7B
, que é bom mas conhece principalmente inglês. O projeto oferece várias alternativas para diferentes necessidades:
- Modelos pequenos para dispositivos móveis
- Modelos médios e grandes para GPUs potentes
- Modelos especializados por idioma
Escolhendo um Modelo em Português
Para meus testes, escolhi um modelo pré-treinado em português:
export MINI_LLM_MODEL="pierreguillou/gpt2-small-portuguese"
python3 main.py --train --clean
Este modelo já entende português, então o fine-tuning foi muito mais eficiente!
Entendendo as Métricas
Durante o treinamento, observe dois valores fundamentais:
- Loss: Indica quanto o modelo está aprendendo do texto de treinamento
- Eval Loss: Mede o desempenho em dados que ele ainda não viu
Quanto menores estes valores, melhor! Mas atenção: se o eval loss ficar muito maior que o loss, seu modelo pode estar sofrendo de overfitting (decorando ao invés de aprender).
Ajustando as Épocas de Treinamento
Uma época representa uma passagem completa pelos dados de treinamento. O padrão é 20, mas para modelos já pré-treinados no idioma alvo, 1-5 épocas podem ser suficientes:
export MINI_LLM_EPOCHS=5
python3 main.py --train --clean
Original: https://www.dropbox.com/scl/fi/wu6tt9jwmfsjjna529vlj/direita.png?rlkey=n8bdmcqfiru02n56xpk4spd6c&dl=0
Treinado: https://www.dropbox.com/scl/fi/45spw2vz2enimijxt6tpt/esquerda.png?rlkey=u8124gxzsms58tzmv0qme1691&dl=0
Na imagem acima, vemos a diferença entre:
- Original: texto gerado pelo modelo original (com
--use-original
) - Treinado: texto gerado após apenas 1 época de treinamento com dados bíblicos
Mesmo com treino mínimo, o modelo já capturou o estilo e vocabulário do dataset!
Testando o Modelo Treinado
Após o treinamento, você pode testar o modelo gerando texto a partir de um prompt:
python3 main.py --generate "Seu texto inicial aqui"
Para comparar com o modelo original (sem fine-tuning):
python3 main.py --generate "Seu texto inicial aqui" --use-original
Requisitos de Hardware
O treinamento exige recursos significativos. Utilizei o RunPod, uma plataforma de GPU cloud que facilita muito o processo:
- Criei uma instância com GPU potente
- Usei o terminal web para executar os comandos
- Ao finalizar, salvei o modelo com o script de backup incluído:
python3 backup_to_s3.py
Siga as instruções do README para configurar as variáveis de ambiente necessárias para o backup.
Restaurando um Backup
Se você precisar restaurar seu modelo treinado:
# Baixe o backup via URL pública
wget https://seu-bucket.s3.amazonaws.com/mini-llm-backup/seu-backup.tar.gz
# Limpe a pasta temporária e extraia o backup
rm -rf temp/
tar -xzvf seu-backup.tar.gz -C .
Dicas para Melhores Resultados
- Qualidade dos dados: Use textos bem escritos e revisados
- Quantidade: Quanto mais dados, melhor (mesmo alguns MB já podem trazer resultados)
- Coerência: Mantenha o estilo e tema consistentes nos dados de treinamento
- Paciência: Observe as métricas e ajuste os parâmetros conforme necessário
Compartilhe Seus Resultados!
Este projeto é ideal para quem quer entender como funciona o fine-tuning de modelos de linguagem ou criar modelos personalizados para casos específicos.
Os resultados podem não ser perfeitos, mas o aprendizado é valioso! Experimente com diferentes textos, modelos e configurações.
Se você melhorar o código ou tiver ideias para torná-lo mais eficiente, contribua com um pull request! E não se esqueça de compartilhar seus resultados nos comentários.
Pronto para criar seu próprio modelo de linguagem? 🚀