Как запустить Keras на нескольких ядрах?

Я использую Keras с бэкэндом Tensorflow на кластере (создавая нейронные сети). Как запустить его многопоточным способом в кластере (на нескольких ядрах) или это делается автоматически Keras? Например, в Java можно создать несколько потоков, каждый поток работает на ядре.

Если возможно, сколько ядер необходимо использовать?

Ответ 1

Tensorflow автоматически запускает вычисления на столько ядер, сколько доступно на одной машине.

Если у вас есть распределенный кластер, обязательно следуйте инструкциям на https://www.tensorflow.org/how_tos/distributed/, чтобы настроить кластер. (например, правильно создайте tf.ClusterSpec и т.д.)

Чтобы помочь отлаживать, вы можете использовать log_device_placement конфигурации log_device_placement в сеансе, чтобы распечатать Tensorflow, где фактически размещены вычисления. (Примечание: это работает как для графических процессоров, так и для распределенного Tensorflow.)

# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

Обратите внимание, что хотя алгоритм размещения расчётов Tensorflow отлично подходит для небольших вычислительных графов, вы можете повысить производительность на больших вычислительных графах, вручную разместив вычисления на определенных устройствах. (например, с with tf.device(...): blocks.)

Ответ 2

Вы можете настроить сеанс tenorflow и использовать этот сеанс для бэкэнда keras

 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)