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

2023-11-05 16:50

本文主要是介绍华为CANN训练营笔记[2]——环境搭建与样例试运行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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]——环境搭建与样例试运行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/351190

相关文章

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

高并发环境中保持幂等性

在高并发环境中保持幂等性是一项重要的挑战。幂等性指的是无论操作执行多少次,其效果都是相同的。确保操作的幂等性可以避免重复执行带来的副作用。以下是一些保持幂等性的常用方法: 唯一标识符: 请求唯一标识:在每次请求中引入唯一标识符(如 UUID 或者生成的唯一 ID),在处理请求时,系统可以检查这个标识符是否已经处理过,如果是,则忽略重复请求。幂等键(Idempotency Key):客户端在每次

pico2 开发环境搭建-基于ubuntu

pico2 开发环境搭建-基于ubuntu 安装编译工具链下载sdk 和example编译example 安装编译工具链 sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 注意cmake的版本,需要在3.17 以上 下载sdk 和ex

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用