Tengo Keras instalado con el backend de Tensorflow y CUDA. A veces me gustaría obligar a Keras a usar la CPU a pedido. ¿Se puede hacer esto sin instalar un Tensorflow 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.
python
machine-learning
tensorflow
keras
mikal94305
fuente
fuente
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
como en una respuesta a continuaciónCUDA_DEVICE_ORDER=PCI_BUS_ID
en el número 152import os os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152 os.environ["CUDA_VISIBLE_DEVICES"] = ""
, ¿cómo puedo "deshacer" esto? Me gustaría que Keras volviera a usar la GPU.Una forma bastante separable de hacer esto es usar
Aquí, con
booleans
GPU
yCPU
, indicamos si nos gustaría ejecutar nuestro código con la GPU o la CPU definiendo rígidamente la cantidad de GPU y CPU a las que se permite acceder a la sesión de Tensorflow. Las variablesnum_GPU
ynum_CPU
definen este valor.num_cores
luego establece el número de núcleos de CPU disponibles para su uso medianteintra_op_parallelism_threads
yinter_op_parallelism_threads
.La
intra_op_parallelism_threads
variable dicta el número de subprocesos que se permite utilizar (intra) una operación paralela en un solo nodo en el gráfico de cálculo. Mientras que lainter_ops_parallelism_threads
variable define el número de subprocesos accesibles para operaciones paralelas a través de los nodos del gráfico de cálculo (inter).allow_soft_placement
permite que se ejecuten operaciones 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 coubicar con otras entradas de la CPU
Todo esto se ejecuta en el constructor de mi clase antes que cualquier otra operación, y es completamente separable de cualquier modelo u otro código que utilice.
Nota: Esto requiere
tensorflow-gpu
ycuda
/cudnn
para ser instalado porque se da la opción de usar una GPU.Refs:
¿Qué significan las opciones en ConfigProto como allow_soft_placement y log_device_placement?
Significado de inter_op_parallelism_threads e intra_op_parallelism_threads
fuente
allow_soft_placement
,intra_op_parallelism_threads
,inter_op_parallelism_threads
inter
/ seintra_op_parallelism_threads
refieren a las operaciones de CPU o GPU?Esto funcionó para mí (win10), coloque antes de importar keras:
fuente
Simplemente importe tensortflow y use keras, es así de fácil.
fuente
tf.device('/cpu:0')
, aún podía ver que la memoria se asignaba a Python más tarde connvidia-smi
.with
?Según el tutorial de Keras , simplemente puede usar el mismo
tf.device
alcance que en tensorflow regular:fuente
with
puede ser cualquier código de Keras.Pasé un tiempo resolviéndolo. La respuesta de Thoma no es completa. Digamos que su programa es
test.py
, desea usar gpu0 para ejecutar este programa y mantener otros gpus libres.Deberías escribir
CUDA_VISIBLE_DEVICES=0 python test.py
Note que
DEVICES
no esDEVICE
fuente
Para las personas que trabajan en PyCharm y para forzar la CPU, puede agregar la siguiente línea en la configuración Ejecutar / Depurar, en Variables de entorno:
fuente