前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Keras多GPU训练

Keras多GPU训练

作者头像
Cloudox
发布于 2021-11-23 05:51:46
发布于 2021-11-23 05:51:46
1.3K00
代码可运行
举报
文章被收录于专栏:月亮与二进制月亮与二进制
运行总次数:0
代码可运行

Keras 2.X版本后可以很方便的支持使用多GPU进行训练了,使用多GPU可以提高我们的训练过程,比如加速和解决内存不足问题。

多GPU其实分为两种使用情况:数据并行和设备并行。

数据并行将目标模型在多个设备上各复制一份,并使用每个设备上的复制品处理整个数据集的不同部分数据。Keras在 keras.utils.multi_gpu_model 中提供有内置函数,该函数可以产生任意模型的数据并行版本,最高支持在8片GPU上并行。

数据并行是指将我们的模型放到多个GPU上去跑,来处理数据集的不同部分,Keras的keras.utils.multi_gpu_model支持任意模型的数据并行,最多支持8个GPU。我们大多数时候要用到的都是数据并行,其他需求可以参考这篇博客:Keras多GPU及分布式

这里就给出数据并行的多GPU训练示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from keras.utils.training_utils import multi_gpu_model   #导入keras多GPU函数

model = get_model()
parallel_model = multi_gpu_model(model, gpus=2) # 设置使用2个gpu,该句放在模型compile之前
parallel_model.compile(loss='categorical_crossentropy', optimizer=Adam(), metrics=['accuracy'])
hist = parallel_model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs_num, validation_data=(x_test, y_test), verbose=1, callbacks=callbacks)

你还可以指定要哪几个GPU来跑:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import os

os.environ["CUDA_VISIBLE_DEVICES"] = "3,5"

使用命令“nvidia-smi”可以查看各GPU的使用情况和序号,上面代码就是指定用序号为3和5的两个GPU来跑训练。

其实这样就可以了,就是这么简单。

但是实际运行中,我还是遇到了一些报错。

报错1

ValueError: Variable batch_normalization_1/moving_mean/biased already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at:

我使用单GPU训练的时候没有问题,改成多GPU后出现这个问题。这个问题好解决,将Tensorflow升级到1.4即可。

报错2

TypeError: can't pickle ...(different text at different situation) objects

查找资料后,发现可能源于callbacks.ModelCheckpoint() 并进行多 gpu 并行计算时,使用姿势不对导致callbacks 函数报错。

我在代码中为了保存最优的训练模型,加了这个callback:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
checkpoint = ModelCheckpoint(filepath='./cifar10_resnet_ckpt.h5', monitor='val_acc', verbose=1,save_best_only=True)

而在改为多GPU训练后,每次回调存储的模型变成了parallel_model,这会导致报错,只需要改成依然保存原本的model即可,所以我们需要改一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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, filepath='./cifar10_resnet_ckpt.h5', monitor='val_acc', verbose=1, save_best_only=True) # 解决多GPU运行下保存模型报错的问题

其余的不变,也就是改为依然存储原本的model即可。还有其他的改法可以参考这篇博客:[Keras] 使用多 gpu 并行训练并使用 ModelCheckpoint() 可能遇到的问题,思路都是一样的,只是改法不同。

