Keras avec le backend Tensorflow peut-il être forcé d'utiliser CPU ou GPU à volonté?

J'ai installé Keras avec le backend Tensorflow et CUDA. Je voudrais parfois à la demande forcer Keras à utiliser CPU. Cela peut-il être fait sans dire installer un TensorFlow CPU uniquement séparé dans un environnement virtuel? Si oui, comment? Si le backend était Theano, les drapeaux pourraient être définis, mais je n'ai pas entendu parler des drapeaux Tensorflow accessibles via Keras.

48
demandé sur mikal94305 2016-11-19 11:04:53

6 réponses

Si vous voulez forcer Keras à utiliser CPU

Façon 1

import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"   # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"] = ""

Avant l'importation de Keras / Tensorflow.

Façon 2

Exécutez votre script comme

$ CUDA_VISIBLE_DEVICES="" ./your_keras_code.py

Voir aussi

  1. https://github.com/keras-team/keras/issues/152
  2. https://github.com/fchollet/keras/issues/4613
63
répondu Martin Thoma 2017-12-18 17:57:23

Une façon plutôt gracieuse et séparable 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 vous pouvez spécifier si vous souhaitez utiliser un GPU ou un GPU lors de l'exécution de votre code. Notez que je le fais en spécifiant qu'il y a 0 périphériques GPU quand je veux simplement utiliser le CPU. En prime, via cette méthode, vous pouvez spécifier le nombre de GPU et de processeurs à utiliser aussi! En outre, via num_cores Vous pouvez définir le nombre de cœurs de PROCESSEUR à utiliser.

Tout ceci est exécuté dans le constructeur de ma classe, avant toute autre opération, et est complètement séparable de tout modèle, ou autre code que j'utilise.

La seule chose à noter est que vous aurez besoin de tensorflow-gpu et cuda/cudnn installé parce que vous donnez toujours la possibilité d'utiliser un GPU.

38
répondu RACKGNOME 2017-06-29 20:01:31

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

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
26
répondu Neuraleptic 2017-08-19 16:21:25

Selon le tutoriel keras , Vous pouvez simplement utiliser la même portée tf.device que dans TensorFlow régulier:

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
16
répondu sygi 2016-11-19 08:20:27

Il suffit D'importer tensortflow et d'utiliser keras, c'est aussi simple que ça.

import tensorflow as tf
# your code here
with tf.device('/gpu:0'):
    model.fit(X, y, epochs=20, batch_size=128, callbacks=callbacks_list)
8
répondu harshlal028 2018-01-30 22:05:49

Je viens de passer un peu de temps à comprendre. La réponse de Thoma n'est pas complète. Dites que votre programme est test.py, vous voulez utiliser gpu0 pour exécuter ce programme, et garder les autres GPU libres.

Vous devriez écrire CUDA_VISIBLE_DEVICES=0 python test.py

Avis c'est DEVICES pas DEVICE

2
répondu DDz 2018-08-19 06:47:37