Faire fonctionner Keras sur un système CPU multi-machine multi-core

11

Je travaille sur le modèle Seq2Seq en utilisant LSTM de Keras (en utilisant l'arrière-plan de Theano) et je voudrais paralléliser les processus, car même peu de Mo de données nécessitent plusieurs heures de formation.

Il est clair que les GPU sont bien meilleurs en parallélisation que les CPU. Pour le moment, je n'ai que des processeurs avec lesquels travailler. Je pouvais accéder à 16 CPU (2 threads par cœur X 4 cœurs par socket X 2 sockets)

À partir du document de prise en charge multicœur de Theano, j'ai réussi à utiliser les quatre cœurs d'un même socket. Donc, fondamentalement, le CPU est à 400% d'utilisation avec 4 processeurs utilisés et les 12 CPU restants restent inutilisés. Comment puis-je les utiliser aussi. Tensorflow pourrait également être utilisé à la place de l'arrière-plan de Theano, si cela fonctionne.

entrez la description de l'image ici

yazhi
la source

Réponses:

7

Afin de définir le nombre de threads utilisés dans Theano (et, par conséquent, le nombre de cœurs de processeur), vous devrez définir quelques paramètres dans l'environnement:

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

Cela devrait vous permettre d'utiliser tous les cœurs de tous les processeurs.

Bien sûr, cela peut également être fait dans 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>
Thomas Cleberg
la source
Je serais reconnaissant pour ce code pour avoir défini le nombre de cœurs dans R (j'utilise des keras dans R et il n'utilise qu'une partie des cœurs ...). Surtout pour tensorflow. Merci, Milan
gutompf
2
Vous pouvez utiliser Sys.setenv () pour définir des variables d'environnement dans R, comme pour utiliser os.environ [var] en Python.
Thomas Cleberg