Der Fehler bedeutet, dass der Loss-Tensor nicht mit einem Autograd-Graph verbunden ist.
grad_fn-Fehler in SFTTrainer/PEFT anhand Frozen Params, Adapter-Trainability, no_grad/detach, k-bit Preparation, Checkpointing und Custom Loss diagnostizieren.
Der Fehler bedeutet, dass der Loss-Tensor nicht mit einem Autograd-Graph verbunden ist.
Für quantisiertes PEFT-Training empfiehlt Hugging Face `prepare_model_for_kbit_training()`.
Gefrorene Base-Parameter sind bei LoRA normal; Adapter müssen trainable sein und Loss braucht einen Gradient-Pfad.
PyTorch Backward benötigt einen Loss, der mit trainierbaren Operationen verbunden ist. no_grad, detach oder fehlende trainable Params trennen den Graph.
Frozen Base-Weights sind normal. Sind aber null Parameter trainable, wurden Adapter eventuell nicht injiziert oder falsches Modell an Trainer übergeben.
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
Bei 4/8-Bit-Modellen empfiehlt PEFT `prepare_model_for_kbit_training()`, um das Modell für k-bit Training vorzubereiten.
Läuft Forward versehentlich unter `torch.no_grad()`, verschwindet der Graph. `.item()` fürs Logging ist okay; den Backward-Loss zu detach'en nicht.
Bei PEFT + Gradient Checkpointing kann Input-Gradient-Handling nötig sein. Aktuelle Versionen und `enable_input_require_grads()`/k-bit Preparation prüfen.
Loss nach NumPy/Python umzuwandeln und neuen Tensor zu bauen zerstört Autograd-Historie. Custom Loss muss im Tensor-Graph bleiben.
Wenn nach Adapter-Wrapping versehentlich das alte Base-Modell an Trainer übergeben wird, fehlen LoRA-Parameter im Graph. Trainer-Modell prüfen.
Einen Batch außerhalb von Trainer ausführen und `loss.requires_grad`, `grad_fn` sowie Adapter-Gradients prüfen. So lässt sich Graph- von Trainer-Problemen trennen.
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
Alle Base-Parameter trainable zu machen zerstört LoRA, erhöht VRAM stark und verdeckt die Ursache. Ziel sind Gradients auf den vorgesehenen Adaptern.
| Prüfung | Schlechtes Ergebnis | Bedeutung |
|---|---|---|
| Trainable Param Count | 0 | Kein trainierbarer Adapter |
| loss.requires_grad | False | Graph getrennt |
| loss.grad_fn | None | Loss nicht verbunden |
| Adapter .grad | None | Gradient erreicht Adapter nicht |
In einer funktionierenden Trainingsumgebung Pakete nicht blind aktualisieren. GPU, Treiber, CUDA/PyTorch-Runtime, Transformers, Accelerate, PEFT, TRL, bitsandbytes/Diffusers, Modellrevision und Dataset-Fingerprint pro Run protokollieren.
Nein. Base frozen ist normal; Adapter müssen trainable sein.
Kann den Fehler verstecken, aber LoRA versehentlich in Full Fine-Tuning verwandeln und VRAM sprengen.
Modellgröße, Precision, Context, Batch, LoRA/QLoRA oder Full Fine-Tuning und Multi-GPU gemeinsam bewerten.