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?

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

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.