这样就能够成功使用多GPU训练啦。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/11/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Keras】Keras使用进阶
通常用keras做分类任务的时候,一张图像往往只对应着一种类别,但是在实际的问题中,可能你需要预测出一张图像的多种属性。例如在pyimagesearch的《multi-label-classification-with-keras》这篇文章中提出了一个衣服数据集,整个数据集有两种属性,一种是颜色(blue, red, black),另一种是衣服的类型(dress, jeans, shirt) 。如假设one-hot-vector编码顺序是(blue, red, black, dress, jeans, shirt)则black jeans的 label就是[0,0,1,0,1,0]。
keloli
2019/08/12
1.2K0
Tensorflow Keras:mnist分类demo
tf2集成的keras非常好用,对一些简单的模型可以快速搭建,下面以经典mnist数据集为例,做一个demo,展示一些常用的方法
Mirza Zhao
2023/06/26
5370
轻松理解Keras回调
随着计算机处理能力的提高,人工智能模型的训练时间并没有缩短,主要是人们对模型精确度要求越来越高。为了提升模型精度,人们设计出越来越复杂的深度神经网络模型,喂入越来越海量的数据,导致训练模型也耗时越来越长。这就如同PC产业,虽然CPU遵从摩尔定律,速度越来越快,但由于软件复杂度的提升,我们并没有感觉计算机运行速度有显著提升,反而陷入需要不断升级电脑硬件的怪圈。
云水木石
2019/08/09
1.9K0
神经网络训练中回调函数的实用教程
回调操作可以在训练的各个阶段执行,可能是在epoch之间,在处理一个batch之后,甚至在满足某个条件的情况下。回调可以利用许多创造性的方法来改进训练和性能,节省计算资源,并提供有关神经网络内部发生的事情的结论。
磐创AI
2020/09/04
1.2K0
【经验分享】如何使用keras进行多主机分布式训练
由于一般GPU的显存只有11G左右,(土豪误入),采用多主机分布式训练是非常有必要的;折腾了几天,按照谷歌的教程,终于搞清楚了,给大家梳理一下:
黄鸿波
2020/08/17
1.7K0
教程 | 从基本概念到实现,全卷积网络实现更简洁的图像识别
选自 Medium 机器之心编译 参与:蒋思源、晏奇、黄小天 众所周知,图像就是像素值的集合,而这个观点可以帮助计算机科学家和研究者们构建一个和人类大脑相似并能实现特殊功能的神经网络。有时候,这种神经
机器之心
2018/05/07
9830
教程 | 从基本概念到实现,全卷积网络实现更简洁的图像识别
如何使用keras,python和深度学习进行多GPU训练
Keras简单而优雅,类似于scikit-learn。然而,它非常强大,能够实施和训练最先进的深度神经网络。
AI算法与图像处理
2019/08/23
3.4K0
如何使用keras,python和深度学习进行多GPU训练
卷积_ResNet
刚才边写这个,别跑程序,偏偏没有选择自动保存,因此没得了,一个字也没有给我留下来,消耗了我所有的耐心。
火星娃统计
2021/11/02
3290
keras系列︱Sequential与Model模型、keras基本结构功能(一)
中文文档:http://keras-cn.readthedocs.io/en/latest/ 官方文档:https://keras.io/ 文档主要是以keras2.0。
全栈程序员站长
2022/11/03
1.8K0
实战 | 基于KerasConv1D心电图检测开源教程(附代码)
本实战内容取自笔者参加的首届中国心电智能大赛项目,初赛要求为设计一个自动识别心电图波形算法。笔者使用Keras框架设计了基于Conv1D结构的模型,并且开源了代码作为Baseline。内容包括数据预处理,模型搭建,网络训练,模型应用等,此Baseline采用最简单的一维卷积达到了88%测试准确率。有多支队伍在笔者基线代码基础上调优取得了优异成绩,顺利进入复赛。
AI科技大本营
2019/06/14
2.9K0
keras doc 10终结篇 激活函数 回调函数 正则项 约束项 预训练模型
激活函数可以通过设置单独的激活层实现,也可以在构造层对象时通过传递activation参数实现。
CreateAMind
2018/07/25
2.3K0
keras doc 10终结篇 激活函数 回调函数 正则项 约束项 预训练模型
Keras同时用多张显卡训练网络
References 官方文档:multi_gpu_model(https://keras.io/utils/#multi_gpu_model)以及Google。 误区 目前Keras是支持了多个GPU同时训练网络,非常容易,但是靠以下这个代码是不行的。 os.environ["CUDA_VISIBLE_DEVICES"] = "1,2" 当你监视GPU的使用情况(nvidia-smi -l 1)的时候会发现,尽管GPU不空闲,实质上只有一个GPU在跑,其他的就是闲置的占用状态,也就是说,如果你的电脑里面有
用户1332428
2018/03/07
1.9K0
二分类问题:基于BERT的文本分类实践!附完整代码
寄语:Bert天生适合做分类任务。文本分类有fasttext、textcnn等多种方法,但在Bert面前,就是小巫见大巫了。
Datawhale
2020/03/19
6.1K1
二分类问题:基于BERT的文本分类实践!附完整代码
Tensorflow 回调快速入门
我们都熟悉深度学习模型的训练过程。随着模型变得越来越复杂,训练时间也显着增加。因此,模型通常需要花费数小时来训练。
磐创AI
2021/10/27
1.4K0
Tensorflow 回调快速入门
如何为Keras中的深度学习模型建立Checkpoint
深度学习模式可能需要几个小时,几天甚至几周的时间来训练。 如果运行意外停止,你可能就白干了。 在这篇文章中,你将会发现在使用Keras库的Python训练过程中,如何检查你的深度学习模型。 让我们开始
AiTechYun
2018/03/02
15K0
如何为Keras中的深度学习模型建立Checkpoint
相关推荐
【Keras】Keras使用进阶
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验