【问题标题】:Multy processing with Keras使用 Keras 进行多重处理
【发布时间】:2019-03-08 04:52:25
【问题描述】:

我正在尝试使用我拥有的 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])

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

【问题讨论】:

    标签: python multithreading tensorflow keras multiprocessing


    【解决方案1】:

    在评估神经网络时,您可以通过两种主要方式获得并行性:

    • 矩阵计算
    • 微批量并行

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

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

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

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

    【讨论】:

    • 那么没有办法在 CPU 上并行化顺序 Keras 网络吗?只能通过微批量并行在GPU上并行?
    • 您也可以通过 CPU 上的微批处理进行并行化。只是矩阵运算已经并行化,因此在许多情况下,无需做任何额外的事情。根据网络的确切架构,可能还有其他潜在的解决方案。但是顺序网络是顺序的,不能通过将不同的层分配给不同的 CPU/GPU 来实现并行化。
    猜你喜欢
    • 1970-01-01
    • 2018-05-23
    • 2018-08-20
    • 2020-12-05
    • 2017-04-06
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多