Lassen Sie Keras auf einem Multi-Core-CPU-System mit mehreren Computern laufen


10

Ich arbeite am Seq2Seq-Modell mit LSTM von Keras (mit Theano-Hintergrund) und möchte die Prozesse parallelisieren, da selbst wenige MB Daten mehrere Stunden für das Training benötigen.

Es ist klar, dass GPUs bei der Parallelisierung weitaus besser sind als CPUs. Im Moment habe ich nur CPUs, mit denen ich arbeiten kann. Ich konnte auf 16 CPUs zugreifen (2 Threads pro Kern x 4 Kerne pro Sockel x 2 Sockel)

Aus dem Dokument der Multi-Core- Unterstützung in Theano konnte ich alle vier Kerne eines einzelnen Sockets verwenden. Grundsätzlich ist die CPU zu 400% ausgelastet, wobei 4 CPUs verwendet werden, und die verbleibenden 12 CPUs bleiben ungenutzt. Wie nutze ich sie auch? Tensorflow kann auch anstelle des Theano-Hintergrunds verwendet werden, wenn dies funktioniert.

Geben Sie hier die Bildbeschreibung ein

Antworten:


6

Um die Anzahl der in Theano verwendeten Threads (und damit die Anzahl der CPU-Kerne) festzulegen, müssen Sie einige Parameter in der Umgebung festlegen:

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

Dies sollte es Ihnen ermöglichen, alle Kerne aller CPUs zu verwenden.

Dies kann natürlich auch in Tensorflow erfolgen:

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>

Ich wäre dankbar für diesen Code zum Festlegen der Anzahl der Kerne in R (ich verwende Keras in R und es wird nur ein Teil der Kerne verwendet ...). Speziell für Tensorflow. Danke, Mailand
gutompf

2
Mit Sys.setenv () können Sie Umgebungsvariablen in R festlegen, ähnlich wie mit os.environ [var] in Python.
Thomas Cleberg
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.