Fine-tuning, önceden eğitilmiş büyük dil modellerini (LLM) spesifik görevler veya domainler için özelleştirme sürecidir. OpenAI, Anthropic ve açık kaynak modeller için fine-tuning, kurumsal AI çözümlerinin temelini oluşturur.
Fine-tuning Nedir?
Fine-tuning, foundation model'in (GPT-4, Llama, Mistral vb.) ağırlıklarını özel veri setiyle yeniden eğiterek, belirli bir alanda uzmanlaştırma işlemidir.
Ne Zaman Fine-tuning Gerekir?
- Prompt engineering yeterli değilse
- Tutarlı format/stil gerekiyorsa
- Domain-specific bilgi gerekiyorsa
- Latency kritikse (kısa prompt'larla)
- Token maliyetini düşürmek istiyorsanız
Fine-tuning vs RAG vs Prompt Engineering
| Yöntem | Kullanım Alanı | Avantaj |
|---|---|---|
| Prompt Engineering | Basit görevler | Hızlı, maliyet yok |
| RAG | Güncel/özel bilgi | Halüsinasyon azaltır |
| Fine-tuning | Stil/format/davranış | Tutarlılık, performans |
Veri Hazırlığı
Format (OpenAI)
{"messages": [
{"role": "system", "content": "Sen müşteri hizmeti asistanısın."},
{"role": "user", "content": "Siparişim nerede?"},
{"role": "assistant", "content": "Sipariş numaranızı alabilir miyim?"}
]}
Veri Kalitesi İpuçları
- En az 50-100 örnek (ideal 500+)
- Çeşitli senaryolar
- Tutarlı format
- Gerçek kullanım vakalarından örnekler
- Edge case'ler dahil
OpenAI Fine-tuning
# 1. Veri yükle
from openai import OpenAI
client = OpenAI()
file = client.files.create(
file=open("training_data.jsonl", "rb"),
purpose="fine-tune"
)
# 2. Fine-tuning job başlat
job = client.fine_tuning.jobs.create(
training_file=file.id,
model="gpt-3.5-turbo", # veya gpt-4
hyperparameters={
"n_epochs": 3
}
)
# 3. Modeli kullan
response = client.chat.completions.create(
model="ft:gpt-3.5-turbo:my-org:custom_suffix:id",
messages=[{"role": "user", "content": "..."}]
)
Açık Kaynak Modeller (Llama, Mistral)
LoRA (Low-Rank Adaptation)
Tüm model yerine küçük adapter katmanları eğiterek verimli fine-tuning:
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-v0.1")
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05
)
model = get_peft_model(model, lora_config)
QLoRA
4-bit quantization + LoRA ile düşük bellek gereksinimi:
- 7B model: ~6GB VRAM
- 13B model: ~10GB VRAM
- 70B model: ~40GB VRAM
Hyperparameters
- Epochs: 2-4 genellikle yeterli
- Learning Rate: 1e-5 ile 5e-5 arası
- Batch Size: VRAM'a göre
- LoRA Rank (r): 8-64 arası
Değerlendirme
- Test seti ayırın (%10-20)
- A/B testi yapın (base vs fine-tuned)
- Domain-specific metrikler belirleyin
- Human evaluation (ölçeklendirilemese de değerli)
Maliyetler
- OpenAI: $8/1M tokens (training), model kullanım ücreti
- Açık kaynak: GPU saati (A100: ~$2/saat)
- Cloud: AWS SageMaker, Google Vertex AI
Fine-tuning, LLM'leri spesifik ihtiyaçlara uyarlamanın güçlü bir yoludur. Doğru veri ve parametrelerle, base modelden çok daha iyi sonuçlar elde edebilirsiniz.