【CANN训练营】Ascend 910实现LeNet网络的minist手写数据训练

举报
JeffDing 发表于 2022/07/07 11:42:51 2022/07/07
【摘要】 一、环境及准备工作CPU/GPU复现使用华为云ModelArts-CodeLab平台Ascend复现使用华为云ModelArts-开发环境-Notebook原始Lenet代码链接:https://gitee.com/lai-pengfei/LeNet 二、在CPU/GPU中运行原始代码第一步:打开CodeLab注:如果需要切换GPU资源,可以点资源选择GPU资源,可以使用1小时,1小时候需...

一、环境及准备工作

CPU/GPU复现使用华为云ModelArts-CodeLab平台
Ascend复现使用华为云ModelArts-开发环境-Notebook
原始Lenet代码链接:https://gitee.com/lai-pengfei/LeNet

二、在CPU/GPU中运行原始代码

第一步:打开CodeLab
1657162576592.png

注:如果需要切换GPU资源,可以点
1657163555864.png

资源选择GPU资源,可以使用1小时,1小时候需要手动续时

点击页面中的Terminal进入终端界面:
1657162624622.png

终端界面:
1657162647171.png

第二步:进入到work目录并git clone 相关代码

git clone https://gitee.com/lai-pengfei/LeNet

可以看到左面有git下来的代码了
1657162699591.png

第三步:切换TensorFlow运行环境

source activate /home/ma-user/anaconda3/envs/TensorFlow-1.13.1/

这里是1.13的,但是问题不大,大差不差,也可以跑和1.15差不多

第四步:进入文件夹并执行原始代码

cd cd LeNet/
python Train.py

运行中:
image.png

运行结果:
1657163606127.png

三、模型移植

环境使用华为云-开发环境Notebook

创建环境

镜像选择勾选的
1657163720689.png
规格等设置如下图:
1657163760843.png

环境及代码下载参考CPU/GPU

切换到Ascend下的TensorFlow 1.15运行环境

source activate /home/ma-user/anaconda3/envs/TensorFlow-1.15.0/

代码修改

根据文档修改原始代码中的Train.py
文档地址:https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/51RC2alpha007/moddevg/tfmigr/atlasmprtg_13_0011.html

添加引入包的代码:

from npu_bridge.npu_init import *

修改创建session并初始化资源相关代码
这一步主要在sess.run(tf.initialize_all_variables())前添加以下几行代码

config = tf.ConfigProto()
custom_op = config.graph_options.rewrite_options.custom_optimizers.add()
custom_op.name = "NpuOptimizer"
config.graph_options.rewrite_options.remapping = RewriterConfig.OFF  # 必须显式关闭
config.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF  # 必须显式关闭
sess = tf.Session(config=config)

这个Demo还需要改一下第一行相关库代码
原始代码:

import tensorflow.examples.tutorials.mnist.input_data as input_data

修改为:

from tensorflow.examples.tutorials.mnist import input_data

运行代码

python Train.py

1657164296238.png

看到W tf_adapt差不多字样就说明调用到了NPU资源

运行过程:
1657164355562.png

可以开启另一个Terminal查看是否真的使用了Ascend,在新的Terminal中使用如下命令:

npu-smi info

1657164405042.png

运行结果:
1657165276744.png

将运行结果保存到obs

需要将modelarts的运行结果保存到obs中,我们需要引入mox库方便操作obs文件
代码如下:

import moxing as mox

拷贝文件的代码如下:

mox.file.copy_parallel(./checkpoint,你的obs地址obs://开头或者s3://开头)

mox.file.copy_parallel(源路径,目标路径)
这个代码可以从obs拷贝文件到环境,也可以从环境拷文件到obs

这个demo中将这行代码加载main()的最后即可,代码位置一般选择运行执行完毕并且已经生产完需要拷贝的文件的后面即可。

拷贝过去后的ckpt文件
image.png

总结

到这里整个简单的TensorFlow移植Ascend平台运行的代码修改就完成了,其实整个过程算是比较简单的,会者不难,不会可能会觉得很难。模型迁移的话主要难点在可能存在有些算子不支持以及精度性能优化部分。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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