J'ai installé Keras avec le backend Tensorflow et CUDA. J'aimerais parfois forcer Keras à utiliser le processeur. Cela peut-il être fait sans l'installation d'un Tensorflow séparé pour CPU uniquement dans un environnement virtuel? Si c'est le cas, comment? Si le backend était Theano, les drapeaux pourraient être définis, mais je n'ai pas entendu parler de drapeaux Tensorflow accessibles via Keras.
Réponses
Trop de publicités?Si vous voulez forcer Keras à utiliser le processeur
Voie 1
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"] = ""
avant que Keras / Tensorflow soit importé.
Voie 2
Exécutez votre script en tant que
$ CUDA_VISIBLE_DEVICES="" ./your_keras_code.py
Voir également
Plutôt séparables façon de le faire est d'utiliser
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)
Ici, avec booleans
GPU
et CPU
, de nous indiquer si nous tenons à exécuter notre code avec le GPU ou CPU de manière rigide définissant le nombre de Gpu et Cpu de la Tensorflow session est autorisé à accéder. Les variables num_GPU
et num_CPU
définir cette valeur. num_cores
puis définit le nombre de cœurs de PROCESSEUR disponible pour utilisation par intra_op_parallelism_threads
et inter_op_parallelism_threads
.
L' intra_op_parallelism_threads
variable détermine le nombre de threads d'un fonctionnement en parallèle dans un seul nœud dans le graphe est autorisé à utiliser (intra). Alors que l' inter_ops_parallelism_threads
variable définit le nombre de threads accessible pour les opérations parallèles entre les nœuds du graphe (inter).
allow_soft_placement
permet pour les opérations à exécuter sur le PROCESSEUR si l'un des critères suivants sont respectés:
il n'y a pas de GPU de la mise en œuvre de l'opération
il n'y a pas de GPU dispositifs connus ou enregistré
il est nécessaire de faire cohabiter avec d'autres entrées de la CPU
Tout cela est exécuté dans le constructeur de ma classe avant les autres opérations, et est complètement séparable à partir d'un modèle ou d'un autre code que j'utilise.
Remarque: il requiert tensorflow-gpu
et cuda
/cudnn
pour être installée car l'option est donnée à l'utilisation d'un GPU.
Refs:
Selon le tutoriel keras, vous pouvez simplement utiliser la même portée tf.device
que dans le tensorflow normal:
with tf.device('/gpu:0'):
x = tf.placeholder(tf.float32, shape=(None, 20, 64))
y = LSTM(32)(x) # all ops in the LSTM layer will live on GPU:0
with tf.device('/cpu:0'):
x = tf.placeholder(tf.float32, shape=(None, 20, 64))
y = LSTM(32)(x) # all ops in the LSTM layer will live on CPU:0