基于昇腾CANN的推理应用开发--高清图像修复(Python)的弹性云服务器(ECS)实现 丨【我的华为云体验之旅】

Tianyi_Li 发表于 2021/12/05 13:11:23 2021/12/05
【摘要】 活动链接:https://bbs.huaweicloud.com/forum/thread-164772-1-1.html还记得在任务一时,基于昇腾CANN的推理应用开发--高清图像修复(Python)实验吗? 附上实验链接:https://www.hiascend.com/zh/college/onlineExperiment/detail/664601这次需要在自己的环境上真实复现上述实...

先来介绍下,这是CANN体验官第三期活动,那么有同学可能要问了,什么是CANN呢?先来张官方的图展示:

如果还是不理解,理解简单理解为是华为为昇腾处理器打造的“CUDA”,最后给出活动链接:https://bbs.huaweicloud.com/forum/thread-164772-1-1.html

说明:

  1.   一定要做云资源申请:点击链接:https://www.wjx.cn/vj/mbknBwc.aspx 可进行资源申请登记,审核后将会在2-3个工作日进行资源发放。
  2.   最好先了解下活动任务一的基于昇腾CANN的推理应用开发--高清图像修复(Python)实验https://www.hiascend.com/zh/college/onlineExperiment/detail/664601
  3.   原始模型的测试代码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.com/suggestion/detail/112907

二、配置环境

其实弹性云服务器默认配置环境(就是CANN)了,但是环境版本太老了,不支持本案例,在模型转换阶段就报错了,所以要安装新环境,直接上最新的吧。那这就遇到问题了,没有文档介绍如何配置,弹性云服务器的文档仅做了介绍,让到昇腾开发者社区,开发者社区的文档有点乱,搞了半天也不行,这一点体验不好,这文档有点差劲。问题不大,找个在线课程看看吧,就是昇腾CANN系列教程-环境部署(计算加速型ECS

课程链接:https://education.huaweicloud.com/courses/course-v1:HuaweiX+CBUCNXA025+Self-paced/about

但遗憾的是,这个课程用到的版本太老了,不过没关系,只需要将提到的三个.run文件换成对应的新版本就行了,流程还是那样的。整个流程有点复杂,简化了一下,简化后的流程如下:

注意,讲道理,要区分rootHwHiAiUser用户安装,但这太麻烦了,安装环境还要来回切换用户,这里直接选择全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为同一硬件基础。昇腾生态建设需要不断发展。


 :exclamation: :exclamation: :exclamation:需要注意的是,ECS服务器是消耗Modelarts代金券的,即使弹性云服务器ECS关机后仍会计费,如果长时间不用了记得 删除它 删除它 删除它



【我的华为云体验之旅】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/306271

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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