J'utilise Keras avec le backend Tensorflow sur un cluster (création de réseaux de neurones). Comment puis-je l'exécuter de manière multi-thread sur le cluster (sur plusieurs cœurs) ou est-ce fait automatiquement par Keras? Par exemple, en Java, on peut créer plusieurs threads, chaque thread s'exécutant sur un noyau.
Si possible, combien de cœurs devraient être utilisés?
Tensorflow exécute automatiquement les calculs sur autant de cœurs disponibles sur une seule machine.
Si vous avez un cluster distribué, veillez à suivre les instructions figurant à https://www.tensorflow.org/how_tos/distributed/ pour configurer le cluster. (par exemple, créez correctement tf.ClusterSpec, etc.)
Pour faciliter le débogage, vous pouvez utiliser les options de configuration log_device_placement
de la session pour que Tensorflow imprime où les calculs sont réellement placés. (Remarque: cela fonctionne pour les deux GPU ainsi que pour Tensorflow distribué.)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
Notez que si l'algorithme de placement de calcul de Tensorflow fonctionne correctement pour les petits graphiques de calcul, vous pourrez peut-être améliorer les performances sur les grands graphiques de calcul en plaçant manuellement les calculs dans des périphériques spécifiques. (par exemple, en utilisant des blocs with tf.device(...):
.)
vous pouvez configurer la session de tensorflow et utiliser cette session pour keras backend
session_conf = tensorflow.ConfigProto(intra_op_parallelism_threads=8, inter_op_parallelism_threads=8)
tensorflow.set_random_seed(1)
sess = tensorflow.Session(graph=tensorflow.get_default_graph(), config=session_conf)
keras.backend.set_session(sess)