张小白带你体验MindSpore 1.1的新特性:单节点缓存Cache(2)GPU环境下的Cache体验

举报
张辉 发表于 2021/02/08 00:48:56 2021/02/08
【摘要】 本文介绍了MindSpore的新特性——单节点缓存。

本文承接上一篇博客:张小白带你体验MindSpore 1.1的新特性:单节点缓存Cache(1)CPU环境下的Cache体验 https://bbs.huaweicloud.com/blogs/242306 

为什么需要使用GPU环境体验Cache呢?这也是没有办法的事情。

当时的作业是:参考MindSpore官方教程model_zoo中resnet50在cifar10数据集训练的脚本,在该训练任务中插入cache模块进行训练。

但是张小白研究了一下ResNet训练的脚本和说明文字:(代码链接:https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/resnet   ),发现仅能支持Ascend和GPU进行训练。

image.png

Ubuntu的GPU环境张小白有一套,但是拆机装机比较麻烦,张小白以前还特意写了一篇博客:张小白GPU安装MindSpore给你看(Ubuntu 18.04.5) https://bbs.huaweicloud.com/blogs/198357 成功了在笔记本上安装了 MindSpore 1.0 for Ubuntu 18.04.

所以,下面的实操都是在这篇博客的基础上将MindSpore 升级到1.1,并且完成了基于cifar10数据集的ResNet50网络的训练,而且用了Cache。

由于所有操作都是直接使用裸机安装的Ubuntu,所以不大好截图,张小白只能多用手机拍摄照片演示操作效果,可能质量未必特别好,还望读者谅解。

(一)拆机,恢复MindSpore 1.0的环境

换上当时在 张小白GPU安装MindSpore给你看(Ubuntu 18.04.5)https://bbs.huaweicloud.com/blogs/198357 里面装好mindspore 1.0的SSD硬盘。

image.png

为了保险起见,把原来的三块硬盘都拆下来了。

image.png

开机

image.png

进入熟悉的ubuntu裸机界面:

然后使用nvidia-smi看一下显卡:

image.png

说nvidia-smi已经找不到显卡了。

解决bug是张小白历来的强项,张小白就像小强那样从来没有被吓到过。

于是度娘  https://zhuanlan.zhihu.com/p/89714824

需要两个动作 sudo apt install dkms

以及 sudo dkms install -m nvidia -v 418.87.00

后面这个版本号是根据 ls /usr/src | grep nvidia 查到的。

于是:

image.png

在dkms的过程中,会进入以下图形界面:

image.png

点击OK继续

image.png

设置下SecureBoot的密码,然后等安装完毕。

image.png

过程中,按照前面的提示在相关窗口执行下Enroll MOK

image.png

image.png

image.png

image.png

按照提示reboot即可。

另外,由于出现这个问题的原因是ubuntu没有关掉自动更新,导致它开机做了更新,结果就跟nvidia显卡驱动不一致了。为了避免再出现相同的状况,需要做一下的设置:

image.png

将 (/etc/apt/apt.conf.d/10periodic)文件的1都改为0.

image.png

然后需要刷一下内核:

sudo update-initramfs -u

image.png

然后在reboot

再用nvidia-smi查看显卡:

 顺便看一下原来安装好的mindspore

image.png

果然是1.0版本。来做个简单的GPU测试:

image.png

也没有任何问题。终于一切回归到了原点。

(二)安装MindSpore 1.1版本

先用最快速的方法装好mindspore 1.1.1的GPU版本

image.png

拷贝官方整理好的脚本:(确认是GPU,X86的那种)

image.png

一次完成:

image.png

(三)启动Cache服务和做装载Cache的验证

修改/etc/profile

image.png

source /etc/profile后

执行cache_admin启动cache服务

image.png

成功启动了cache_admin.

创建session

cache_admin -g 

image.png

export SESSION_ID= 前面生成的session号。等等。

浏览器打开  http://www.cs.toronto.edu/~kriz/cifar.html 下载CIFAR-10的数据集

image.png

解压 cifar-10-binary.tar.gz 

image.png

解压完后,resnet的目录如下:

image.png

既然cache起来了,先执行下装载cache的脚本:

image.png

python mycache.out.py

image.png

好像没有任何问题(除了报了warning这种鸡毛蒜皮的小错误)。

