Keras多GPU训练方法及模型保存

多GPU训练可以在一定程度上提高训练的效率,keras在以tensorflow为底层的时候,可以方便的调用多GPU进行训练。其训练的原理是将一个神经网络在多块GPU中进行初始化,并且将一个batch的数据分配到不同的GPU中,反向传播结束后,再使用CPU进行合并更新参数。举个例子,同时使用两块GPU,batchsize是16的话,keras会将8个给1号GPU,另外8个给2号GPU,训练结束后将二者拼接为一个16的batch并进行反向传播更新参数。

通过以上的原理我们知道,当batchsize是1的时候,比如在三维数据上,使用多个GPU训练实际上是没有提速效果的。

第一步,就是多GPU的选取,比较直接的方式就是通过更改环境变量来选择使用哪个GPU。

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "2,3"

没有指定keras默认会选择所有的GPU,如果你并没有配置多GPU的训练,那么实际上keras占了所有的GPU但是实际上只在一个GPU上运行。

第二步,就是调用多GPU函数,multi_gpu_model,第一个参数是你的模型,第二个是使用GPU的数量。model泛指一个keras的模型。

model = KerasNet()
par_model = keras.utils.multi_gpu_model(model, gpus=2)

第三步,当需要使用keras的checkpoint的功能的时候,使用如下函数,初始化的参数model就是你单个的model,而不是用于多GPU训练的pat_model

class ParallelModelCheckpoint(ModelCheckpoint):
    def __init__(self,model,filepath, monitor='val_loss', verbose=0,
                 save_best_only=False, save_weights_only=False,
                 mode='auto', period=1):
        self.single_model = model
        super(ParallelModelCheckpoint,self).__init__(filepath, monitor, verbose,save_best_only, save_weights_only,mode, period)

    def set_model(self, model):
        super(ParallelModelCheckpoint,self).set_model(self.single_model)

在调用的时候,使用如下的方法:

checkpoint = ParallelModelCheckpoint(model, save5_path, monitor='val_auc', verbose=1, save_best_only=True, save_weights_only=True,mode='max')

模型就是那个单个的模型,save_path是需要保存的路径。

第四步,如果是不用checkpoint功能的那么可以采用savemodel 的办法,但是在savemodel的时候,传入的参数需要是单一的模型model而不是多GPU的模型par_model

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值