Eine ziemlich trennbare Möglichkeit, dies zu tun, ist die Verwendung
import tensorflow as tf
from keras import backend as K
num_cores = 4
if GPU:
num_GPU = 1
num_CPU = 1
if CPU:
num_CPU = 1
num_GPU = 0
config = tf.ConfigProto(intra_op_parallelism_threads=num_cores,
inter_op_parallelism_threads=num_cores,
allow_soft_placement=True,
device_count = {'CPU' : num_CPU,
'GPU' : num_GPU}
)
session = tf.Session(config=config)
K.set_session(session)
Hier geben wir mit booleans
GPU
und an CPU
, 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 Variablen num_GPU
und num_CPU
definieren diesen Wert. num_cores
Legt dann die Anzahl der CPU-Kerne fest, die über intra_op_parallelism_threads
und zur Verwendung verfügbar sind inter_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 die inter_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
und cuda
/ oder cudnn
muss installiert werden, da die Option zur Verwendung einer GPU angegeben ist.
Refs:
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.