Descriere & Utilizare
Unul dintre cele mai frecvente mesaje de eroare pentru începătorii în PyTorch este „RuntimeError: Expected all tensors to be on the same device”. Aceasta apare atunci când încerci să înmulțești un tensor aflat în memoria RAM a procesorului (cpu) cu un model aflat în memoria VRAM a plăcii video (cuda:0).
Pentru un cod portabil care funcționează identic pe un laptop Mac (prin Metal Performance Shaders / MPS), pe o stație de lucru cu placă video NVIDIA (prin CUDA) sau pe un server cloud fără GPU (pe CPU), se folosește un obiect torch.device dinamic.
Metoda .to(device) mută datele în memoria acceleratorului dorit. La modelele neuronale (nn.Module), model.to(device) mută toate greutățile și straturile interne in-place.
Cum să o reții ușor
💡 CPU-ul este biroul tău obișnuit cu un singur funcționar foarte deștept, iar GPU-ul este o hală cu 4.000 de muncitori specializați. Pentru ca muncitorii să lucreze, trebuie să le trimiți piesele în hală cu un camion (.to(device)).
Opțiuni și parametri tehnici
torch.cuda.is_available(): verifică dacă driverul NVIDIA și suportul CUDA sunt active.torch.backends.mps.is_available(): verifică disponibilitatea GPU-ului integrat Apple Silicon (M1/M2/M3/M4 pe macOS 12.3+).non_blocking=True: parametru întensor.to(device, non_blocking=True)care permite transferul asincron prin DMA (Direct Memory Access) în paralel cu execuția CPU dacă foloseștipin_memory=Trueîn DataLoader.
Exemple practice și cazuri de utilizare
- Aflarea numelui plăcii grafice active:
print(torch.cuda.get_device_name(0))(ex: „NVIDIA GeForce RTX 4090”). - Selectarea unui GPU specific într-un server multi-GPU:
device = torch.device("cuda:1"). - Sincronizarea explicită la măsurători de timp:
torch.cuda.synchronize()înainte de a calcula durata unei rulări.
Sfaturi de configurare & capcane
Reține diferența: model = model.to(device) modifică modelul in-place (nu necesită neapărat reatribuire), dar la tensori trebuie obligatoriu reatribuit (x = x.to(device)), altfel tensorul rămâne pe dispozitivul vechi!
Comenzi și ghiduri înrudite
torch-tensor-basics: Resursă asociată din acest modul.torch-autograd-backward: Resursă asociată din acest modul.torch-profiler-cuda-memory: Resursă asociată din acest modul.