Olá!
Se você chegou até aqui, é porque está interessado em fazer o fine-tuning de modelos de IA de código aberto para seus próprios propósitos (chatbot, assistente de codificação, especialista em um domínio, etc.). Aqui está uma visão geral simples e amigável para iniciantes, que você pode usar diretamente no contexto do Laravel ou desenvolvimento web geral.
1. O que significa "fazer fine-tuning de um modelo de IA de código aberto"?
Fine-tuning significa pegar um modelo pré-treinado existente (como LLaMA‑2, Mistral ou algo do Hugging Face) e treiná-lo um pouco mais em seus próprios dados, para que ele:
- Se adapte ao seu domínio (jurídico, financeiro, médico, jogos, etc.)
- Aprenda seu tom e estilo
- Melhore em uma tarefa específica (QA, codificação, classificação, suporte, etc.)
Em vez de treinar do zero (o que é caro e demorado), você reutiliza um modelo base poderoso e o especializa.
2. Principais opções de fine-tuning
Existem 3 abordagens principais que você verá:
2.1 Fine-tuning Completo
- Atualiza todos os pesos do modelo.
- Prós: Máxima flexibilidade e desempenho.
- Contras: Requer muita GPU, tempo e armazenamento.
Isso geralmente é exagerado, a menos que você seja uma instituição de pesquisa ou uma grande empresa.
2.2 LoRA / PEFT (Fine-tuning Eficiente em Parâmetros)
- Congela o modelo base e treina apenas pequenas camadas adaptadoras (matrizes LoRA).
- Use bibliotecas como:
Prós:
- Requisitos de VRAM muito menores
- Mais rápido
- Você pode compartilhar apenas os adaptadores, não todo o modelo
Contras:
- Ligeiramente menos expressivo que o fine-tuning completo, mas geralmente bom o suficiente.
2.3 QLoRA (LoRA Quantizado)
- Combina quantização (por exemplo, 4 bits) com LoRA.
- Carrega o modelo base em precisão mais baixa (
int4ouint8). - Treina os adaptadores LoRA em cima dele.
- Carrega o modelo base em precisão mais baixa (
Prós:
- Você pode fazer fine-tuning de modelos grandes em uma única GPU (mesmo uma GPU de consumidor como 24 GB).
- Muito popular para modelos estilo LLaMA.
Recomendado para a maioria dos desenvolvedores individuais.
3. Escolhendo um modelo base de código aberto
Onde obter modelos:
Opções comuns:
- Chat/Assistente:
mistralai/Mistral-7B-Instruct-v0.2meta-llama/Llama-3-8b-instruct(se a licença e o acesso funcionarem para o seu caso de uso)
- Código:
codellama/CodeLlama-7b-Instruct-hfdeepseek-ai/deepseek-coder-6.7b-instruct
Coisas para verificar:
- Licença (comercial vs não comercial)
- Tamanho do modelo (7B é um bom ponto de partida)
- Instruction‑tuned vs base: Para um chatbot, escolha um modelo instruct/chat.
4. Preparando seus dados para fine-tuning
A forma dos seus dados é mais importante do que as pessoas pensam.
4.1 Que tipo de dados você deve usar?
Exemplos:
- Logs de chat de suporte ao cliente
- Documentos de perguntas frequentes
- Artigos da base de conhecimento
- Repositórios de código + descrições
- Artigos de pesquisa específicos do domínio
Limpe seus dados:
- Remova PII / segredos (chaves de API, e-mails, senhas)
- Desduplique textos semelhantes
- Corrija quaisquer problemas óbvios de formatação
4.2 Formatos de Instrução Comuns
Para modelos de chat, o formato comum do Hugging Face é:
{
"instruction": "Por favor, explique o que é fine-tuning em termos simples.",
"input": "",
"output": "Fine-tuning é pegar um modelo já treinado e treiná-lo ainda mais em seus próprios dados..."
}
Ou, um formato mais parecido com um chat:
{
"messages": [
{"role": "system", "content": "Você é um assistente útil para responder a perguntas sobre contabilidade."},
{"role": "user", "content": "Como devo registrar o pagamento de uma fatura?"},
{"role": "assistant", "content": "Para registrar o pagamento de uma fatura, você deve..."}
]
}
Salve como .jsonl (um objeto JSON por linha), .json ou um dataset do Hugging Face.
5. Exemplo mínimo: Fine-tuning com Hugging Face + LoRA
Em geral, você precisa:
- Python 3.10+
- Uma GPU (idealmente >= 16 GB de VRAM para 7B, 24 GB é mais confortável)
- Bibliotecas:
transformersdatasetspeftbitsandbytesaccelerate
5.1 Instale as dependências
pip install "transformers>=4.39.0" "datasets" "accelerate" "peft" "bitsandbytes"
5.2 Script QLoRA simples (conceito)
from datasets import load_dataset
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
from peft import LoraConfig, get_peft_model
import torch
model_name = "mistralai/Mistral-7B-Instruct-v0.2"
dataset_path = "path_or_hf_dataset" # Ex: "my-username/my-dataset"
tokenizer = AutoTokenizer.from_pretrained(model_name)
tokenizer.pad_token = tokenizer.eos_token
model = AutoModelForCausalLM.from_pretrained(
model_name,
load_in_4bit=True,
device_map="auto"
)
dataset = load_dataset(dataset_path, split="train")
def format_example(example):
user = example["instruction"]
answer = example["output"]
prompt = f"User: {user}
Assistant:"
return {"input_ids": tokenizer(prompt, truncation=True, padding="max_length", max_length=512)["input_ids"],
"labels": tokenizer(answer, truncation=True, padding="max_length", max_length=512)["input_ids"]}
tokenized = dataset.map(format_example, remove_columns=dataset.column_names)
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
training_args = TrainingArguments(
output_dir="./mistral-finetuned",
per_device_train_batch_size=2,
gradient_accumulation_steps=8,
learning_rate=2e-4,
num_train_epochs=3,
fp16=True,
logging_steps=10,
save_steps=500,
save_total_limit=2,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized
)
trainer.train()
model.save_pretrained("./mistral-finetuned-lora")
tokenizer.save_pretrained("./mistral-finetuned-lora")
Este é um referencial simplificado. Para uso em produção, consulte:
6. Integrando um modelo com fine-tuning ao seu aplicativo Laravel
Depois de ter um modelo com fine-tuning, você precisa servi-lo e chamá-lo do Laravel.
6.1 Diferentes maneiras de servir seu modelo
- Microserviço FastAPI / Flask (Python)
- Execute a inferência com
transformersou vLLM. - Exponha um endpoint
/generate.
- Execute a inferência com
- Text Generation Inference (TGI)
- Hugging Face TGI é otimizado para servir LLMs.
- Ollama (para alguns modelos)
- Ollama é executado em macOS/Linux e fornece uma API HTTP simples.
6.2 Endpoint de inferência básico (exemplo de Python + FastAPI)
from fastapi import FastAPI
from pydantic import BaseModel
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
app = FastAPI()
model_name = "./mistral-finetuned-lora"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.float16,
device_map="auto"
)
class GenerateRequest(BaseModel):
prompt: str
max_new_tokens: int = 256
temperature: float = 0.7
@app.post("/generate")
def generate(req: GenerateRequest):
inputs = tokenizer(req.prompt, return_tensors="pt").to(model.device)
output = model.generate(
**inputs,
max_new_tokens=req.max_new_tokens,
temperature=req.temperature,
do_sample=True,
pad_token_id=tokenizer.eos_token_id
)
text = tokenizer.decode(output[0], skip_special_tokens=True)
return {"result": text}
Execute isso em uma máquina com uma GPU.
6.3 Chame o modelo do Laravel
No Laravel, use Http::post() (de Illuminate\Support\Facades\Http) para se comunicar com seu serviço Python.
use Illuminate\Support\Facades\Http;
$response = Http::post('http://your-python-host:8000/generate', [
'prompt' => 'Por favor, explique o que é fine-tuning.',
'max_new_tokens' => 256,
'temperature' => 0.7,
]);
$result = $response->json()['result'] ?? null;
Você pode encapsular isso em uma classe de serviço (ex: App\Services\AIClient) e chamá-la de seus controllers.
7. Dicas para obter melhores resultados de fine-tuning
- Comece pequeno: Comece com um modelo 7B e um pequeno dataset (1k - 10k exemplos).
- Mantenha seus prompts consistentes: Use a mesma estrutura que você usará na inferência.
- Avalie com frequência:
- Crie um pequeno conjunto de perguntas de avaliação.
- Verifique as respostas após cada execução de treinamento.
- Evite overfitting:
- Use um conjunto de validação.
- Veja se o modelo está começando a memorizar.
- Documente suas configurações:
- LoRA rank, taxa de aprendizado, épocas, versão do dataset.
- Isso ajuda você a reproduzir boas execuções.
8. Ferramentas e frameworks comuns que vale a pena explorar
- Ecossistema Hugging Face
- vLLM – Serviço de alta taxa de transferência: https://github.com/vllm-project/vllm
- Axolotl – Toolkit de fine-tuning LLM: https://github.com/OpenAccess-AI-Collective/axolotl
- Deepspeed / FSDP para treinamento em grande escala: DeepSpeed
9. Quando o fine-tuning pode não ser necessário
Às vezes, você pode obter o que precisa com:
- Prompt engineering (melhores instruções e exemplos)
- RAG (Retrieval‑Augmented Generation) – Alimente documentos externos no momento da consulta, sem alterar os pesos
- Use Haystack, LlamaIndex ou LangChain
RAG geralmente é mais fácil de manter e atualizar do que o fine-tuning completo, especialmente para conhecimento que muda rapidamente.
10. Próximos passos
Se você está apenas começando:
- Escolha um modelo instruct do Hugging Face.
- Crie um pequeno dataset de instruções do seu próprio domínio.
- Execute um curto fine-tuning usando QLoRA + PEFT.
- Sirva o modelo por meio de uma pequena API Python.
- Chame do Laravel com
Http::post()e construa uma interface.
Conte-me sobre:
- Quais são seus casos de uso (chatbot, assistente de código, ferramenta interna, etc.)
- A qual hardware (GPU / RAM) você tem acesso
Eu posso delinear um plano de fine-tuning passo a passo adaptado à sua configuração exata.