python - instalar - modulenotfounderror: no module named ''keras''
¿Se puede obligar a Keras con backend Tensorflow a usar CPU o GPU a voluntad? (6)
Acabo de pasar un tiempo para resolverlo.
La respuesta de Thoma no está completa.
Digamos que su programa es
test.py
, desea usar gpu0 para ejecutar este programa y mantener otros gpus libres.
Debería escribir
CUDA_VISIBLE_DEVICES=0 python test.py
Tenga en cuenta que es
DEVICES
no
DEVICE
Tengo Keras instalado con el backend Tensorflow y CUDA. A veces me gustaría obligar a Keras a utilizar CPU. ¿Se puede hacer esto sin necesidad de instalar un Tensorflow separado solo para CPU en un entorno virtual? ¿Si es así, cómo? Si el backend fuera Theano, las banderas podrían establecerse, pero no he oído hablar de las banderas de Tensorflow accesibles a través de Keras.
Esto funcionó para mí (win10), lugar antes de importar keras:
import os
os.environ[''CUDA_VISIBLE_DEVICES''] = ''-1''
Según el
tutorial
tf.device
simplemente puede usar el mismo alcance
tf.device
que en el flujo de tensor regular:
import tensorflow as tf
# your code here
with tf.device(''/gpu:0''):
model.fit(X, y, epochs=20, batch_size=128, callbacks=callbacks_list)
Si quieres obligar a Keras a usar CPU
Camino 1
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"] = ""
antes de importar Keras / Tensorflow.
Camino 2
Ejecute su script como
$ CUDA_VISIBLE_DEVICES="" ./your_keras_code.py
Ver también
Solo importa tensortflow y usa keras, es así de fácil.
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
Una forma bastante separable de hacer esto es usar
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)
Aquí, con la
GPU
y la
CPU
booleans
, indicamos si nos gustaría ejecutar nuestro código con la GPU o la CPU definiendo rígidamente el número de GPU y CPU a las que se permite acceder a la sesión de Tensorflow.
Las variables
num_GPU
y
num_CPU
definen este valor.
num_cores
luego establece el número de núcleos de CPU disponibles para su uso a través de
intra_op_parallelism_threads
e
inter_op_parallelism_threads
.
La variable
intra_op_parallelism_threads
dicta el número de subprocesos que una operación paralela en un solo nodo en el gráfico de cálculo puede usar (intra).
Mientras que la variable
inter_ops_parallelism_threads
define el número de hilos accesibles para operaciones paralelas a través de los nodos del gráfico de cálculo (inter).
allow_soft_placement
permite que las operaciones se ejecuten en la CPU si se cumple alguno de los siguientes criterios:
-
no hay implementación de GPU para la operación
-
no hay dispositivos GPU conocidos o registrados
-
existe la necesidad de ubicar conjuntamente con otras entradas de la CPU
Todo esto se ejecuta en el constructor de mi clase antes de cualquier otra operación, y es completamente separable de cualquier modelo u otro código que use.
Nota: Esto requiere la
tensorflow-gpu
y
cuda
/
cudnn
porque se ofrece la opción de usar una GPU.
Refs: