Haga que Keras se ejecute en un sistema de CPU de múltiples núcleos y múltiples máquinas


10

Estoy trabajando en el modelo Seq2Seq usando LSTM de Keras (usando el fondo Theano) y me gustaría paralelizar los procesos, porque incluso unos pocos MB de datos necesitan varias horas para el entrenamiento.

Está claro que las GPU son mucho mejores en paralelo que las CPU. Por el momento, solo tengo CPU para trabajar. Pude acceder a 16 CPU (2 subprocesos por núcleo X 4 núcleos por socket X 2 sockets)

Desde el documento de soporte multi-core en Theano, logré usar los cuatro núcleos de un solo socket. Entonces, básicamente la CPU tiene un uso del 400% con 4 CPU usadas y las 12 CPU restantes permanecen sin usar. ¿Cómo hago uso de ellos también? Tensorflow también podría usarse en lugar del fondo Theano, si funciona.

ingrese la descripción de la imagen aquí

Respuestas:


6

Para establecer el número de subprocesos utilizados en Theano (y, por lo tanto, el número de núcleos de CPU), deberá establecer algunos parámetros en el entorno:

import os
os.environ['MKL_NUM_THREADS'] = '16'
os.environ['GOTO_NUM_THREADS'] = '16'
os.environ['OMP_NUM_THREADS'] = '16'
os.eviron['openmp'] = 'True'

Esto debería permitirle usar todos los núcleos de todas las CPU.

Esto, por supuesto, también se puede hacer en Tensorflow:

import tensorflow as tf
from keras.backend import tensorflow_backend as K

with tf.Session(config=tf.ConfigProto(
                    intra_op_parallelism_threads=16)) as sess:
    K.set_session(sess)
    <Your Keras code>

Estaría agradecido por este código para establecer el número de núcleos en R (estoy usando keras en R y está usando solo una parte de los núcleos ...). Especialmente para tensorflow. Gracias, Milan
gutompf

2
Puede usar Sys.setenv () para establecer variables de entorno en R, similar al uso de os.environ [var] en Python.
Thomas Cleberg
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.