2.2 AI应用快速开发入门

2.2.1 基本概念

  • HOST: 指与Device连接的X86服务器、ARM服务器,会利用Device提供的NN计算能力完成业务
  • Device:Device指安装了昇腾AI处理器的硬件设备,利用PCIe接口与Host侧连接,提供NN计算能力
  • 开发环境、运行环境:开发环境指编译开发代码的环境,运行环境指运行算子、推理或训练等程序的环境,运行环境上必须带昇腾AI处理器。登录对应的环境,执行"uname -a"命令查询其操作系统的架构。

2.2.2 应用总体执行流程

2.2.3 部署与运行演示

获取应用源码 -> 获取模型和测试图片 -> 模型转换 -> 编译源码 -> 应用

从sample仓下载模型

1. XShell连接

名称随意,协议SSH,主机填公网ip,端口22,用户身份验证->用户名为root,填写相应密码。SSH->隧道->添加(方向Dynamic, 源主机localhost)

2. Xftp连接

主机(localhost) -> 选择刚才的代理服务器 -> 使用身份验证代理

3. 配置环境

切换到root用户

  • 安装toolkit
    . /usr/local/Ascend/ascend-toolkit/set_env.sh
  • 环境变量
    export PATH=/usr/local/python3.7.5/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH

上述环境变量只在当前窗口生效,用户可以将上述命令写入~/.bashrc文件,使其永久生效,方法如下:
以安装用户在任意目录下执行vi ~/.bashrc,在该文件最后添加上述内容。
执行:wq!命令保存文件并退出。
执行source ~/.bashrc使环境变量生效。

4. 转化模型

clone gitee下的 samples/ cplusplus / level2_simple_inference / 1_classification / resnet50_firstapp
cd至该目录
下载两个model链接放置在model文件夹下, 下载图片放置在data文件夹下

执行atc --model=model/resnet50.prototxt --weight=model/resnet50.caffemodel --framework=0 --output=model/resnet50 --soc_version=Ascend310转换模型为.om模型

5. 编译
  • 给sample_build.sh执行权限:chmod +x sample_build.sh

  • 为sample_build.sh设置环境变量,使用view sample_build.sh可以看到 该文件需要APP_SOURCE_PATH-DCMAKE_CXX_COMPILER两个环境变量。先后执行
    export APP_SOURCE_PATH=/root/resnet50_firstapp/
    export DDK_PATH=/home/HwHiAiUser/Ascend/ascend-toolkit/latest/ 查找Acl头文件
    export NPU_HOST_LIB=$DDK_PATH/acllib/lib64/stub/ 查找Acl库文件

然后可以执行样例的编译脚本 ./sample_build.sh

6. 运行

在运行之前需要安装pillow库,否则结果会不正确。因为pillow直接下载会特别慢,需要配置镜像源

  • 配置镜像源
    转到root目录下, mkdir ~/.pip cd ~/.pip
    使用vi打开pip.conf vi pip.conf
    写入
[global]
#以华为源为例,请根据实际情况进行替换。
index-url = https://mirrors.huaweicloud.com/repository/pypi/simple
trusted-host = mirrors.huaweicloud.com
timeout = 120


然后pip3 install pillow
最后在项目目录下./sample_run.sh,得到结果

2.3 应用开发初级课程

开发流程

2.3.1 目录结构

data

.jpg

inc

model_process.h:模型处理相关函数的头文件
sample_process.h:资源初始化/销毁相关函数的头文件
utils.h:声明公共函数的头文件(如文件读取函数)

script

transferPc.py 将.jpg转换为.bin

src

acl.json:系统初始化的配置文件
CMakeLists.txt:编译脚本
main.cpp:实现图片分类功能
model_process.cpp:模型处理相关函数的实现文件
sample_process.cpp:资源初始化/资源销毁的实现文件
utils.cpp:公共函数的实现文件

.project :工程信息文件,包括工程类型、工程描述、运行目标设备等
CMakeLists.txt:编译脚本。调用src目录下的CMakeLists文件

2.3.2 准备模型和图片

和resnet50_firstapp一样,需要下载两个model文件
每次转换模型(执行atc命令)前都需要 . /usr/local/Ascend/ascend-toolkit/set_env.sh
然后转换模型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

随后生成测试图片,存放着data目录下,并执行scripts/tranferPic.py将图片转换为.bin,并调整为模型需要的分辨率。

scripts/tranferPic.py源码中,列出图片的命令为 os.listdir('./'),意味着需要进到data目录下执行python3 ../script/transferPic.py,否则会查找不到图片

atc命令的各个参数
  • –model:原始模型文件路径
  • –weight:权重文件路径
  • –framework:原始框架。0:表示Caffe;1:表示MindSpore;3:表示TensorFlow;5:表示ONNX。
  • –soc_version:昇腾AI处理器版本。
  • –input_format:输入数据的Format
  • –input_fp16_nodes:只当输入数据类型为FP16的输入节点名称
  • –output_type和–out_nodes:两个参数配合使用,指定prob节点的第一个输出的数据类型为float32。
  • –output:生成的model.om默认存放在/model目录下。

