Can Keras with Tensorflow backend be forced to use CPU or GPU at will? Can Keras with Tensorflow backend be forced to use CPU or GPU at will? python python

Can Keras with Tensorflow backend be forced to use CPU or GPU at will?


If you want to force Keras to use CPU

Way 1

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

before Keras / Tensorflow is imported.

Way 2

Run your script as

$ CUDA_VISIBLE_DEVICES="" ./your_keras_code.py

See also

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


A rather separable way of doing this is to use

import tensorflow as tffrom keras import backend as Knum_cores = 4if GPU:    num_GPU = 1    num_CPU = 1if CPU:    num_CPU = 1    num_GPU = 0config = 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)

Here, with booleans GPU and CPU, we indicate whether we would like to run our code with the GPU or CPU by rigidly defining the number of GPUs and CPUs the Tensorflow session is allowed to access. The variables num_GPU and num_CPU define this value. num_cores then sets the number of CPU cores available for usage via intra_op_parallelism_threads and inter_op_parallelism_threads.

The intra_op_parallelism_threads variable dictates the number of threads a parallel operation in a single node in the computation graph is allowed to use (intra). While the inter_ops_parallelism_threads variable defines the number of threads accessible for parallel operations across the nodes of the computation graph (inter).

allow_soft_placement allows for operations to be run on the CPU if any of the following criterion are met:

  1. there is no GPU implementation for the operation

  2. there are no GPU devices known or registered

  3. there is a need to co-locate with other inputs from the CPU

All of this is executed in the constructor of my class before any other operations, and is completely separable from any model or other code I use.

Note: This requires tensorflow-gpu and cuda/cudnn to be installed because the option is given to use a GPU.

Refs:


This worked for me (win10), place before you import keras:

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