Bu hata backward çağrılan loss tensorunun autograd graph'a bağlı olmadığını söyler; CUDA OOM veya dataset format hatasıyla aynı kategori değildir.
SFTTrainer/PEFT grad_fn hatasını frozen parametre, adapter trainability, no_grad/detach, k-bit preparation, checkpointing ve custom loss ile teşhis edin.
Bu hata backward çağrılan loss tensorunun autograd graph'a bağlı olmadığını söyler; CUDA OOM veya dataset format hatasıyla aynı kategori değildir.
Quantized PEFT eğitiminde Hugging Face `prepare_model_for_kbit_training()` adımını önerir.
LoRA'da base model parametrelerinin frozen olması normaldir; önemli olan adapter parametrelerinin trainable olması ve loss'a gradient path bulunmasıdır.
PyTorch backward yalnız `requires_grad=True` ilişkili operations zincirinden gelen tensor üzerinde gradient hesaplayabilir. Loss `torch.no_grad()` içinde üretildiyse, `.detach()` edildiysa veya trainable hiçbir parametreye bağlı değilse `grad_fn` bulunmaz.
PEFT modelde base weights frozen görünmesi beklenir. Fakat `sum(p.numel() for p in model.parameters() if p.requires_grad)` sıfırsa adapter enjekte edilmemiş, inference mode açılmış veya yanlış model instance trainer'a verilmiş olabilir.
python - <<'PY'
trainable=sum(p.numel() for p in model.parameters() if p.requires_grad)
total=sum(p.numel() for p in model.parameters())
print(trainable, total, trainable/total if total else 0)
for n,p in model.named_parameters():
if p.requires_grad: print(n)
PY
4/8-bit base model ile adapter training yaparken PEFT quantization rehberi modelin `prepare_model_for_kbit_training()` ile hazırlanmasını önerir. Bu adım layer norm ve input gradient davranışı gibi ayrıntıları training'e uygun hale getirir.
Custom training loop, custom loss veya model wrapper içinde forward yanlışlıkla `with torch.no_grad():` altında çalışıyorsa bütün graph kaybolur. Log için loss'u `.item()` yapmak normaldir; fakat backward yapılacak değişkeni `.detach()` ederek yeniden loss diye kullanmak hatadır.
Bazı PEFT + gradient checkpointing kombinasyonlarında embedding/input tarafında gradient hook gerekir. Kullandığınız Transformers/PEFT sürümünde `enable_input_require_grads()` veya k-bit preparation'ın bunu nasıl ele aldığını kontrol edin. İnternetteki eski workaround'u güncel sürüme körlemesine taşımayın.
Loss'u NumPy'ye çevirip tekrar `torch.tensor(value)` yapmak autograd geçmişini siler. Aynı şekilde Python float üzerinden yeni tensor üretmek de modeli loss'a bağlamaz. Custom loss işlemleri PyTorch tensor operasyonları olarak graph içinde kalmalıdır.
Base modeli adapter ile wrap ettikten sonra trainer'a eski `base_model` değişkenini verirseniz LoRA parametreleri training graph'ta olmaz. `trainer.model is peft_model` doğrulayın ve wrapper chain'i inceleyin.
Trainer dışına çıkıp tek batch forward yapın; `loss.requires_grad`, `loss.grad_fn`, trainable parametre count ve backward sonrası birkaç LoRA parametresinin `.grad` değerini kontrol edin. Bu test problemi Trainer/Accelerate katmanından mı model graph'ından mı ayırır.
python - <<'PY'
# outputs=model(**batch)
# print(outputs.loss.requires_grad, outputs.loss.grad_fn)
# outputs.loss.backward()
# for n,p in model.named_parameters():
# if p.requires_grad and p.grad is not None:
# print(n, p.grad.norm().item()); break
PY
Bu hata görünce bütün base modeli trainable yapmak LoRA'nın amacını bozar, VRAM'i patlatabilir ve gerçek graph problemini gizler. Doğru hedef adapter parametrelerinin gradient almasıdır; full fine-tuning ancak bilinçli mimari kararı olarak seçilmelidir.
| Kontrol | Kötü sonuç | Anlamı |
|---|---|---|
| Trainable param count | 0 | Adapter yok/frozen |
| loss.requires_grad | False | Graph kopuk |
| loss.grad_fn | None | Loss autograd'a bağlı değil |
| Adapter .grad | None | Gradient adaptera ulaşmıyor |
Ç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.
LoRA'da hayır. Base frozen olması beklenir; adapter parametrelerinin trainable olması gerekir.
Hata kaybolabilir ama LoRA'yı yanlışlıkla full fine-tuning'e çevirip VRAM'i aşabilirsiniz; kök neden çözülmüş sayılmaz.
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.