2.3.3 编译运行

1. 设置环境变量

配置程序编译依赖的头文件库文件/路径
编译脚本会根据**{DDK_PATH}环境变量值/acllib/include/acl”目录查找编译依赖的头文件,根据{NPU_HOST_LIB}**环境变量指向的目录查找编译依赖的库文件。
我在~/.bashrc中添加了两行

2. 创建目录

创建目录用于存放编译文件,例如,本文中,创建的目录为“build/intermediates/host“。
mkdir -p build/intermediates/host -p 命令表示递归创建目录

3. 生成编译文件

切换到host目录下,执行cmake ../../../src -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUE

  • …/…/…/src:表示CMakeLists.txt文件所在路径
  • DCMAKE_SKIP_RPATH设置为TRUE,代表不会将rpath信息(即NPU_HOST_LIB配置的路径)添加到编译生成的可执行文件中去,可执行文件运行时会自动搜索实际设置的LD_LIBRARY_PATH中的动态链接库


执行make,在/out目录下生成了可执行的main文件

2.3.4 运行应用

在运行环境和开发环境在同一台服务器时,可在out目录下直接执行./main,否则要以运行用户将开发环境的样例目录及目录下的文件上传到运行环境,然后以运行用户登录运行环境,再 chmod +x main赋予执行权限

  • 运行结果

可以看到其中
初始化AscendCL,申请运行管理资源(context,stream,device)

加载模型

运行模型

卸载模型

释放运行管理资源。去初始化AscendCL

2.4 应用开发进阶课程

  1. 掌握典型场景下图像/视频数据处理的接口调用流程,编排该功能的代码。
  2. 掌握单算子调用的接口调用流程,编排该功能的代码。

2.4.1 图像/视频数据处理

sample目录为vpc_resnet50_imagenet_classification
在本样例中,主要实现

  1. 将jpg图片解码,得到YUV420SP格式图片,在将YUV420SP格式图片转换为224×224的分辨率
  2. 加载离线om模型,对图片进行推理,分别得到推理结果,再对推理结果进行处理,输出最大置信度的类别标识
  3. 转换模型时,需配置色域转换参数(图片格式转换),用于将YUV420SP转换为RGB,以满足模型输入需要

YUV也是一种颜色的编码方式

1. 目录结构

data

.jpg

inc

model_process.h:
sample_process.h:
utils.h:
dvpp_h:数据预处理相关函数的文件
singleOp_process.h:单算子执行相关函数的头文件

src

acl.json
CMakeLists.txt
main.cpp
model_process.cpp
sample_process.cpp
singleOp_process.cpp:单算子执行相关函数的实现文件
utils.cpp

.project :工程信息文件,包括工程类型、工程描述、运行目标设备等
CMakeLists.txt:编译脚本。调用src目录下的CMakeLists文件

caffe_model

aipp.cfg:带色域转换参数的配置文件,模型转换时使用

out

op_models

op_list.json:Cast算子和ArgMaxD算子的算子描述信息

.project
CMakeLists.txt

2. 准备模型
  1. 转换模型
    atc --model=caffe_model/resnet50.prototxt --weight=caffe_model/resnet50.caffemodel --framework=0 --soc_version=Ascend310 --insert_op_conf=caffe_model/aipp.cfg --output=model/resnet50_aipp ,注意转换前先set_env
    模型参数
  • –insert_op_conf:插入AIPP(AI Preprocessing)算子的配置文件路径,用于完成在AI Core的图像预处理,包括改变图像尺寸,色域转换(转换图像格式)、减均值/乘系数(改变图像像素)
3. 单算子准备