(四)加入Cache代码

那么就来魔改resnet的代码吧。

先打开src/dataset.py,先做个备份(下面每个要改的代码最好都做个备份),然后开始加入cache部分:

image.png

src/config.py也看一下,经过跟 群里姐夫丁大大的咨询,一个昇腾910的90个epoch要跑40分钟(好像是非常大的配置——24核96G内存)

如果是GPU开90的epoch估计要跑到明天。。。

按照丁大大的建议将epoch改成10

image.png

然后修改train.py这块,主要是确定下 网络类型,数据集类型和数据集路径等等参数。

为了不用命令行参数,干脆全写死在train.py里面吧。

image.png

如上图所示:

指定 net为 resnet50

指定 dataset为 cifar10

指定 dataset_path为 cifar-10-batches-bin/

指定 device_target 为GPU.

其他的先缺省吧。

(五)训练

然后开始train。。。

python train.py

image.png

在一大堆warning之后,python开干了。

首先看下nvidia-smi

image.png

确实在适用GPU的是python的训练代码。

当然,这个时候随时注意cache的session的变化趋势:(张小白打了时间,然后再打当时的session情况 cache_admin --list_sessions)

image.png

随着时间的推移,Mem cached和Numa hit在不停的往上涨。。

image.png

直到 装载到60000条缓存记录的时候,它不再涨了。

TIPS:CIFAR-10是一个微小图像数据集,包含10种类别下的60,000张32x32大小彩**像,平均每种类别6,000张,其中5,000张为训练集,1,000张为测试集。

我们也知道,数据集这个时候应该是已经加载完毕了。后面应该都在用这块数据集在计算了吧。。

随着时间的飞逝,终于train.py有了日志:

image.png

1个epoch要1960秒左右,也就是半小时多一点。那么10个epoch需要花19600秒,也就是5.444小时左右。

终于等到了train.py执行完毕。

我们重新拍一下,看一下python train.py的执行全貌:

image.png


image.png

从上面两张图可以看出,在一批deprecated的warning之后,train.py确实走进了cache_base_op.cc,这个看来真的是跟cache在打交道,而且从 cache_admin --list_sessions的不同时期的日志

image.png

可以看出,cache从一开始不断增长到6万,到停止不变,说明cache确实读了这么多。

训练的结果如下:

image.png

 生成了2个ckpt文件,一个是resnet-5_1875.ckpt,一个是resnet-10_1875.ckpt.

(六)评估

尽管每5个epoch生成了一个checkpoint文件,但是张小白还是想把仅有的2个ckpt文件给评估下。

修改eval.py(记得先备份)

image.png

跟train.py一样,修改一下参数:

指定 net为 resnet50

指定 dataset为 cifar10

指定 dataset_path为 cifar-10-batches-bin/

指定 device_target 为GPU

其他暂时不变。

并且记住checkpoint的路径叫做 --checkpoint_path

那么,执行 python eval.py --checkpoint_path='./resnet-5_1875.ckpt'

就可以对第一个ckpt做评估了。

image.png

0.65.不高。但是想想,这才是第5个epoch啊。而且看loss,第5个epoch的时候还是0.79呢。。。

再执行 python eval.py --checkpoint_path='./resnet-10_1875.ckpt'

可以对第2个ckpt做评估了。

image.png

这就已经上升到了0.9275了。。loss也在这几轮到了0.3几。假以时日,张小白相信,会训练的非常好的。但是,非常费GPU。。。特别是费张小白的乞丐GPU。

而且再仔细看日志:在eval的时候好像也在调用 cache_base_op.cc 

不过真的不知道,到底eval的时候是不是真的动用了大杀器:cache。

总之,这样的结果也算是令张小白能够结束这段GPU的特殊旅程的吧。

(七)用完cache,删session走人

那张小白在GPU上再做个cache全套(谢幕演出吧)

cache_admin --list_sessions

cache_admin --destroy_session XXX

cache_admin --stop

image.png

总结:

从上面在MindSpore 1.1 for GPU版本的神操作可以看出,cache在训练中可以起到一定的作用。让我们回顾下前一篇博客的开头文字:https://bbs.huaweicloud.com/blogs/242306  ,其实张小白还是蛮期待能在 ModelArts上部署好cache.这样子多省钱啊~~~

(全文完,谢谢阅读)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。