Descriere & Utilizare
Eroarea torch.cuda.OutOfMemoryError: CUDA out of memory este cel mai cunoscut obstacol în Deep Learning. Ea apare atunci când suma dintre parametrii modelului, stările optimizatorului, activările din forward pass și memoria rezervată depășește capacitatea fizică VRAM a plăcii tale video.
PyTorch folosește un Caching Allocator intern: atunci când eliberezi un tensor, memoria nu este returnată imediat sistemului de operare, ci este păstrată în cache pentru alocări viitoare rapide. Comanda torch.cuda.empty_cache() eliberează aceste blocuri nefolosite.
Dacă modelul tău nu încape la mărimea de batch dorită, soluția arhitecturală salvatoare este Gradient Accumulation (Acumularea Gradienților): rulezi 4 pași cu batch_size=8 fără a apela optimizer.zero_grad(), apelând step() doar la fiecare al 4-lea pas — obținând matematic efectul unui batch_size=32 cu consumul de memorie al unui batch de 8!
Cum să o reții ușor
💡 Este ca transportul unui munte de nisip cu o roabă mică: în loc să cumperi un camion uriaș pe care nu ai bani să-l parchezi (GPU de 80 GB), faci 4 drumuri cu roaba mică și aduni tot nisipul în aceeași grămadă înainte de a turna cimentul.
Opțiuni și parametri tehnici
torch.cuda.memory_allocated(): memoria VRAM ocupată efectiv de tensorii activi.torch.cuda.memory_reserved(): totalul de memorie rezervat de allocatorul PyTorch de la driverul NVIDIA.PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True: variabilă de mediu care reduce fragmentarea VRAM la antrenări lungi.torch.profiler.profile(): instrument complet de analiză care generează rapoarte vizibile în Chrome Tracing sau TensorBoard.
Exemple practice și cazuri de utilizare
- Implementarea Gradient Accumulation:
loss = loss / 4; loss.backward(); if (pas + 1) % 4 == 0: optimizer.step(); optimizer.zero_grad(). - Snapshot complet de memorie în format HTML/interactiv:
torch.cuda.memory._record_memory_history(); ...; torch.cuda.memory._dump_snapshot("profil_vram.pickle"). - Activarea segmentelor expandabile înainte de pornirea scriptului:
export PYTORCH_CUDA_ALLOC_CONF="expandable_segments:True".
Sfaturi de configurare & capcane
Nu apela torch.cuda.empty_cache() la fiecare pas din bucla de antrenare! Golirea forțată a cache-ului este o operațiune lentă care blochează procesorul și va reduce viteza de antrenare cu 30-40%. Folosește-o doar între epoci sau la prinderea unei excepții.
Comenzi și ghiduri înrudite
torch-mixed-precision-amp: Resursă asociată din acest modul.torch-device-gpu-mps: Resursă asociată din acest modul.torch-training-loop: Resursă asociată din acest modul.