Fine-tuning prispôsobí LLM vášmu špecifickému use case. Ale nie vždy je to správna voľba.

Kedy fine-tuning potrebujete

Áno, fine-tuning

  • Špecifický štýl/tón (brand voice)
  • Doménová terminológia (medicína, právo)
  • Konzistentný formát výstupu
  • Zníženie latencie (menší model)

Nie, použite RAG alebo prompting

  • Potrebujete aktuálne informácie
  • Firemné dokumenty/dáta
  • Málo trénovacích príkladov (<100)
  • Rýchle experimentovanie

Porovnanie prístupov

Metóda Kedy použiť Náklady Komplexita
Prompting MVP, experimenty Nízke Nízka
RAG Firemné dáta Stredné Stredná
Fine-tuning Štýl, formát Vysoké Vysoká
Pre-training Nová doména Veľmi vysoké Veľmi vysoká

OpenAI Fine-tuning

Príprava dát

# training_data.jsonl
{"messages": [
    {"role": "system", "content": "Si customer support agent."},
    {"role": "user", "content": "Kde je moja objednávka?"},
    {"role": "assistant", "content": "Rád vám pomôžem! Môžete mi poskytnúť číslo objednávky?"}
]}
{"messages": [
    {"role": "system", "content": "Si customer support agent."},
    {"role": "user", "content": "Chcem vrátiť produkt"},
    {"role": "assistant", "content": "Samozrejme! Vrátenie je možné do 30 dní..."}
]}

Spustenie fine-tuningu

from openai import OpenAI

client = OpenAI()

# Upload trénovacích dát
file = client.files.create(
    file=open("training_data.jsonl", "rb"),
    purpose="fine-tune"
)

# Spustenie fine-tuningu
job = client.fine_tuning.jobs.create(
    training_file=file.id,
    model="gpt-4o-mini-2024-07-18"
)

# Sledovanie progresu
print(client.fine_tuning.jobs.retrieve(job.id))

Použitie fine-tuned modelu

response = client.chat.completions.create(
    model="ft:gpt-4o-mini-2024-07-18:org::xxxx",
    messages=[
        {"role": "user", "content": "Kde je moja objednávka?"}
    ]
)

LoRA: Efektívny fine-tuning

Low-Rank Adaptation - trénujete len malú časť parametrov:

from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-3B")

lora_config = LoraConfig(
    r=16,  # rank
    lora_alpha=32,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
)

model = get_peft_model(model, lora_config)

# Trénovanie len ~0.1% parametrov
print(f"Trainable params: {model.num_parameters(only_trainable=True):,}")

Best Practices

Dáta

  1. Kvalita > kvantita - 100 kvalitných > 1000 slabých
  2. Diverzita - pokryte rôzne scenáre
  3. Konzistencia - rovnaký štýl vo všetkých príkladoch
  4. Validácia - 10-20% dát na testovanie

Tréning

# Hyperparametre pre OpenAI
{
    "n_epochs": 3,  # 1-4 typicky stačí
    "batch_size": 4,
    "learning_rate_multiplier": 0.5  # znížte ak overtrained
}

Evaluácia

def evaluate_model(model, test_data):
    correct = 0
    for example in test_data:
        response = model.generate(example["input"])
        if matches_expected(response, example["expected"]):
            correct += 1
    return correct / len(test_data)

Náklady

Model Tréning (1M tokenov) Inference
GPT-4o mini $3 $0.15/1M input
GPT-4o $25 $3.75/1M input

Záver

Fine-tuning je mocný nástroj, ale nie prvá voľba. Začnite s prompt engineeringom, potom RAG, a až keď to nestačí, zvážte fine-tuning.