我正在尝试使用我拥有的36个内核来训练CNN模型。我正在尝试关注:如何在多个内核上运行keras?
,但它不会使我的代码更快,我不确定它是使用所有avialble内核还是仅使用一个核心,其余的都没有使用。
我的代码是:
模型是用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])
如何确保代码使用所有内核?
评估神经网络时,有2种主要方法可以得到并行性:
- 矩阵计算
- Micro Batch Parallelism
许多神经网络的计算图是顺序的(因此具有顺序模型的keras)。即一个人在前和向后的步骤上计算layer1 ...分层。连续网络不能通过在不同核心上分配图层来加快速度。
但是,大多数计算都使用矩阵操作,通常使用像Blas这样的高性能Lib实现的矩阵操作,该lib使用了CPU可用的所有内核。通常,批处理大小越大,并行性的机会就越大。
Micro Batch并行性是Multi_gpu_model使用的策略,其中不同的微批次分配给不同的计算单元(对于GPU来说确实是有意义的)。
非序列模型也可以通过仔细的设备放置并行。我不确定这是这里的情况。但是TLDR是:增加您的batch_size并享受矩阵计算上的所有36个内核。