122 votes

Keras avec le backend Tensorflow peut-il être contraint d’utiliser le processeur ou le processeur graphique à sa guise?

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.

120voto

moose Points 4945

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

  1. https://github.com/keras-team/keras/issues/152
  2. https://github.com/fchollet/keras/issues/4613

83voto

Neuraleptic Points 289

Cela a fonctionné pour moi (win10), placez-vous avant d'importer des keras:

 import os
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
 

79voto

RACKGNOME Points 628

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:

  1. il n'y a pas de GPU de la mise en œuvre de l'opération

  2. il n'y a pas de GPU dispositifs connus ou enregistré

  3. 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:

38voto

harshlal028 Points 529

Importez simplement tensortflow et utilisez keras, c'est aussi simple que cela.

 import tensorflow as tf
# your code here
with tf.device('/gpu:0'):
    model.fit(X, y, epochs=20, batch_size=128, callbacks=callbacks_list)
 

30voto

sygi Points 3260

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
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X