基于昇腾CANN的推理应用开发--高清图像修复(Python)的弹性云服务器(ECS)实现 丨【我的华为云体验之旅】
先来介绍下,这是CANN体验官第三期活动,那么有同学可能要问了,什么是CANN呢?先来张官方的图展示:
如果还是不理解,理解简单理解为是华为为昇腾处理器打造的“CUDA”,最后给出活动链接:https://bbs.huaweicloud.cn/forum/thread-164772-1-1.html
说明:
- 一定要做云资源申请:点击链接:https://www.wjx.cn/vj/mbknBwc.aspx 可进行资源申请登记,审核后将会在2-3个工作日进行资源发放。
- 最好先了解下活动任务一的基于昇腾CANN的推理应用开发--高清图像修复(Python)实验:https://www.hiascend.com/zh/college/onlineExperiment/detail/664601
- 原始模型的测试代码:https://github.com/Atlas200dk/sample-imageinpainting-HiFill/blob/master/GPU_CPU/test.py
下面开始了,还记得在任务一时,基于昇腾CANN的推理应用开发--高清图像修复(Python)实验吗? 实验链接上面已给出。
这次需要在自己的环境上真实复现上述实验,通过实验知道,就是部署模型到Ascend 310上,那如果没有Ascend 310的设备呢?那申请ECS云资源券就起到作用了,可以来购买弹性云服务器来用,开源代码在实验中也给了链接,接下来分享一下流程吧。
一、搭建自己的环境
申请到代金券后,先购买弹性云服务器,搞个Ascend 310,购买的流程比较简单,前人也总结了图文并茂的介绍,我就不赘述了,这里附上前人的购买介绍链接:
https://zhuanlan.zhihu.com/p/432673114
需要注意的是,如果你是第一次购买,登录后可能发现无法ping通,即无法访问外网,这大概率时因为在配置弹性公网IP的时候出方向规则没配置,可以参照如下方法配置,如果不行,可以直接提工单。
https://bbs.huaweicloud.cn/suggestion/detail/112907
二、配置环境
其实弹性云服务器默认配置环境(就是CANN)了,但是环境版本太老了,不支持本案例,在模型转换阶段就报错了,所以要安装新环境,直接上最新的吧。那这就遇到问题了,没有文档介绍如何配置,弹性云服务器的文档仅做了介绍,让到昇腾开发者社区,开发者社区的文档有点乱,搞了半天也不行,这一点体验不好,这文档有点差劲。问题不大,找个在线课程看看吧,就是昇腾CANN系列教程-环境部署(计算加速型ECS)
课程链接:https://education.huaweicloud.cn/courses/course-v1:HuaweiX+CBUCNXA025+Self-paced/about
但遗憾的是,这个课程用到的版本太老了,不过没关系,只需要将提到的三个.run文件换成对应的新版本就行了,流程还是那样的。整个流程有点复杂,简化了一下,简化后的流程如下:
注意,讲道理,要区分root和HwHiAiUser用户安装,但这太麻烦了,安装环境还要来回切换用户,这里直接选择全root,即本文所有操作都在root下执行,所以注意点命令,确认下再执行,以免造成无可挽回的损失。
1. 下载安装包
# 下载固件和驱动
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/turing/resourcecenter/Software/AtlasI/A300-3010%201.0.12/A300-3010-npu-driver_21.0.3.1_linux-x86_64.run
# 下载X86平台推理引擎软件包,适用于命令行方式安装场景
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/5.0.4.alpha002/Ascend-cann-nnrt_5.0.4.alpha002_linux-x86_64.run
# X86平台开发套件软件包,适用于命令行方式安装场景
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/5.0.4.alpha002/Ascend-cann-toolkit_5.0.4.alpha002_linux-x86_64.run
# 授予权限
chmod 777 A300-3010-npu-driver_21.0.3.1_linux-x86_64.run
chmod 777 Ascend-cann-nnrt_5.0.4.alpha002_linux-x86_64.run
chmod 777 Ascend-cann-toolkit_5.0.4.alpha002_linux-x86_64.run
2. 执行安装
注意,安装之前最好给系统和pip都换成国内源,因为要安装一些依赖(在线课程中有介绍),换成国内源比较快,换源方法可以直接百度,在前面提到的在线课程中也有介绍。
./A300-3010-npu-driver_21.0.3.1_linux-x86_64.run --install
要重启以下哦,
reboot
之后注意要配置下环境变量
vim ~/.bashrc
找到如下三个环境变量,修改为如下:
export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:/usr/local/Ascend/nnrt/latest/lib64:${LD_LIBRARY_PATH}
export PYTHONPATH=/usr/local/Ascend/nnrt/latest/python/site-packages:${PYTHONPATH}
export ASCEND_OPP_PATH=/usr/local/Ascend/nnrt/latest/opp:
如图所示:
接着安装:
./Ascend-cann-nnrt_5.0.4.alpha002_linux-x86_64.run --install
./Ascend-cann-toolkit_5.0.4.alpha002_linux-x86_64.run --install
至此,应该就安装好了,大体是这样,具体请参看上面的在线课程,这三个安装包的版本和视频中不一样,但是其他的基本一样,按照流程搞就行了,话说这个ECS就不能直接给个最新配置的镜像吗?好像昇腾开发者社区提供了镜像,但是试了下,没成功,有点遗憾。
三、运行程序
因为实验中使用了atlasutil,这是昇腾官方团队自行封装的一个库,应该是为了方便Python开发,但是我看了下,这个库仅供使用,不覆盖所有场景,还是有限制的,快速验证还是可以用的,ECS也能用。不过,配置安装过程复杂。这里不用这个了,直接上官方原始的案例就行了。
案例链接:https://gitee.com/ascend/samples/tree/master/python/level2_simple_inference/6_other/imageinpainting_hifill
接下来就开始吧!
0. 下载源码
git clone https://gitee.com/ascend/samples.git
# 进入到本案例文件夹
cd samples/python/level2_simple_inference/6_other/imageinpainting_hifill
1. 模型转换
# 获取此应用中所需要的单算子Json文件和om模型文件。
wget https://c7xcode.obs.myhuaweicloud.com/models/imageinpainting_hifill/matmul_27648.json --no-check-certificate
wget https://c7xcode.obs.myhuaweicloud.com/models/imageinpainting_hifill/hifill.pb --no-check-certificate
运行结果如图所示:
开始模型转换了!
atc --singleop=./matmul_27648.json --output=./0_BatchMatMul_0_0_1_1_1024_1024_0_0_1_1_1024_27648_0_0_1_1_1024_27648 --soc_version=Ascend310
atc --output_type=FP32 --input_shape="img:1,512,512,3;mask:1,512,512,1" --input_format=NHWC --output="./hifill" --soc_version=Ascend310 --framework=3 --save_original_model=false --model="./hifill.pb"
模型转换时间有点长,主要是后一个模型转换时间长,执行以下命令将转换好的模型复制到样例中model文件夹中。
cp ./hifill.om ./model
cp ./0_BatchMatMul_0_0_1_1_1024_1024_0_0_1_1_1024_27648_0_0_1_1_1024_27648/*.om ./model
获取样例需要的测试图片。
cd data
wget https://c7xcode.obs.myhuaweicloud.com/models/imageinpainting_hifill/data/test.jpg
# 退出data文件夹
cd ..
cd mask
wget https://c7xcode.obs.myhuaweicloud.com/models/imageinpainting_hifill/mask/test.jpg
# 退出maks文件夹
cd ..
2. 运行程序
cd src
python3 main.py
如果没有意外,你会看到如下内容:
可以看到,处理还是挺快的:
运行完成后,会在out目录下生成带推理结果的jpg图片,来看看最终效果吧:
这是原图:
这是mask:
可以看到原始图片左侧的两个人和下方的鞋“消失”了,效果还是不错的啊。
到这里,基本就完成了,还是很有意思的。不过也有几点说一下:
1. 主要是ECS环境配置
环境配置对于第一次接触的人,不太友好,比较麻烦。主要有两点:
(1)默认没配置出规则。如果是第一次使用,第一次配置公网IP,登录后就会发现ping不通,这就麻烦了,而且文档中关于该问题的解决,没有介绍出规则问题,还是提了工单解决的。
(2)环境配置没文档。也不能说没文档,就是文档的流程不行,也不好找,还有各种跳转下载链接。
这个很难评判,会者不难,难者不会。
2. 本案例效果可以提升
在线体验和实验结果其实都不错,效果很好,但试了下自己的图片,效果就一般了,鲁棒性不够。
3. 单算子加速还是挺强的
实验中有提到应用开发过程中使用了大矩阵乘法,定义Matmul 单算子json文件结构,将其转换为单算子模型。这一点就很不错,Matmul这个算子做的矩阵乘,计算比较复杂,Ascend的支持其实不太好,特别是Ascend 910的时候,耗时比较严重,这里转为单算子模型就好多了,利于性能提升,也更灵活,部署嘛,就是最大程度发挥或者说压榨硬件算力。
4. 完整生态链条,如果是能训练到部署完整流程就更好了,Ascend 910训练,Ascend 310部署推理,甚至落地应用,这样也可以尽量不免部署是算子不支持的问题,再加上MindSpore就更完美了,应该是能最大程度发挥硬件算力了,毕竟自研,应该是软硬件高度适配。
5. 与同是部署用的NVIDIA Jetson系列产品对比,需要做模型转换,这是因为一般模型都是用GPU训练的,部署到Ascend 310需要转为专用的om模型,但这涉及到算子支持度和框架支持问题,目前来说,昇腾这方面还是有些不足的,一方面是算子支持度可以更好,因为会遇到某些算子不支持的问题;另一个方面,目前不支持PyTorch模型的直接转换。而这些问题,Jetson产品基本不会遇到,因为该产品与训练用的GPU为同一硬件基础。昇腾生态建设需要不断发展。
需要注意的是,ECS服务器是消耗Modelarts代金券的,即使弹性云服务器ECS关机后仍会计费,如果长时间不用了记得 删除它 删除它 删除它。
【我的华为云体验之旅】有奖征文火热进行中:https://bbs.huaweicloud.cn/blogs/306271
- 点赞
- 收藏
- 关注作者
评论(0)