作业一
实战场景:
下载基于Caffe ResNet-50网络实现图片分类(仅推理)样例应用的源码,并参考Readme成功编译、运行应用,体验基础推理过程。
评分细则:
使用atc工具转换模型,提供转换命令及转换成功的截图。
使用转换后的模型,重新编译运行样例应用(基于Caffe ResNet-50网络实现图片分类(仅推理)),提交成功编译运行应用的截图。
总结实战过程中遇到的问题及解决方法,并提交总结。
优化样例应用,包括优化代码逻辑、优化代码注释、补充代码注释等,提交优化后的源码、优化思路说明、优化位置说明。
评分一和评分二:
1.连接华为云服务器并克隆下载samples代码库
git clone https://gitee.com/ascend/samples.git
2.切换用户及目录(因为cann装在该用户下)
cd /home/
su - HwHiAiUser
source ~/Ascend/ascend-toolkit/set_env.sh
cd samples/cplusplus/level2_simple_inference/1_classification/
resnet50_imagenet_classification
3.切换到/caffe_model目录下使用wget命令会下载到当前目录
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.prototxt
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.caffemodel
4.转换模型
atc --model=caffe_model/resnet50.prototxt --weight=caffe_model/resnet50.caffemodel --framework=0 --output=model/resnet50 --soc_version=Ascend310 --input_format=NCHW --input_fp16_nodes=data --output_type=FP32 --out_nodes=prob:0
5.下载图片并转换为bin文件
请从以下链接获取该样例的输入图片,并以运行用户将获取的文件上传至开发环境的“样例目录/data“目录下。如果目录不存在,需自行创建。
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog2_1024_683.jpg
6.编译运行
6.1请先进入“cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification”样例目录
6.2设置环境变量,配置程序编译依赖的头文件与库文件路径。
当开发环境与运行环境的操作系统架构相同时,配置示例如下所示:
export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
6.3切换到样例目录,创建目录用于存放编译文件,例如,本文中,创建的目录为“build/intermediates/host“。
mkdir -p build/intermediates/host
6.4切换到“build/intermediates/host“目录,执行如下命令生成编译文件。
当开发环境与运行环境操作系统架构相同时,执行如下命令编译。
cd build/intermediates/host
cmake ../../../src -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUE
6.5执行如下命令,生成的可执行文件main在“样例目录/out“目录下。
make
6.6切换到可执行文件main所在的目录,例如“$HOME/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification/out”,运行可执行文件。
./main
遇到的问题:
执行环境设置时,报错
报错原因:
查看Ubuntu系统/bin/sh的实际链接,发现使用的是dash,而source xxx.sh或者. xxx.sh命令需要使用bash解析器,因此出现报错。
解决办法:
Ubuntu下shell执行source命令报source: not found问题处理
作业二
基于Caffe ResNet-50网络实现图片分类(仅推理)样例,更换为ResNet-101分类模型。更换同类模型时,由于模型的输入、输出相似,所以源码基本可以复用,只需更换模型即可。
定制点说明如下
下载ResNet-101模型(resnet101_tf.pb),放到resnet50_imagenet_classification样例的caffe_model目录(表示原始模型的存放路径),执行以下命令转换模型,在output参数处指定的model目录下获取resnet101_tf.om:
atc --model=caffe_model/resnet101_tf.pb --framework=3 --output=model/resnet101_tf --output_type=FP32 --soc_version=Ascend310 --input_shape="input:1,224,224,3" --log=info
生成测试数据
进入resnet50_imagenet_classification样例的script目录,修改transferPic.py脚本中的如下内容,将float16改为float32:
img = img.astype(“float16”)修改后:img = img.astype(“float32”)
切换到“resnet50_imagenet_classification样例目录/data“目录下,执行transferPic.py脚本,将*.jpg转换为*.bin,同时将图片从1024683的分辨率缩放为224224。在“resnet50_imagenet_classification样例目录/data“目录下生成2个*.bin测试文件。
python3 …/script/transferPic.py
调用AscendCL接口(例如aclmdlLoadFromFileWithMem接口)加载ResNet-101模型:
在src/sample_process.cpp文件中定制代码。
参考Caffe ResNet-50网络实现图片分类(仅推理)样例的readme,重新编译并运行。
评分细则:
使用atc工具转换模型,提供转换命令及转换成功的截图。(5分)
使用转换后的模型、定制后的代码,重新编译运行应用,提交成功编译运行应用的截图。(10分)
总结实战过程中遇到的问题及解决方法,并提交总结。(5分)
评分一:
同作业一中,下载好模型后,执行上述ATC模型转换命令即可
评分二:
修改sample_process.cpp中om模型的位置
作业三
使用Pytorch实现LeNet网络的minist手写数字识别。
硬件平台不限,可以基于windows或者linux系统,尽量给出整个过程的截图,并在最后给出loss或者accuracy运行结果,提供打印loss和accuracy日志,给出截图。参考链接Github:https://github.com/allegrofb/LeNet.git
**答:**根据链接中的文件,设置好训练参数等,运行训练脚本即可
作业四
采用课程中学习到的手工或者自动迁移方式,将上述脚本迁移到昇腾npu上,单机单卡,提供迁移脚本,突出关键点并截图
**答:**自动迁移,仅PyTorch 1.8.1版本及以上使用,自动迁移方式较简单,只需在训练脚本中添加引入几行代码。
import torch_npu
from torch_npu.contrib import transfer_to_npu
作业五
提供使用ddp迁移的单机8卡的训练脚本,无需运行,提供修改后的脚本,并突出关键点