Addestrare il modello sui tuoi dati
Il fine-tuning adatta un modello pre-addestrato al tuo dominio specifico: terminologia, stile, conoscenze proprietarie.
1. Quando fare fine-tuning
- Il RAG non basta (serve cambiare lo stile/comportamento)
- Task molto specifico (classificazione, estrazione dati)
- Serve un modello più piccolo e veloce per un compito preciso
2. Preparare il dataset
# Formato JSONL (una riga per esempio)
{"messages": [{"role": "system", "content": "Sei un esperto di sicurezza."}, {"role": "user", "content": "Cos e un firewall?"}, {"role": "assistant", "content": "Un firewall e un sistema di sicurezza che..."}]}
{"messages": [{"role": "user", "content": "Come configuro SSH?"}, {"role": "assistant", "content": "Per configurare SSH in sicurezza..."}]}
3. Fine-tuning con Unsloth (efficiente)
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="unsloth/llama-3.2-8b-bnb-4bit",
max_seq_length=2048,
load_in_4bit=True
)
model = FastLanguageModel.get_peft_model(model,
r=16, lora_alpha=16,
target_modules=["q_proj","k_proj","v_proj","o_proj"],
lora_dropout=0, bias="none"
)
# Training con il tuo dataset
from trl import SFTTrainer
trainer = SFTTrainer(
model=model, tokenizer=tokenizer,
train_dataset=dataset,
max_seq_length=2048,
args=TrainingArguments(
per_device_train_batch_size=2,
num_train_epochs=3,
learning_rate=2e-4,
output_dir="outputs"
)
)
4. Esportare per Ollama
# Salvare in GGUF
model.save_pretrained_gguf("modello-custom", tokenizer, quantization_method="q4_k_m")
# Creare Modelfile per Ollama
# FROM modello-custom-q4_k_m.gguf
ollama create mio-modello -f Modelfile
Il fine-tuning con LoRA richiede meno VRAM del training completo: un modello 7B si addestra su una singola RTX 3060 da 12 GB.