it-swarm.com.de

Wie prüfe ich, ob pytorch die GPU verwendet?

Ich würde gerne wissen, ob pytorch meine GPU verwendet. Es ist möglich, mit nvidia-smi festzustellen, ob während des Prozesses Aktivitäten von der GPU vorhanden sind, ich möchte jedoch, dass etwas in ein python-Skript geschrieben wird.

Gibt es eine Möglichkeit, dies zu tun?

31
vinzee

Das wird funktionieren:

In [1]: import torch

In [2]: torch.cuda.current_device()
Out[2]: 0

In [3]: torch.cuda.device(0)
Out[3]: <torch.cuda.device at 0x7efce0b03be0>

In [4]: torch.cuda.device_count()
Out[4]: 1

In [5]: torch.cuda.get_device_name(0)
Out[5]: 'GeForce GTX 950M'

Dies sagt mir, dass die GPU GeForce GTX 950M von PyTorch verwendet wird.

56
vinzee

Wenn Sie nach dem Start der Trainingsschleife vom Terminal aus manuell beobachten möchten, ob Ihr Programm die GPU-Ressourcen nutzt und in welchem ​​Umfang, können Sie Folgendes verwenden:

$ watch -n 2 nvidia-smi

Dadurch werden die Nutzungsstatistiken alle 2 Sekunden aktualisiert, bis Sie auf drücken ctrl+c


Sie können auch überprüfen, ob Ihre Installation von PyTorch Ihre CUDA-Installation korrekt erkennt, indem Sie folgende Schritte ausführen:

In [13]: import  torch

In [14]: torch.cuda.is_available()
Out[14]: True

True status bedeutet, dass PyTorch korrekt konfiguriert ist und die GPU verwendet, obwohl Sie die Tensoren mit den erforderlichen Anweisungen in Ihrem Code verschieben/platzieren müssen.


Wenn Sie dies in Python-Code tun möchten, schauen Sie in dieses Modul:

https://github.com/jonsafari/nvidia-ml-py oder in pypi hier: https://pypi.python.org/pypi/nvidia-ml-py/

28
kmario23

Da es hier nicht vorgeschlagen wurde, füge ich eine Methode hinzu, die torch.device verwendet, da dies sehr praktisch ist, auch wenn Tensoren mit der richtigen device initialisiert werden.

# setting device on GPU if available, else CPU
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print('Using device:', device)
print()

#Additional Info when using cuda
if device.type == 'cuda':
    print(torch.cuda.get_device_name(0))
    print('Memory Usage:')
    print('Allocated:', round(torch.cuda.memory_allocated(0)/1024**3,1), 'GB')
    print('Cached:   ', round(torch.cuda.memory_cached(0)/1024**3,1), 'GB')

Ausgabe:

Using device: cuda

Tesla K80
Memory Usage:
Allocated: 0.3 GB
Cached:    0.6 GB

Wie oben erwähnt, ist es mit device möglich:

  • Verschieben von Tensoren in die entsprechende device:

    torch.Rand(10).to(device)
    
  • Oder erstellen Sie einen Tensor direkt auf der device:

    torch.Rand(10, device=device)
    

Das macht das Umschalten zwischen CPU und GPU komfortabel, ohne den tatsächlichen Code zu ändern.

8
blue-phoenox

Überprüfen Sie auf der Büroseite und auf der Startseite, ob die GPU für PyTorch wie folgt angezeigt wird: 

import torch
torch.cuda.is_available()

Referenz: PyTorch | Erste Schritte

6
TimeSeam

So prüfen Sie, ob eine GPU verfügbar ist:

torch.cuda.is_available()

Wenn die obige Funktion False zurückgibt, haben Sie entweder keine GPU oder die Nvidia-Treiber wurden nicht installiert, sodass das Betriebssystem die GPU nicht sieht oder die GPU durch die Umgebungsvariable CUDA_VISIBLE_DEVICES ausgeblendet wird. Wenn der Wert -1 ist, werden alle Ihre Geräte ausgeblendet. Sie können diesen Wert im Code mit folgender Zeile überprüfen: `os.environ ['CUDA_VISIBLE_DEVICES']

Wenn die obige Funktion True zurückgibt, bedeutet dies nicht unbedingt, dass Sie die GPU verwenden. In Pytorch können Sie Geräten Tensoren zuweisen, wenn Sie sie erstellen. Standardmäßig werden Tensoren cpu zugewiesen. Um zu überprüfen, wo Ihr Tensor zugeordnet ist, gehen Sie folgendermaßen vor:

# assuming that 'a' is a tensor created somewhere else
a.device  # returns the device where the tensor is allocated

Beachten Sie, dass Sie nicht mit Tensoren arbeiten können, die in verschiedenen Geräten zugewiesen sind. Wie Sie der GPU einen Tensor zuweisen, erfahren Sie hier: https://pytorch.org/docs/stable/notes/cuda.html

2
Jadiel de Armas

Aus praktischer Sicht nur ein kleiner Exkurs:

import torch
dev = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")

Dieser dev weiß jetzt, ob cuda oder cpu.

Und es gibt einen Unterschied, wie Sie mit dem Modell und den Tensoren umgehen, wenn Sie zu cuda wechseln. Anfangs ist es etwas seltsam.

import torch
dev = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
t1 = torch.randn(1,2)
t2 = torch.randn(1,2).to(dev)
print(t1)  # tensor([[-0.2678,  1.9252]])
print(t2)  # tensor([[ 0.5117, -3.6247]], device='cuda:0')
t1.to(dev) 
print(t1)  # tensor([[-0.2678,  1.9252]]) 
print(t1.is_cuda) # False
t1=t1.to(dev)
print(t1)  # tensor([[-0.2678,  1.9252]], device='cuda:0') 
print(t1.is_cuda) # True


model = M()   # not on cuda
model.to(dev) # is on cuda (all parameters)
print(next(model.parameters()).is_cuda) #True

Das alles ist knifflig und das einmalige Verstehen hilft Ihnen dabei, schneller mit weniger Debugging umzugehen.

2
prosti

FWIW: Wenn Sie hier sind, weil Ihre Pytorch immer false für torch.cuda.is_available() gibt, liegt das wahrscheinlich daran, dass Sie Ihre Pytorch-Version ohne GPU-Unterstützung installiert haben. (ZB: Sie haben im Laptop verschlüsselt und dann auf dem Server getestet). Die Lösung besteht darin, pytorch mit dem richtigen Befehl von pytorch downloads page zu deinstallieren und erneut zu installieren. Siehe auch this Pytorch-Problem.

0
mithunpaul

Erstellen Sie einen Tensor auf der GPU wie folgt:

$ python
>>> import torch
>>> print(torch.Rand(3,3).cuda()) 

Beenden Sie nicht, öffnen Sie ein anderes Terminal und prüfen Sie, ob der Python-Prozess die GPU verwendet.

$ nvidia-smi
0
litesaber