用Keras进行大量处理

时间:2019-03-07 20:36:36

标签: python multithreading tensorflow keras multiprocessing

我正在尝试使用我拥有的36个核用Keras训练CNN模型。我正在尝试遵循: How to run Keras on multiple cores?

但是它并不能使我的代码更快,并且我不确定它是使用所有可用的内核还是仅使用一个内核,其余内核仍未使用。

我的代码是:

使用Keras ==>

定义模型
import tensorflow as tf
from keras.backend import tensorflow_backend as K
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
K.set_session(sess)
CNN_Model = CNN_model()

ES = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=150)

history = CNN_Model.fit(IM_Training , Y_Train , batch_size= 256, epochs =250, verbose=1, validation_data=(IM_Valid, Y_Val ), callbacks = [ES])

如何确保代码使用所有内核?

1 个答案:

答案 0 :(得分:0)

评估神经网络时,有两种主要的并行性获取方法:

  • 矩阵计算
  • 微批量并行处理

许多神经网络的计算图是顺序的(因此Keras具有顺序模型)。即,在向前和向后步骤中依次计算layer1 ... layerN。不能通过在不同核心之间分布层来加快顺序网络的速度。

但是,大多数计算使用的矩阵运算通常是通过高性能库(如BLAS)实现的,该库使用可用于CPU的所有内核。通常,批处理大小越大,并行化的机会就越大。

微批处理并行性是multi_gpu_model使用的策略,其中将不同的微批处理分配给不同的计算单元(这实际上对GPU有意义)。

也可以通过仔细放置设备来并行化非顺序模型;我不确定这是这里的情况。但是TLDR是:增加您的batch_size,并享受矩阵计算中所有36个核的旋转。