Bir büyük dil modelini ince ayarlarken sonucu çoğu zaman tek bir “sihirli” hiperparametre değil, kararların birbirleriyle uyumu belirler. Full fine-tuning mi yoksa LoRA/QLoRA mı kullanılacağı; learning rate, batch büyüklüğü, gradient accumulation, sequence length ve VRAM stratejisinin tamamını değiştirir. Başka bir eğitimden kopyalanan ayarlar model, veri ve donanım değiştiğinde kolayca kararsız veya gereksiz pahalı bir koşuya dönüşebilir.
Bu teknik rehber, LLM fine-tuning sürecindeki temel ayarların ne yaptığını ve hangi sinyallere göre seçilmesi gerektiğini açıklıyor. Buradaki sayılar kesin reçete değil, kontrollü deney için başlangıç noktalarıdır. Nihai seçim; eğitim ve doğrulama kaybı, hedef görev başarısı, genel yetenek regresyonu, token/saniye ve tepe VRAM ölçülerek yapılmalıdır.
Full fine-tuning tüm ağırlıkları değiştirir ve en yüksek belleği ister; LoRA yalnızca düşük-rank adaptörleri eğitir. Önce veri uzunluk dağılımını ölçün, GPU'ya sığan en büyük gerçek micro-batch'i bulun, gerekli effective batch'e gradient accumulation ile ulaşın, öğrenme oranını küçük bir logaritmik sweep ile seçin ve scheduler'ı micro-step değil optimizer-step sayısına göre kurun. Metni rastgele ortadan kesmeyin; belge, talimat ve cevap sınırlarını koruyun.
1 Full fine-tuning nedir, LoRA'dan farkı nedir?
Full fine-tuning, modelin eğitilebilir bütün ağırlıklarının geri yayılım sırasında güncellenmesidir. Modelin davranışını geniş ölçekte değiştirebilir; ancak her parametre için ağırlık, gradyan ve optimizer state tutulduğu için bellek ve checkpoint maliyeti yüksektir. Veri dar veya dengesizse önceden öğrenilmiş genel yeteneklerin bozulması, yani catastrophic forgetting riski de daha büyüktür.
LoRA, temel ağırlığı dondurur ve seçili lineer katmanlara iki küçük düşük-rank matris ekler. Eğitimde yalnızca bu adaptörler güncellenir. LoRA çalışması, çok daha az eğitilebilir parametreyle full fine-tuning'e yakın görev performansının mümkün olabildiğini gösterdi (Hu ve ark., 2021). QLoRA ise donmuş temel ağırlıkları 4-bit quantize ederek VRAM ihtiyacını daha da azaltır (Dettmers ve ark., 2023).
| Karar | Full fine-tuning | LoRA / QLoRA |
|---|---|---|
| Eğitilen ağırlıklar | Modelin tamamı | Seçili adaptörler |
| VRAM ihtiyacı | Çok yüksek | Belirgin biçimde düşük |
| Tipik LR ölçeği | Daha düşük | Genellikle daha yüksek |
| Checkpoint | Tam model boyutu | Küçük adaptör dosyası |
| Davranış değişim kapasitesi | En yüksek | Rank ve hedef katmanlarla sınırlı |
| Genel yetenek regresyonu | Daha dikkatli izlenmeli | Taban model donduğu için genellikle daha kontrollü |
Bazı katmanları dondurup kalanlarını eğitmek “selective fine-tuning”dir; teknik olarak full fine-tuning değildir. Full fine-tuning ancak modelin tamamını değiştirmek için yeterli ve temsil edici veriniz, güçlü regresyon testiniz ve dağıtık eğitim altyapınız varsa anlamlıdır. Üslup, çıktı formatı veya dar bir görev davranışı için LoRA çoğu zaman daha iyi ilk deneydir.
2 Parametre seçimi: rank kadar target module de önemlidir
LoRA'da “kaç parametre eğitiliyor?” sorusunun cevabını yalnızca r belirlemez. Adaptörün hangi katmanlara takıldığı da toplam kapasiteyi ve belleği değiştirir. Attention içindeki q_proj,k_proj, v_proj ve o_proj; MLP içindeki gate_proj,up_proj ve down_proj sık hedeflerdir. Yalnızca query/value hedeflemek daha ucuzken bütün lineer katmanları hedeflemek daha yüksek uyarlama kapasitesi sağlar.
- r (rank): Adaptörün temsil kapasitesidir. Rank yükseldikçe eğitilebilir parametre ve VRAM artar.
- target_modules: Değişimin modelin hangi hesaplarına uygulanacağını belirler.
- modules_to_save: Adaptör dışında ayrıca eğitilip saklanacak katmanları belirtir.
- lora_dropout: Küçük veya tekrarlı veride regularization sağlayabilir; her koşuda gerekli değildir.
- bias: Bias ağırlıklarını eğitmek adaptör kapatıldığında taban modelle tam eşdeğerliği bozabilir.
Başlangıç için r=8, 16, 32 gibi küçük bir sweep, tek bir yüksek rank seçmekten daha bilgilendiricidir. Rank artınca doğrulama kazanımı duruyorsa daha büyük adaptör yalnızca maliyeti yükseltir. Modelin embedding veyalm_head katmanını eğitmek ise özellikle tokenizer'a yeni token eklendiğinde gerekebilir; aksi halde bunları otomatik olarak açmak checkpoint ve unutma riskini artırır.
3 LoRA alpha nedir?
LoRA temel ağırlığa bir güncelleme ekler. Basitleştirilmiş biçimde W' = W + sBA yazılabilir. BuradaA ve B eğitilen düşük-rank matrisler, s ise ölçekleme katsayısıdır. Klasik LoRA'da bu katsayı lora_alpha / r olarak hesaplanır. Örneğin r=16 vealpha=32 ise adaptör katkısının ölçeği 2 olur.
Alpha, rank değildir ve tek başına “öğrenme kapasitesi” anlamına gelmez. Adaptör güncellemesinin taban ağırlığa ne kadar güçlü ekleneceğini etkiler. Çok düşük ölçek adaptör sinyalini zayıflatabilir; çok yüksek ölçek eğitimi kararsızlaştırabilir veya hedef veriye aşırı uyuma yol açabilir. Learning rate ile etkileşir fakat aynı ayar değildir: LR optimizer adımının büyüklüğünü, alpha ise adaptörün ileri geçişteki katkı ölçeğini değiştirir.
Rank yükseltilirken klasik alpha/r ölçeği adaptör sinyalini gereğinden fazla küçültebilir. Rank-stabilized LoRA, alpha/sqrt(r) ölçeğini kullanır ve özellikle daha yüksek ranklarda daha kararlı bir alternatif sunar (Kalajdzievski, 2023). Hugging Face PEFT'te bu davranış use_rslora=True ile etkinleştirilebilir.
4 Learning rate neye göre seçilmeli?
Learning rate, tek optimizer adımında ağırlıkların ne kadar değişeceğini belirler. Çok yüksek LR kaybın sıçramasına, NaN'a veya genel yeteneklerin hızla bozulmasına; çok düşük LR ise eğitim bitmeden anlamlı değişim oluşmamasına yol açabilir. Doğru değer model boyutu, eğitilen parametre oranı, veri miktarı/kalitesi, effective batch, optimizer, toplam adım ve hedef göreve bağlıdır.
| Eğitim türü | Deney için makul başlangıç sweep'i | Neden? |
|---|---|---|
| Full fine-tuning | 5e-6, 1e-5, 2e-5 | Bütün taban ağırlıklar değiştiği için daha temkinli |
| LoRA | 5e-5, 1e-4, 2e-4 | Yalnızca küçük, yeni adaptörler eğitilir |
| Uzun veya gürültülü veri | Aralığın düşük tarafı | Toplam güncelleme ve drift riski artar |
| Kısa, temiz format öğretimi | Orta değer + erken durdurma | Az adımda görünür sinyal gerekebilir |
Bu aralıklar model dokümantasyonunun önüne geçmez. En güvenli yöntem, aynı veri sırası ve tohumla kısa LR sweep çalıştırmaktır. Eğitim kaybı kadar doğrulama görevi, KL/drift ölçüsü ve genel benchmark regresyonu izlenmelidir. Effective batch büyütülürken LR'nin doğrusal artırılması bazı büyük-batch rejimlerinde işe yarayabilir; ancak bu kural farklı optimizer ve LLM fine-tuning koşullarına körlemesine taşınmamalıdır. Büyük batch eğitiminde warmup ve LR ölçeklemesinin önemini gösteren klasik çalışma bu ilişkinin koşula bağlı olduğunu da vurgular (Goyal ve ark., 2017).
5 LR scheduler ve warmup nasıl seçilir?
Scheduler, LR'nin eğitim boyunca nasıl değişeceğini belirler. Hesap mutlaka optimizer stepüzerinden yapılmalıdır; gradient accumulation içindeki her micro-batch ayrı optimizer step değildir.
- Linear decay: Basit ve öngörülebilirdir. Sabit adımlı SFT koşuları için güçlü başlangıçtır.
- Cosine decay: LR'yi başta daha uzun süre yüksek tutar, sona doğru yumuşak azaltır. Uzun ve sabit bütçeli koşularda kullanışlıdır.
- Constant with warmup: Kısa fine-tuning'de LR'nin çok erken sıfıra yaklaşmasını önler; overfit izlenmelidir.
- WSD: Warmup, stable ve decay fazlarını ayrı kontrol etmek istenen uzun eğitimlerde anlamlıdır.
Warmup başlangıçtaki rastgele veya henüz uyum sağlamamış optimizer state yüzünden oluşabilecek sert güncellemeleri sınırlar. Toplam optimizer adımlarının yüzde 1-5'i pratik bir başlangıç aralığıdır; birkaç yüz adımlık çok kısa eğitimde oran yerine sabit adım sayısı daha anlamlı olabilir. Loss ilk adımlarda sıçrıyorsa warmup veya LR yeniden değerlendirilmelidir. Scheduler tanımları ve warmup davranışları Hugging Face optimizer dokümantasyonunda açıkça belirtilir (Transformers dokümantasyonu).
6 Batch ve gradient accumulation nedir?
Micro-batch, bir GPU'nun tek forward/backward geçişinde işlediği örnek sayısıdır.Effective batch ise bir optimizer güncellemesinin gördüğü toplam örnek sayısıdır:
effective_batch = per_device_batch
× gradient_accumulation_steps
× GPU_sayısı
Örnek: 2 × 8 × 4 GPU = optimizer adımı başına 64 örnekGradient accumulation, birkaç micro-batch'in gradyanını biriktirip optimizer'ı daha seyrek günceller. Böylece büyük batch tek seferde VRAM'e sığmasa da aynı effective batch'e yaklaşılır. Ancak daha hızlı değildir; aynı tokenlar için daha fazla ardışık forward/backward geçişi gerekir. Önce GPU'ya güvenle sığan en büyük micro-batch seçilmeli, yalnızca hedef effective batch'e ulaşmak için accumulation artırılmalıdır (Transformers gradient accumulation rehberi).
Değişken uzunluklu metinde “64 örnek” yanıltıcı olabilir: bir batch 20 bin, diğeri 200 bin hedef token taşıyabilir. Causal LM loss'u örnek sayısına değil, padding ve maskelenmiş alanlar çıkarıldıktan sonraki hedef token sayısına göre normalize etmek gerekir. Aksi halde kısa ve uzun micro-batch'leri biriktirmek, tek büyük batch ile matematiksel olarak aynı sonucu vermeyebilir.
7 VRAM nereye gider?
Eğitim belleği yalnızca model ağırlıklarından oluşmaz. Full fine-tuning'de ağırlıklar, gradyanlar, Adam'ın birinci ve ikinci momentleri, kimi kurulumlarda FP32 master ağırlıklar, activations, attention ara tensörleri ve geçici kernel buffer'ları birlikte VRAM tüketir. BF16 ağırlık + BF16 gradyan + FP32 master ağırlık + iki FP32 Adam state kaba hesabıyla model state maliyeti parametre başına yaklaşık 16 byte olabilir; framework ve optimizer uygulamasına göre değişir. Bu kaba hesapta 7B model yalnızca state'lerle 112 GB'a yaklaşır; activations henüz dahil değildir.
LoRA/QLoRA'da taban modelin gradyanı ve Adam state'i tutulmadığı için büyük tasarruf sağlanır. Yine de uzun sequence activations nedeniyle OOM oluşabilir. Bellek optimizasyonlarını şu sırada değerlendirmek genellikle daha sağlıklıdır:
- BF16 destekleniyorsa BF16; aksi durumda dikkatli FP16 mixed precision kullanın.
- Padding'i azaltmak için length grouping veya güvenli sequence packing uygulayın.
- FlashAttention/SDPA gibi bellek verimli attention kernel'larını kullanın.
- Micro-batch'i düşürüp gradient accumulation ile effective batch'i koruyun.
- Gradient checkpointing ile activation belleğini compute karşılığında azaltın.
- Optimizer state için 8-bit optimizer; çoklu GPU full FT için FSDP veya ZeRO düşünün.
- Ancak hâlâ gerekliyse CPU/NVMe offload veya paged optimizer kullanın.
FlashAttention attention matrisini HBM'de tam olarak materialize etmek yerine IO-aware tiling kullanır; daha az bellek erişimiyle uzun dizilerde hız ve bellek avantajı sağlar (Dao ve ark., 2022). Çoklu GPU full fine-tuning'de ZeRO; optimizer state, gradyan ve ilerleyen aşamada parametreleri GPU'lar arasında parçalayabilir (DeepSpeed ZeRO dokümantasyonu).
8 Paged optimizer ve “paged=True” ne zaman kullanılmalı?
Paged optimizer, QLoRA ile yaygınlaşan bir bellek taşması yönetimidir. CUDA Unified Memory kullanarak GPU belleği tükendiğinde optimizer sayfalarının bir kısmını CPU belleğine taşıyabilir. QLoRA makalesi bunu özellikle gradient checkpointing sırasında oluşan tepe bellek sıçramalarını yönetmek için tanıtır. Bitsandbytes tarafındapaged_adamw_8bit ve PagedAdamW8bit gibi seçenekler bulunur (bitsandbytes AdamW dokümantasyonu).
GPU ile CPU arasında page migration PCIe/NVLink trafiği ve gecikme oluşturabilir. Eğitim zaten rahatça VRAM'e sığıyorsa paged=True gereksizdir ve daha hızlı olacağı varsayılmamalıdır. OOM yalnızca kısa tepe anlarında oluşuyorsa faydalıdır; sürekli yoğun paging varsa micro-batch, sequence length, checkpointing veya dağıtık strateji düzeltilmelidir.
“Paged” ile “8-bit” ayrı özelliklerdir. 8-bit optimizer state'in kapladığı alanı küçültür; paged mekanizma gerektiği anda sayfaları host belleğine taşır. CPU RAM'in yetersiz olması, yavaş bağlantı veya sürekli bellek baskısı paging'i darboğaza dönüştürebilir. Karar tepe VRAM, page fault/migration ve step süresi birlikte ölçülerek verilmelidir.
9 Max sequence length neye göre seçilmeli?
max_length, modelin teorik context window değerine eşit olmak zorunda değildir. Seçim için önce tokenize edilmiş veri uzunluklarının p50, p90, p95, p99 ve maksimum değerleri çıkarılmalıdır. Ardından hedef görev sorulur: Ürün kısa diyalog mu üretecek, uzun rapor mu özetleyecek, kod dosyası mı tamamlayacak? Training length, production'da beklenen bağlamı temsil etmelidir.
- Çok düşük max length: Talimat-cevap bütünlüğünü ve uzun bağımlılıkları kaybettirir.
- Çok yüksek max length: Padding, activation ve attention maliyetini büyütür; batch'i küçültür.
- Tek uzunluk: Veri çok değişkense GPU kullanımını verimsizleştirir; length bucketing daha iyi olabilir.
- Context desteği: Model config sınırı, positional encoding yöntemi ve kullanılan kernel birlikte doğrulanmalıdır.
Standart self-attention'ın hesap ve ara bellek maliyeti dizi uzunluğuyla yaklaşık karesel büyür. Sequence'i 2 kat artırmak attention bölümünü yaklaşık 4 kat pahalı hale getirebilir; tüm modelin toplam maliyeti tam 4 kat olmak zorunda değildir. Bu nedenle 8K destekleyen modele her veriyi 8K padding ile vermek, “daha çok bağlam” değil çoğu zaman compute israfıdır.
10 Metni çat diye ortadan kesmek modele nasıl zarar verir?
Kör truncation, yalnızca birkaç token kaybetmek değildir. Sağdan kesme instruction örneğinin cevabını veya belgenin sonucunu yok edebilir; soldan kesme görevi ve sistem talimatını kaldırabilir. Belgenin ortasından alınan parça öznesiz, başlıksız veya kanıtsız kalabilir. Kod örneğinde fonksiyonun imzası başka parçada, kapanışı başka parçada kalır. Model böylece tamamlanmamış yapıları normal eğitim örneği sanabilir.
Özellikle supervised fine-tuning'de yalnızca cevabın sonu kesilmişse EOS hedefi yapay bir noktaya taşınabilir veya örnek cevapsız kalabilir. Talimat ve kullanıcı bölümü kaybolurken assistant tokenlarında loss hesaplamak modele bağlamsız cevap kalıpları öğretir. Pre-training'de belgeleri sürekli bir akışta birleştirip sabit boyda bölmek ise anlamsız belge geçişleri ve gereksiz truncation oluşturabilir. “Fewer Truncations Improve Language Modeling” çalışması, belge bütünlüğünü koruyan best-fit packing'in okuduğunu anlama, context following ve kod üretimi gibi görevlerde avantaj sağladığını raporladı (Ding ve ark., 2024).
Daha güvenli veri hazırlama
- Önce chat template'i uygulayın, sonra token uzunluğunu gerçek tokenizer ile ölçün.
- Talimat ve cevabı birlikte sığdıramıyorsanız örneği bölmek yerine filtreleyin veya semantik olarak yeniden yazın.
- Uzun belgeleri başlık, paragraf, bölüm veya kod bloğu sınırlarında chunk'layın.
- Gerekliyse sliding window ve kontrollü overlap kullanın; tekrar ağırlığını hesaba katın.
- Packing yaparken örnek sınırlarına EOS koyun ve attention/loss maskelerinin örnekler arası sızıntıyı önlediğini test edin.
- SFT'de kullanıcı/system tokenlarını maskeleyip yalnızca hedef assistant cevabında loss hesaplayacaksanız collator'ı unit test edin.
11 Başlangıç konfigürasyonu nasıl kurulmalı?
Aşağıdaki örnek bir reçete değil, birbirine bağlı ayarların nasıl açıkça yazılacağını gösteren başlangıç şablonudur:
# LoRA / QLoRA başlangıç deneyi
max_seq_length = veri_p95_ve_urun_ihtiyacina_gore
per_device_train_batch_size = GPUya_sigan_en_buyuk_guvenli_deger
gradient_accumulation_steps = hedef_effective_batch / (batch × GPU)
learning_rate = sweep([5e-5, 1e-4, 2e-4])
lr_scheduler_type = "cosine" # linear ile karşılaştır
warmup_ratio = 0.03
lora_r = sweep([8, 16, 32])
lora_alpha = rank_ile_birlikte_test_et
target_modules = mimariye_ve_goreve_gore_acikca_yaz
bf16 = donanim_destekliyorsa_true
gradient_checkpointing = ancak_vram_gerektiriyorsa_true
optim = "paged_adamw_8bit" # yalnızca ölçülen bellek baskısı varsaAynı anda bütün değişkenleri değiştirmek sonuçların nedenini görünmez hale getirir. Önce veri ve max length sabitlenmeli; LR/scheduler kısa koşuda seçilmeli; sonra rank/target modules denenmeli; en son batch ve bellek optimizasyonları throughput için ayarlanmalıdır. Her deneyde optimizer step, görülen hedef token sayısı, tepe VRAM, token/saniye, validation loss ve görev metriği kayıt altına alınmalıdır.
12 Eğitim koşusunu ne zaman durdurmalı?
Training loss düşmeye devam ederken validation loss veya gerçek görev başarısı bozuluyorsa model veriyi ezberliyor olabilir. Hedef görev yükselirken genel eval düşüyorsa catastrophic forgetting başlamış olabilir. En iyi checkpoint son checkpoint olmak zorunda değildir. Checkpoint seçimi, önceden tanımlanmış birincil metrik ve kabul edilebilir regresyon sınırları üzerinden yapılmalıdır.
NaN/Inf, ani gradient norm artışı, LR tepesinde loss sıçraması, sürekli CPU paging, token/saniye çöküşü veya beklenmedik padding oranı otomatik alarm üretmelidir. Bir koşuyu “bitirdiği için” başarılı saymak yerine veri, optimizasyon ve serving metriklerinin tamamı değerlendirilmelidir.
✦ Sonuç
LLM fine-tuning'de doğru ayar tek tek hiperparametrelerden değil, sistemin bütünüyle kurduğu dengeden çıkar. Full fine-tuning düşük LR, güçlü dağıtık bellek yönetimi ve ciddi regresyon testi ister. LoRA daha ekonomik olsa da rank, alpha ve target module seçimi modelin gerçek kapasitesini belirler. Gradient accumulation VRAM sorununu çözerken throughput'u bedava artırmaz; paged optimizer ise yalnızca bellek taşmalarına karşı bir emniyet supabıdır.
Max length veri ve ürün ihtiyacına göre seçilmeli; eğitim örnekleri rastgele kesilmemelidir. En doğru çalışma yöntemi, küçük ve izlenebilir sweep'ler yapmak, token bazlı metrik tutmak ve her kazanımı bağımsız doğrulama ile ölçmektir. Model eğitiminin daha geniş veri ve değerlendirme süreci için yapay zeka modeli eğitim rehberini, Türkçe veri/tokenizer kararları için Türkçe yapay zeka incelememizi ve parametre verimli yöntemlerin tamamı için PEFT rehberimizi okuyabilirsiniz.
Sık sorulan sorular
Full fine-tuning için learning rate kaç olmalı?
Tek doğru değer yoktur. 5e-6, 1e-5 ve 2e-5 gibi düşük değerlerle kısa sweep yapmak; validation, görev başarısı ve genel yetenek regresyonunu birlikte ölçmek güvenli bir başlangıçtır.
LoRA alpha ile rank aynı şey mi?
Hayır. Rank adaptör kapasitesini, alpha ise adaptör güncellemesinin ölçeğini etkiler. Klasik LoRA ölçeği alpha/r, rsLoRA ölçeği alpha/karekök(r) biçimindedir.
Gradient accumulation VRAM kullanımını azaltır mı?
Tek geçişteki micro-batch küçültülürse activation belleğini azaltır ve daha büyük effective batch'i mümkün kılar. Ancak eğitimi kendiliğinden hızlandırmaz.
Paged AdamW ne zaman kullanılmalı?
Optimizer veya checkpointing kaynaklı kısa VRAM sıçramaları OOM oluşturduğunda kullanılabilir. Eğitim rahatça belleğe sığıyorsa gereksizdir; sürekli paging performans sorununun işaretidir.
Max sequence length nasıl seçilir?
Tokenize edilmiş veri uzunluk dağılımı, üretimde gereken bağlam, modelin desteklediği context ve VRAM/throughput ölçümleri birlikte değerlendirilmelidir. Model maksimumunu doğrudan seçmek doğru değildir.
Kaynakça
- Hu, E. J. ve ark. (2021). LoRA: Low-Rank Adaptation of Large Language Models. arXiv:2106.09685.
- Dettmers, T. ve ark. (2023). QLoRA: Efficient Finetuning of Quantized LLMs. arXiv:2305.14314.
- Kalajdzievski, D. (2023). A Rank Stabilization Scaling Factor for Fine-Tuning with LoRA. arXiv:2312.03732.
- Goyal, P. ve ark. (2017). Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour. arXiv:1706.02677.
- Dao, T. ve ark. (2022). FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness. arXiv:2205.14135.
- Ding, H. ve ark. (2024). Fewer Truncations Improve Language Modeling. arXiv:2404.10830.
- Hugging Face. Transformers: Gradient Accumulation.
- Hugging Face. bitsandbytes: AdamW and Paged Optimizers.
- DeepSpeed. Zero Redundancy Optimizer.
Bu yazı 16 Temmuz 2026 tarihinde hazırlanmıştır. Örnek hiperparametreler başlangıç sweep'i içindir; model dokümantasyonu, veri yapısı ve ölçülmüş eğitim sinyalleri olmadan production reçetesi olarak kullanılmamalıdır.