如何在多核上运行 Keras?

Posted

技术标签:

【中文标题】如何在多核上运行 Keras?【英文标题】:How to run Keras on multiple cores? 【发布时间】:2017-05-26 02:19:21 【问题描述】:

我在集群上使用带有 Tensorflow 后端的 Keras(创建神经网络)。如何在集群上以多线程方式运行它(在多个内核上),还是由 Keras 自动完成?例如,在 Java 中可以创建多个线程,每个线程都运行在一个内核上。

如果可能,应该使用多少个内核?

【问题讨论】:

【参考方案1】:

对于 Tensorflow 1.x,您可以配置 Tensorflow 的会话并将此会话用于 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)

对于 Tensorflow 2.x,上面的大部分模块都已弃用。所以你需要给他们打电话,例如,像这样tensorflow.compat.v1.ConfigProto

【讨论】:

【参考方案2】:

Tensorflow 自动在单台机器上尽可能多的内核上运行计算。

如果您有分布式集群,请务必按照https://www.tensorflow.org/how_tos/distributed/ 的说明配置集群。 (例如正确创建 tf.ClusterSpec 等)

为了帮助调试,您可以使用会话中的log_device_placement 配置选项让 Tensorflow 打印出实际放置计算的位置。 (注意:这适用于 GPU 以及分布式 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(...): 块。)

【讨论】:

以上是关于如何在多核上运行 Keras?的主要内容,如果未能解决你的问题,请参考以下文章

linux单进程如何实现多核cpu多线程分配?

如何在 ubuntu20 上以 theano 为后端的 termux 运行 keras

C++ openmp并行程序在多核linux上如何最大化使用cpu

Keras FAQ: 常见问题解答

如何在 GPU 上使用 Keras?

如何在 Windows 上降级 keras 和 tensorflow 版本?