首页 > 解决方案 > 使用 Keras 进行多重处理

问题描述

我正在尝试使用我拥有的 36 个内核使用 Keras 训练 CNN 模型。我正在尝试关注: 如何在多个内核上运行 Keras?

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

我的代码是:

模型是用 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])

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

标签: pythonmultithreadingtensorflowkerasmultiprocessing

解决方案


在评估神经网络时,有两种主要方法可以获得并行性:

  • 矩阵计算
  • 微批量并行

许多神经网络的计算图是顺序的(因此 Keras 有一个顺序模型)。即,在前进和后退步骤中按顺序计算 layer1 ... layerN。无法通过将层分布在不同的核心上来加速顺序网络。

然而,大多数计算使用矩阵运算,这些运算通常使用高性能库(如 BLAS)实现,该库使用 CPU 可用的所有内核。通常,batch size 越大,并行的机会就越大。

微批处理并行是multi_gpu_model使用的策略,其中不同的微批处理被分配到不同的计算单元(它主要对 GPU 很有意义)。

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


推荐阅读