python - 使用 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])
如何确保代码使用所有内核?
解决方案
在评估神经网络时,有两种主要方法可以获得并行性:
- 矩阵计算
- 微批量并行
许多神经网络的计算图是顺序的(因此 Keras 有一个顺序模型)。即,在前进和后退步骤中按顺序计算 layer1 ... layerN。无法通过将层分布在不同的核心上来加速顺序网络。
然而,大多数计算使用矩阵运算,这些运算通常使用高性能库(如 BLAS)实现,该库使用 CPU 可用的所有内核。通常,batch size 越大,并行的机会就越大。
微批处理并行是multi_gpu_model使用的策略,其中不同的微批处理被分配到不同的计算单元(它主要对 GPU 很有意义)。
非序列模型也可以通过仔细的设备放置来并行化;我不确定这是不是这里的情况。但 TLDR 是:增加您的 batch_size 并享受所有 36 个核心在矩阵计算上旋转。
推荐阅读
- sql-server - 从 Oracle 端的 MSSQL 接收 @@IDENTITY
- javascript - 如何在单列材料表中编辑多个字段
- javascript - 如何从类实例中获取 JavaScript 类构造函数参数
- node.js - UnhandledPromiseRejectionWarning:TypeError 无法读取未定义的属性“名称”
- vesta - Cannot setup VestaCP in fresh CentOS8. Failed to synchronize cache for repo 'vesta'
- google-apps-script - 如何在谷歌工作表中创建函数睡眠(毫秒)以延迟或暂停某个范围内的公式
- django - Django unknown column error when trying to get a model objects
- java - 如果成员变量关闭,如何在不将类型从 void 更改为 boolean 的情况下显示 true?
- java - 与他人共享图像和文本应用程序
- python - 避免在子命令中转义美元符号?