| 1 | Model outputs gibberish | Wrong chat template or tokenizer mismatch | Use the matching tokenizer; verify chat template at training and inference are identical. |
| 2 | No measurable improvement | Too few examples or low data quality | 500+ examples; review every one of the first 50. |
| 3 | Validation loss rises early | Too many epochs, dataset too small | Reduce epochs, increase dropout, add diverse data. |
| 4 | Lost general ability (forgetting) | Catastrophic forgetting from full FT | Use LoRA instead; lower learning rate. |
| 5 | Inconsistent format in outputs | Training data has inconsistent format | Standardize all examples to one format before training. |
| 6 | Loss doesn't decrease at all | Learning rate too low, or data format wrong | Increase LR; verify data is reaching the model unchanged. |
| 7 | OOM (out of memory) | Model or batch too large for GPU | Use QLoRA; reduce batch; enable gradient checkpointing. |
| 8 | Slow training | No Flash Attention, no bf16 | Enable Flash Attention 2 + bf16. |
| 9 | Model hallucinates more after FT | Training data contains errors or hallucinations | Audit data; remove anything you can't verify. |
| 10 | Works in eval, fails in production | Eval data too similar to training | Build a real production-derived test set; never reuse training distribution for eval. |