Ich würde gerne wissen, ob pytorch
meine GPU verwendet wird. Es ist möglich zu erkennen, nvidia-smi
ob während des Vorgangs Aktivitäten von der GPU ausgeführt werden, aber ich möchte, dass etwas in ein python
Skript geschrieben wird.
Gibt es eine Möglichkeit dazu?
torch.cuda.current_device()
war hilfreich für mich. Es zeigte sich, dass meine GPU leider zu alt ist: "GPU0 GeForce GTX 760 mit Cuda-Fähigkeit 3.0 gefunden. PyTorch unterstützt diese GPU nicht mehr, weil sie zu alt ist."torch.cuda.is_available()
$ watch -n 2 nvidia-smi
erledigt den Job. Weitere Details finden Sie in meiner Antwort unten .Da es hier nicht vorgeschlagen wurde, füge ich eine Methode hinzu
torch.device
, die sehr praktisch ist, auch wenn Tensoren auf der richtigen Seite initialisiert werdendevice
.Ausgabe:
Wie oben erwähnt,
device
ist es möglich, Folgendes zu verwenden :So verschieben Sie Tensoren zu den jeweiligen
device
:So erstellen Sie einen Tensor direkt auf
device
:Dies macht das Umschalten zwischen CPU und GPU bequem, ohne den tatsächlichen Code zu ändern.
Bearbeiten:
Da es einige Fragen und Verwirrung bezüglich des zwischengespeicherten und zugewiesenen Speichers gab, füge ich einige zusätzliche Informationen hinzu:
torch.cuda.max_memory_cached(device=None)
Gibt den maximalen GPU-Speicher, der vom Caching-Allokator verwaltet wird, in Byte für ein bestimmtes Gerät zurück.
torch.cuda.memory_allocated(device=None)
Gibt die aktuelle GPU-Speichernutzung durch Tensoren in Byte für ein bestimmtes Gerät zurück.
Sie können entweder direkt ein
device
wie weiter oben in der Post angegeben übergeben oder Sie können es Keine lassen und es wird das verwendencurrent_device()
.quelle
## neural network in pytorch
, dann füge ich am Ende Ihren Code hinzu. Es wird weiterhin "Using device" angezeigt: cuda; und 0 GB für zugewiesen und zwischengespeichert.for i in range(epoch):
Ich habe auch versucht, es am Ende der for-Schleife nach der Rückübertragungmy_tensor_on_gpu * my_tensor_on_cpu
wird fehlschlagen.Found GPU0 GeForce GT 750M which is of cuda capability 3.0. PyTorch no longer supports this GPU because it is too old. The minimum cuda capability that we support is 3.5.
Wenn Sie nach dem Ausführen der Trainingsschleife manuell vom Terminal aus beobachten möchten, ob und in welchem Umfang Ihr Programm die GPU-Ressourcen nutzt, können Sie einfach Folgendes verwenden
watch
:Dadurch werden die Nutzungsstatistiken alle 2 Sekunden kontinuierlich aktualisiert, bis Sie ctrl+ drückenc
Wenn Sie mehr Kontrolle über mehr GPU-Statistiken benötigen, können Sie eine komplexere Version von
nvidia-smi
with verwenden--query-gpu=...
. Unten ist eine einfache Illustration davon:welches die Statistiken so etwas ausgeben würde wie:
Hinweis : Zwischen den durch Kommas getrennten Abfragenamen darf kein Leerzeichen stehen
--query-gpu=...
. Andernfalls werden diese Werte ignoriert und es werden keine Statistiken zurückgegeben.Sie können auch überprüfen, ob Ihre Installation von PyTorch Ihre CUDA-Installation korrekt erkennt, indem Sie Folgendes tun:
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 sich dieses Modul an:
https://github.com/jonsafari/nvidia-ml-py oder in pypi hier: https://pypi.python.org/pypi/nvidia-ml-py/
quelle
watch
ist nützlichÜberprüfen Sie auf der Office-Site und auf der Startseite die GPU für PyTorch wie folgt:
Referenz: PyTorch | Erste Schritte
quelle
Vom praktischen Standpunkt aus nur ein kleiner Exkurs:
Dies
dev
weiß jetzt, ob Cuda oder CPU.Und es gibt einen Unterschied, wie Sie mit Modell und Tensoren umgehen, wenn Sie zu Cuda wechseln. Anfangs ist es etwas seltsam.
Das alles ist schwierig und wenn Sie es einmal verstehen, können Sie schnell mit weniger Debugging umgehen.
quelle
M()
? Wo istM
definiert?So überprüfen Sie, ob eine GPU verfügbar ist:
Wenn die obige Funktion zurückkehrt
False
,CUDA_VISIBLE_DEVICES
. Wenn der WertCUDA_VISIBLE_DEVICES
-1 ist, werden alle Ihre Geräte ausgeblendet. Sie können diesen Wert im Code mit dieser Zeile überprüfen:os.environ['CUDA_VISIBLE_DEVICES']
Wenn die obige Funktion zurückgegeben wird
True
, bedeutet dies nicht unbedingt, dass Sie die GPU verwenden. In Pytorch können Sie Geräten beim Erstellen Tensoren zuweisen. Standardmäßig werden Tensoren dem zugeordnetcpu
. Um zu überprüfen, wo Ihr Tensor zugeordnet ist, gehen Sie wie folgt vor:Beachten Sie, dass Sie nicht mit Tensoren arbeiten können, die in verschiedenen Geräten zugewiesen sind. Informationen zum Zuweisen eines Tensors zur GPU finden Sie hier: https://pytorch.org/docs/stable/notes/cuda.html
quelle
Fast alle Antworten beziehen sich hier
torch.cuda.is_available()
. Dies ist jedoch nur ein Teil der Medaille. Hier erfahren Sie, ob die GPU (tatsächlich CUDA) verfügbar ist und nicht, ob sie tatsächlich verwendet wird. In einem typischen Setup würden Sie Ihr Gerät folgendermaßen einstellen:In größeren Umgebungen (z. B. Forschung) ist es jedoch auch üblich, dem Benutzer mehr Optionen zur Verfügung zu stellen, sodass er basierend auf der Eingabe CUDA deaktivieren, CUDA-IDs angeben usw. kann. In diesem Fall hängt die Verwendung der GPU nicht nur davon ab, ob sie verfügbar ist oder nicht. Nachdem das Gerät auf ein Taschenlampengerät eingestellt wurde, können Sie dessen erhalten
type
Eigenschaft überprüfen, ob es sich um CUDA handelt oder nicht.quelle
Führen Sie einfach an der Eingabeaufforderung oder in der Linux-Umgebung den folgenden Befehl aus.
Das obige sollte gedruckt werden
True
Dieser sollte folgendes drucken:
quelle
Wenn Sie hier sind , weil Ihr pytorch gibt immer
False
fürtorch.cuda.is_available()
das ist wahrscheinlich , weil Sie Ihre pytorch Version ohne GPU - Unterstützung installiert. (ZB: Sie haben im Laptop codiert und dann auf dem Server getestet).Die Lösung besteht darin, pytorch mit dem richtigen Befehl von der pytorch- Downloadseite zu deinstallieren und erneut zu installieren . Lesen Sie auch dieses Pytorch-Problem.
quelle
Erstellen Sie einen Tensor auf der GPU wie folgt:
Beenden Sie nicht, öffnen Sie ein anderes Terminal und überprüfen Sie, ob der Python-Prozess die GPU verwendet, indem Sie:
quelle
nvidia-smi
über die Befehlszeile erfolgtnvidia-smi
.