it-swarm.com.de

Wie kann ich den GPU-Speicher mit CUDA leeren (physisches Reset ist nicht verfügbar)

Mein CUDA-Programm stürzte während der Ausführung ab, bevor der Speicher gelöscht wurde. Dadurch blieb der Gerätespeicher belegt.

Ich verwende eine GTX 580, für die nvidia-smi --gpu-reset nicht unterstützt wird.

Das Platzieren von cudaDeviceReset() am Anfang des Programms wirkt sich nur auf den aktuellen Kontext aus, der durch den Prozess erstellt wurde, und leert nicht den zuvor zugewiesenen Speicher.

Ich greife aus der Ferne auf einen Fedora-Server mit dieser GPU zu, so dass das physische Zurücksetzen ziemlich kompliziert ist. 

Die Frage ist also: Gibt es eine Möglichkeit, den Gerätespeicher in dieser Situation zu leeren?

23
timdim

Obwohl dies unter Umständen nur in Ausnahmefällen erforderlich sein sollte, empfiehlt es sich auf Linux-Hosts, den nvidia-Treiber auf diese Weise zu entladen

$ rmmod nvidia 

mit geeigneten root-Rechten und dann mit neu laden

$ modprobe nvidia

Wenn auf dem Computer X11 ausgeführt wird, müssen Sie dies vorher manuell stoppen und danach erneut starten. Die Treiberinitialisierungsprozesse sollten alle vorherigen Zustände auf dem Gerät beseitigen.

Diese Antwort wurde aus Kommentaren zusammengestellt und als Community-Wiki veröffentlicht, um diese Frage aus der unbeantworteten Liste für den CUDA-Tag zu entfernen.

10
talonmies

Überprüfen Sie mit, was Ihren GPU-Speicher verwendet

Sudo fuser -v /dev/nvidia*

Ihre Ausgabe sieht ungefähr so ​​aus:

                     USER        PID  ACCESS COMMAND
/dev/nvidia0:        root       1256  F...m  Xorg
                     username   2057  F...m  compiz
                     username   2759  F...m  chrome
                     username   2777  F...m  chrome
                     username   20450 F...m  python
                     username   20699 F...m  python

Dann töten Sie die PID, die Sie nicht mehr benötigen, mit htop oder mit

Sudo kill -9 PID.

Im obigen Beispiel hatte Pycharm eine Menge Speicher in Anspruch genommen, also habe ich 20450 und 20699 getötet.

35
ksooklall

Ich hatte auch das gleiche Problem und sah eine gute Lösung in Quora 

Sudo kill -9 PID.

siehe https://www.quora.com/How-do-I-kill-all-the-computer-processes-shown-in-nvidia-smi

5
ailihong

auf macOS (/ OS X), wenn jemand anderes Probleme mit dem Betriebssystem hat, das anscheinend Speicher verliert:

  • https://github.com/phvu/cuda-smi ist nützlich, um den freien Speicher schnell zu überprüfen
  • Das Beenden von Anwendungen scheint den von ihnen verwendeten Speicher freizugeben. Beenden Sie alles, was Sie nicht benötigen, oder beenden Sie Anwendungen nacheinander, um zu sehen, wie viel Speicher sie verbrauchen.
  • Wenn dies nicht der Fall ist (etwa 10 Anwendungen, für die etwa 500 MB/15% für mich freigegeben wurden), ist WindowServer der mit Abstand größte Verbraucher. Sie können das Beenden erzwingen, wodurch auch alle laufenden Anwendungen beendet werden und Sie abgemeldet werden. Es ist jedoch etwas schneller als ein Neustart und ich habe wieder 90% freien Speicher auf dem cuda-Gerät. 
4
MattW.

Erster Typ 

nvidia-smi

wählen Sie dann die PID aus, die Sie beenden möchten

Sudo kill -9 PID
0
Ashiq Imran