将Cast和ArgMaxD两个算子的算子描述信息(.json文件)编译成适配昇腾AI处理器的离线模型(.om文件),用于运行算子时使用(将json转为om

atc --singleop=out/op_models/op_list.json --soc_version=Ascend310 --output=out/op_models
模型参数

  • singleop:单算子定义文件(json)

算子信息文件(json)

# Cast算子:将推理结果的数据类型从float32转为float16
[
{"op": "Cast","input_desc": [{"format": "ND","shape": [1000],"type": "float"}],"output_desc": [{"format": "ND","shape": [1000],"type": "float16"}],"attr" : [{"name": "truncate","type": "bool","value": false},{"name": "dst_type","type": "int","value": 1}]
},
# ArgMaxD算子,从推理结果中查找最大置信度的类别标签
{"op": "ArgMaxD","input_desc": [{"format": "ND","shape": [1000],"type": "float16"}],"output_desc": [{"format": "ND","shape": [1],"type": "int32"}],"attr": [{"name": "dimension","type": "int","value": 0}]
}
]
4. 编译运行

mkdir -p build/intermediates/host
cd build/intermediates/host
cmake ../../../src -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUE
make
./main

2.5 应用案例学习

2.5.1 AscendCL和AclLite

ACL封装底层昇腾计算服务接口(见2.1.2——1),ACLlie是对ACL应用开发接口部分能力的封装

代码对比(资源管理模块)

华为CANN训练营笔记[2]——环境搭建与样例试运行相关推荐

  1. RN开发(1)__环境搭建与样例

    目录 前言 正文 环境搭建 样例实现 问题整理(补充中) 相关资源链接 小结 Tip:使用"Ctrl+F",在搜索框中输入问题 前言 先要了解几个相关的词汇Node.js,Reac ...

  2. 极智开发 | 华为云ECS本地开发环境搭建

      欢迎关注我的公众号 [极智视界],获取我的更多笔记分享   大家好,我是极智视界,本文介绍一下 华为云ECS本地开发环境搭建.   云 上的 AI 应用部署,一定是 AI 应用部署的重要分支.云( ...

  3. 深度学习(二)theano学习笔记(1)环境搭建

    theano学习笔记(1)环境搭建 原文地址:http://blog.csdn.net/hjimce/article/details/46654229 作者:hjimce 搭建theano实属不易,因 ...

  4. Django 笔记1 -- 环境搭建

    Django 笔记1 – 环境搭建 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Djang ...

  5. Go学习笔记_环境搭建

    Go学习笔记_环境搭建 Go背景知识 go的特点(官网): Build fast, reliable, and efficient software at scale- Go is an open s ...

  6. 华为海思芯片SDK----- LINUX环境搭建

    华为海思芯片SDK----- LINUX环境搭建 一.安装交叉编译器:hcc_riscv32.tar.gz 解压压缩包:tar zxvf hcc_riscv32.tar.gz 新建一个文件夹:mkdi ...

  7. Struts2→MCV、环境搭建第一个样例、工作原理、核心文件、XML中常用元素、通配符、action后缀、action接收参数、result、标签

    官网 https://struts.apache.org/ 历史包 https://people.apache.org/builds/struts/ MVC 环境搭建第一个样例 工作原理 核心文件 配 ...

  8. 【Flask框架】一. Flask框架初体验(配置环境 + 简单demo样例)

    文章目录 一. Flask框架初体验(配置环境 + 简单demo样例) 虚拟环境 新建项目 将Pycharm改为FLASK_DEBUG模式 修改FLASK_DEBUG模式的步骤 配置文件 简单用法 U ...

  9. 华为云桌面客户端_华为云服务器购买及环境搭建简述

    一.背景 毕设的一部分是做一个微信小程序,需要购买服务器以提供公网ip.刚好刷牛客看到牛客网和华为云合作推出的超级福利活动,仅需9元即可享受一年的2G内存服务器的使用权,约等于白送有木有!!! 没有丝 ...

  10. Django学习笔记 开发环境搭建

    为什么使用django? 1.支持快速开发:用python开发:数据库ORM系统,并不需要我们手动地构造SQL语句,而是用python的对象访问数据库,能够提升开发效率. 2.大量内置应用:后台管理系 ...

最新文章

  1. 简述神经网络的训练过程?
  2. class-5 If语句
  3. 为什么要把CV_8UC3(Vec3b)无符号整型转换成CV_32F(Vec3F)32位浮点数据类型?(在高精度下处理)
  4. mysql 多个库一起导出_MYSQL 导出多个库
  5. [Flex]Flex 3.0 and Adobe AIR 1.0正式版发布!
  6. iOS 应用启动慢的原因找到了!
  7. Transformer、BERT等模型学习笔记
  8. [Linux实用工具]Linux监控工具munin的展示(Nginx)
  9. mysql拼接两字段查询
  10. Java 分页工具类
  11. python酒店管理系统案例
  12. linux dd安装win2003,DD安装win2003,2008系统
  13. tensorflow中gpu和cpu切换
  14. 用Windows电脑看epub小说,哪些阅读器软件更好用?
  15. linkerd1.6 local安装方式文档
  16. 大学女生兼职适合做的工作有哪些?这些总有一样适合你
  17. 鼎信诺虚拟服务器导数,鼎信诺审计前端取数讲解.ppt
  18. Git 报错:The ECDSA host key for gitlab.xx.net has changed, and the key for the corresponding.......
  19. Package javax.naming
  20. 大学里可以考的证书有哪些?

热门文章

  1. AltiumDesigner画图不求人15 多条线路同时走线方法
  2. Excel入门简单,想要进阶实属不易?推荐这个数据分析工具
  3. 【人工智能Prolog】Prolog data object AtomsVariablesStructure
  4. 【pip install selenium】pip ValueError: check_hostname requires server_hostname
  5. 职场燃料-正确的学习方法
  6. OpenWrt 在没有80\443端口、不能dns验证的情况下为自己的域名申请免费ssl证书
  7. Ubuntu解除输入密码以解锁密钥环”
  8. 案例:减肥计划(if版与switch版)
  9. python变量的默认值是什么_Python函数参数默认值的陷阱和原理深究
  10. win10怎么解除网速限制