我正在集群上使用Tensorflow后端的Keras(创建神经网络)。如何在集群上以多线程方式运行它(在多个核心上),或者Keras是否自动完成此操作?例如,在Java中,可以创建多个线程,每个线程在一个核心上运行。
如果可能,应该使用多少个核心?
我正在集群上使用Tensorflow后端的Keras(创建神经网络)。如何在集群上以多线程方式运行它(在多个核心上),或者Keras是否自动完成此操作?例如,在Java中,可以创建多个线程,每个线程在一个核心上运行。
如果可能,应该使用多少个核心?
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(...):
块)
对于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
。