我正在尝试使用我拥有的36个核用Keras训练CNN模型。我正在尝试遵循: How to run Keras on multiple cores?
但是它并不能使我的代码更快,并且我不确定它是使用所有可用的内核还是仅使用一个内核,其余内核仍未使用。
我的代码是:
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])
如何确保代码使用所有内核?
答案 0 :(得分:0)
评估神经网络时,有两种主要的并行性获取方法:
许多神经网络的计算图是顺序的(因此Keras具有顺序模型)。即,在向前和向后步骤中依次计算layer1 ... layerN。不能通过在不同核心之间分布层来加快顺序网络的速度。
但是,大多数计算使用的矩阵运算通常是通过高性能库(如BLAS)实现的,该库使用可用于CPU的所有内核。通常,批处理大小越大,并行化的机会就越大。
微批处理并行性是multi_gpu_model使用的策略,其中将不同的微批处理分配给不同的计算单元(这实际上对GPU有意义)。
也可以通过仔细放置设备来并行化非顺序模型;我不确定这是这里的情况。但是TLDR是:增加您的batch_size,并享受矩阵计算中所有36个核的旋转。