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 GPUund 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_GPUund num_CPUdefinieren diesen Wert. num_coresLegt dann die Anzahl der CPU-Kerne fest, die über intra_op_parallelism_threadsund zur Verwendung verfügbar sind inter_op_parallelism_threads.
Die intra_op_parallelism_threadsVariable bestimmt die Anzahl der Threads, die eine Paralleloperation in einem einzelnen Knoten im Berechnungsdiagramm verwenden darf (intra). Während die inter_ops_parallelism_threadsVariable 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-gpuund cuda/ oder cudnnmuss installiert werden, da die Option zur Verwendung einer GPU angegeben ist.
Refs:
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'wie in einer Antwort unten eingestellt werden