Tensorflow-Set CUDA_VISIBLE_DEVICES im Jupyter

76

Ich habe zwei GPUs und möchte zwei verschiedene Netzwerke gleichzeitig über ipynb betreiben. Das erste Notebook weist jedoch immer beide GPUs zu.

Mit CUDA_VISIBLE_DEVICES kann ich Geräte für Python-Dateien ausblenden, bin mir jedoch nicht sicher, wie ich dies in einem Notizbuch tun soll.

Gibt es überhaupt Möglichkeiten, verschiedene GPUs in Notebooks zu verstecken, die auf demselben Server ausgeführt werden?

Tim
quelle

Antworten:

156

Sie können Umgebungsvariablen im Notizbuch mit festlegen os.environ. Führen Sie die folgenden Schritte aus, bevor Sie TensorFlow initialisieren, um TensorFlow auf die erste GPU zu beschränken.

import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"   # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"]="0"

Sie können überprüfen, ob die richtigen Geräte für TF sichtbar sind

from tensorflow.python.client import device_lib
print device_lib.list_local_devices()

Ich neige dazu, es von Dienstprogrammmodul wie notebook_util zu verwenden

import notebook_util
notebook_util.pick_gpu_lowest_memory()
import tensorflow as tf
Jaroslaw Bulatow
quelle
1
Bei mir hat es nicht funktioniert. os.environ ["CUDA_VISIBLE_DEVICES"] = "0" ... Ich habe es in os.environ ["CUDA_VISIBLE_DEVICES"] = "" geändert und dann hat es funktioniert. Ich benutze Tensorflow 1.12
AlonSamuel
Ich habe versucht, lokale Tensorflow-Geräte wie erwähnt anzuzeigen. Mein System gibt nur den Gerätetyp aus: CPU. Bedeutet dies, dass auf dem Tensorflow keine GPU ausgeführt wird?
Shaifali Gupta
Dies funktioniert bei mir nach Tensorflow-Importen nicht.
rjurney
33

Sie können es ohne Importe schneller machen, indem Sie einfach Magie verwenden :

%env CUDA_DEVICE_ORDER=PCI_BUS_ID
%env CUDA_VISIBLE_DEVICES=0

Beachten Sie, dass alle env-Variablen Zeichenfolgen sind und daher nicht verwendet werden müssen ". Sie können überprüfen, ob die env-Variable eingerichtet ist, indem Sie Folgendes ausführen : %env <name_of_var>. Oder überprüfen Sie alle mit %env.

Salvador Dali
quelle
envBeeinflusst diese Einstellung andere Python-Skripte? wie es aussieht, als würde man die Umgebungsvariable von os ändern.
JenkinsY
@JenkinsY Sie können es einfach überprüfen, indem Sie die Variable in einem Skript festlegen und in einem anderen lesen.
Salvador Dali