Tenho Keras instaladas com o backend Tensorflow e CUDA. I'gostaria de por vezes, a pedido, forçar as Keras a usar CPU. Isto pode ser feito sem dizer instalar um Tensorflow separado apenas para CPU num ambiente virtual? Se sim, como? Se o backend fosse Theano, as bandeiras poderiam ser colocadas, mas ainda não ouvi falar de bandeiras de Tensorflow acessíveis através de Keras.
Se quiser forçar o Keras a utilizar o CPU
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"] = ""
antes de Keras / Tensorflow ser importado.
Execute o seu guião como
$ CUDA_VISIBLE_DEVICES="" ./your_keras_code.py
Ver também
De acordo com keras tutorial, pode simplesmente utilizar o mesmo âmbito tf.device
que no fluxo tensor regular:
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
Acabei de passar algum tempo a descobrir.
A resposta de Thoma's não é completa.
Digamos que o seu programa é test.py
, quer utilizar gpu0 para executar este programa, e manter outros gpus livres.
Deve escrever CUDA_VISIBLE_DEVICES=0 python test.py
Repare nisto's DEVICES
e não DEVICE
.