TRL `assistant_only_loss=True` kullanıldığında loss yalnız assistant token'larında hesaplanır; chat template uygun assistant mask üretmelidir.
TRL SFTTrainer loss=0.0/NaN sorunlarını dataset formatı, -100 labels, truncation, assistant_only_loss, learning rate ve precision ile teşhis edin.
TRL `assistant_only_loss=True` kullanıldığında loss yalnız assistant token'larında hesaplanır; chat template uygun assistant mask üretmelidir.
Assistant token'ları max length sonrasında truncate edilirse labels tamamen -100 kalabilir ve training gerçek supervision almadan 0 loss benzeri davranış gösterebilir.
Prompt-completion ve conversational dataset formatları TRL'de farklı masking davranışlarına sahiptir; dataset formatı training config ile uyumlu olmalıdır.
SFT başlangıcında gerçek dil modeli loss'unun tam 0 olması çoğu durumda şüphelidir. Özellikle ilk step'ten itibaren 0.0 görüyorsanız modelin mükemmel öğrendiğini değil labels'ın maskelenmiş olabileceğini düşünün.
Cross-entropy'de `-100` genellikle ignore index'tir. Batch içindeki bütün label'lar -100 ise loss hesaplanacak token kalmaz. Trainer'a geçmeden önce collator çıktısından `labels.ne(-100).sum()` değerini yazdırın.
python - <<'PY'
# batch = next(iter(trainer.get_train_dataloader()))
# print((batch['labels'] != -100).sum(dim=1))
PY
Uzun system/user prompt ve kısa max_length kombinasyonunda assistant response sequence sonuna düşer ve tamamı truncate olabilir. TRL issue'larında bu durum assistant mask'in tamamen 0 olmasına ve 0-loss davranışına yol açmıştır. Dataset token uzunluk dağılımını percentile olarak ölçün.
TRL güncel dokümantasyonu assistant-only loss için template'in `{% generation %}` / `{% endgeneration %}` marker'larıyla assistant token mask üretebilmesini ister. Model template'i bunu desteklemiyorsa flag'i açmak hata veya yanlış masking üretir.
NaN yalnız dataset problemi değildir. Aşırı learning rate, FP16 overflow, problemli custom loss, invalid logits veya model-specific attention bug'ı NaN üretebilir. Aynı mini-batch'i `model.train()` altında forward edip logits finite mi, loss finite mi ayrı kontrol edin.
Eval dataset'te assistant cevabı olmayan örnekler, farklı format, farklı truncation oranı veya tamamı maskelenmiş batch olabilir. Train ve eval preprocessing pipeline'ın birebir aynı format varsayımlarını kullandığını doğrulayın.
TRL language-modeling, prompt-completion ve conversational formatları destekler. `text` column'lı klasik LM dataset ile `messages` conversational dataset aynı masking semantiğine sahip değildir. Önce dataset type/formatı netleştirin, sonra `completion_only_loss` / `assistant_only_loss` seçin.
Trainer karmaşıklığını ayırmak için tek batch'i modele doğrudan verin. `input_ids`, `attention_mask`, `labels` shape; label token sayısı; logits finite oranı ve raw loss değerini yazdırın. Burada NaN varsa problem trainer logging değil model/data katmanındadır.
İlk 20-50 step boyunca supervised token sayısı >0, loss finite, grad norm finite ve learning rate beklenen aralıkta olmalı. Validation'da birkaç sabit prompt'u aynı decoding ayarlarıyla base model ve fine-tuned checkpoint üzerinde karşılaştırın.
| Belirti | İlk şüphe | Doğrulama |
|---|---|---|
| İlk step loss=0 | Tüm labels -100 | Label count |
| Uzun örneklerde 0 | Truncation | Token length dağılımı |
| Loss NaN | LR/precision/logits | Single-batch forward |
| Eval NaN | Eval masking/format | Eval batch labels |
Çalışan eğitim ortamında paketleri rastgele güncellemeyin. GPU modeli, driver, CUDA/PyTorch runtime, transformers, accelerate, peft, trl, bitsandbytes/diffusers sürümleri ile model revision ve dataset fingerprint bilgisini her run için kaydedin. Önce minimal reproducible test oluşturun, sonra production eğitime müdahale edin.
Genellikle hayır. Fine-tuning'in başından itibaren 0.0 çoğu zaman supervised label kalmadığını veya logging/masking problemi olduğunu gösterir.
Hayır. Chat template'in assistant token mask üretebilmesi gerekir; güncel TRL bu desteği template düzeyinde bekler.
Model boyutu, precision, context, batch, LoRA/QLoRA veya full fine-tuning yöntemi ve multi-GPU ihtiyacınızı birlikte değerlendirin; yalnız GPU model adına bakarak kapasite seçmeyin.