Descriere & Utilizare
În timpul antrenării, PyTorch păstrează în memoria GPU toate activările intermediare ale fiecărui strat pentru a le putea folosi la calculul gradienților în timpul loss.backward(). Acest lucru dublează sau triplează consumul de memorie.
Însă în timpul inferenței (când un utilizator trimite o cerere către model într-un API sau când calculezi acuratețea pe setul de validare), nu ai nevoie de gradienți. Blocul de context with torch.no_grad(): instruiește PyTorch să nu construiască graful Autograd.
În versiunile moderne de PyTorch, a fost introdus with torch.inference_mode():: acesta oferă cele mai agresive optimizări C++, dezactivând complet mecanismele de urmărire a versiunilor tensorilor și fiind cu până la 10-15% mai rapid decât torch.no_grad().
Cum să o reții ușor
💡 Este ca diferența între a merge la cumpărături notând pe carnet fiecare preț și calculând fiecare cent (antrenare cu Autograd) și a merge pur și simplu la casă fără să iei notițe când ești doar în vizită (inference mode).
Opțiuni și parametri tehnici
torch.no_grad(): context manager sau decorator de funcție (@torch.no_grad()) care dezactivează calculul gradienților.torch.inference_mode(): variantă optimizată de performanță maximă, recomandată pentru orice cod de producție de tip inferență.model.eval(): comută straturile Dropout și BatchNorm în modul de testare (trebuie folosit ÎNTOTDEAUNA împreună cutorch.no_grad()!).
Exemple practice și cazuri de utilizare
- Decorator de funcție pe endpoint-ul FastAPI:
@torch.inference_mode()ndef prezice(text: str): ... - Salvare masivă de VRAM: un model care dă eroare de
CUDA out of memoryla evaluare va rula fără probleme întorch.inference_mode(). - Conversie sigură la NumPy după inferență:
probabilitati = torch.softmax(iesiri, dim=-1).cpu().numpy()(fără eroare de requires_grad).
Sfaturi de configurare & capcane
Nu confunda model.eval() cu torch.no_grad(): model.eval() doar schimbă comportamentul matematic al straturilor de Dropout și BatchNorm, dar nu dezactivează Autograd! Pentru inferență corectă, ai nevoie de ambele: model.eval() urmat de with torch.inference_mode():.
Comenzi și ghiduri înrudite
torch-autograd-backward: Resursă asociată din acest modul.torch-nn-module: Resursă asociată din acest modul.torch-training-loop: Resursă asociată din acest modul.