Ich habe Keras mit dem Tensorflow-Backend und CUDA installiert. Ich möchte Keras manchmal auf Anfrage zwingen, CPU zu verwenden. Kann dies ohne die Installation eines separaten Tensorflow nur für die CPU in einer virtuellen Umgebung erfolgen? Wenn das so ist, wie? Wenn das Backend Theano wäre, könnten die Flags gesetzt werden, aber ich habe noch nichts von Tensorflow-Flags gehört, auf die über Keras zugegriffen werden kann.
python
machine-learning
tensorflow
keras
mikal94305
quelle
quelle
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
wie in einer Antwort unten eingestellt werdenCUDA_DEVICE_ORDER=PCI_BUS_ID
in Ausgabe # 152import os os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152 os.environ["CUDA_VISIBLE_DEVICES"] = ""
, wie ich dies jetzt "rückgängig machen" kann. Ich möchte, dass Keras die GPU wieder verwendet.Eine ziemlich trennbare Möglichkeit, dies zu tun, ist die Verwendung
Hier geben wir mit
booleans
GPU
und anCPU
, ob wir unseren Code mit der GPU oder der CPU ausführen möchten, indem wir die Anzahl der GPUs und CPUs, auf die die Tensorflow-Sitzung zugreifen darf, genau definieren. Die Variablennum_GPU
undnum_CPU
definieren diesen Wert.num_cores
Legt dann die Anzahl der CPU-Kerne fest, die überintra_op_parallelism_threads
und zur Verwendung verfügbar sindinter_op_parallelism_threads
.Die
intra_op_parallelism_threads
Variable bestimmt die Anzahl der Threads, die eine Paralleloperation in einem einzelnen Knoten im Berechnungsdiagramm verwenden darf (intra). Während dieinter_ops_parallelism_threads
Variable die Anzahl der Threads definiert, auf die für parallele Operationen über die Knoten des Berechnungsgraphen (inter) zugegriffen werden kann.allow_soft_placement
ermöglicht die Ausführung von Operationen auf der CPU, wenn eines der folgenden Kriterien erfüllt ist:Es gibt keine GPU-Implementierung für den Vorgang
Es sind keine GPU-Geräte bekannt oder registriert
Es besteht die Notwendigkeit, sich mit anderen Eingängen der CPU zusammenzuschließen
All dies wird im Konstruktor meiner Klasse vor allen anderen Operationen ausgeführt und ist vollständig von jedem Modell oder anderen Code, den ich verwende, trennbar.
Hinweis: Dies erfordert
tensorflow-gpu
undcuda
/ odercudnn
muss installiert werden, da die Option zur Verwendung einer GPU angegeben ist.Refs:
Was bedeuten die Optionen in ConfigProto wie allow_soft_placement und log_device_placement?
Bedeutung von inter_op_parallelism_threads und intra_op_parallelism_threads
quelle
allow_soft_placement
,intra_op_parallelism_threads
,inter_op_parallelism_threads
inter
/intra_op_parallelism_threads
auf CPU- oder GPU-Operationen?Dies hat bei mir funktioniert (win10), bevor Sie Keras importieren:
quelle
Importieren Sie einfach Tensortflow und verwenden Sie Keras, so einfach ist das.
quelle
tf.device('/cpu:0')
, konnte ich immer noch sehen, dass Python später mit Speicher zugewiesen wurdenvidia-smi
.with
?Gemäß dem Keras- Tutorial können Sie einfach den gleichen
tf.device
Bereich wie beim regulären Tensorflow verwenden:quelle
with
kann ein beliebiger Keras-Code sein.Ich habe nur einige Zeit damit verbracht, es herauszufinden. Thomas Antwort ist nicht vollständig.
test.py
Angenommen, Ihr Programm ist , Sie möchten gpu0 verwenden, um dieses Programm auszuführen, und andere gpus frei halten.Du solltest schreiben
CUDA_VISIBLE_DEVICES=0 python test.py
Beachten Sie, dass es
DEVICES
nicht istDEVICE
quelle
Für Personen, die an PyCharm arbeiten und die CPU erzwingen, können Sie in der Run / Debug-Konfiguration unter Umgebungsvariablen die folgende Zeile hinzufügen:
quelle