OOM'un hangi aşamada oluştuğu çözümü değiştirir: model yüklerken OOM ile backward sırasında OOM aynı problem değildir.
Model load, forward, backward ve optimizer aşamalarındaki CUDA OOM'u batch, context, checkpointing, QLoRA, fragmentation ve offload ile çözün.
OOM'un hangi aşamada oluştuğu çözümü değiştirir: model yüklerken OOM ile backward sırasında OOM aynı problem değildir.
Gradient checkpointing activation belleğini azaltır; batch/context küçültmek ise activation footprint'i doğrudan düşürür.
Reserved but unallocated memory yüksekse allocator fragmentation olasılığı araştırılabilir; ancak allocator env var'ını kök neden analizi yapmadan körlemesine eklemek doğru değildir.
Model `from_pretrained()` sırasında patlıyorsa sorun weight load/quantization/device map sınıfındadır. İlk batch forward'da patlıyorsa activation/context/batch; backward'da patlıyorsa gradient + activation; optimizer step'te patlıyorsa optimizer state ve peak allocation daha olasıdır.
GPU toplam belleği, başka process'ler, PyTorch allocated/reserved ve batch/context değerlerini kaydedin. Eğitim başlamadan önce `nvidia-smi`; ilk step öncesi ve sonrası `torch.cuda.memory_summary()` çıktısı alın. Tekrar üretilemeyen OOM'lar genellikle arka plan process'i veya dataloader/validation spike ile ilişkilidir.
nvidia-smi
python - <<'PY'
import torch
print(torch.cuda.memory_summary())
PY
ps aux --sort=-rss | head -20
Batch'i 1'e indirip aynı context ile deneyin. OOM sürüyorsa context'i örneğin 8192→4096→2048 şeklinde düşürün. İkisini aynı anda değiştirirseniz hangi değişkenin asıl etkili olduğunu anlayamazsınız.
Gradient accumulation büyük efektif batch'i küçük micro-batch'lerle taklit eder. Bu, batch kaynaklı activation memory'yi düşürür; fakat model weights tek başına GPU'ya sığmıyorsa accumulation çözüm değildir.
Activation memory yüksekse checkpointing güçlü çözümdür. Transformers dokümantasyonu activation'ların bir kısmını saklamayıp backward sırasında yeniden hesapladığını açıklar. Bedeli daha fazla compute ve daha yavaş step süresidir.
Base model weight footprint'i problemse 4-bit QLoRA en etkili adımlardan biridir. bitsandbytes quantized weights'i küçültür; 8-bit optimizer ise optimizer state tarafını azaltabilir. PEFT quantized modelde `prepare_model_for_kbit_training()` adımını önerir.
Hata mesajında reserved but unallocated çok küçükse allocator tweaking büyük ihtimalle çözüm değildir; GPU gerçekten doludur. Reserved boş alan büyükse fragmentation araştırılabilir. Önce process'leri kapatın, validation peak'ini ölçün ve cache boşaltmanın neden kalıcı çözüm olmadığını bilin.
Training step sorunsuzken eval'de OOM oluyorsa eval batch, generation length, `predict_with_generate`, logits accumulation veya validation image generation ayrı incelenmelidir. Diffusion eğitimlerinde validation pipeline modeli tekrar yükleyerek peak memory yaratabilir.
Tek GPU optimizasyonları yetmiyorsa DeepSpeed ZeRO-3/FSDP parametreleri çoklu GPU'ya shard edebilir. CPU/NVMe offload VRAM'i düşürür fakat PCIe/network/SSD iletişimi nedeniyle training süresini ciddi uzatabilir.
| Aşama | İlk şüphe | İlk çözüm |
|---|---|---|
| Model load | Weights / dtype | 4-bit / device map |
| Forward | Batch / context / activations | Batch=1, context düşür |
| Backward | Activations + gradients | Checkpointing |
| Optimizer step | Optimizer state | 8-bit optimizer / sharding |
| Eval | Generation/logits peak | Eval batch/generation düşür |
Ç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 kök nedeni çözmez. Kullanılmayan cached block'ları allocator'a geri verir; gerçek peak footprint kapasiteyi aşıyorsa OOM devam eder.
Model weights, uzun context, validation peak veya optimizer state tek başına VRAM'i aşabilir. Batch yalnız bir bileşendir.
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.