Skip to main content

准备环境

准备环境

您需要部署开发环境和运行环境,请参见《CANN 软件安装指南》。

  • 本文以如下安装路径示例来说明操作步骤,实际操作前,请务必获取这些组件的实际安装路径,以便后续操作时使用:

    • HwHiAiUser用户安装Driver组件,Driver组件的默认安装路径为“${HOME}/Ascend”,在该路径下安装成功后,包括“driver”目录。
    • HwHiAiUser用户安装cann-toolkit软件包,cann-toolkit软件包的默认安装路径为“${HOME}/Ascend”,在该路径下安装成功后,包括“ascend-toolkit”目录。
    • HwHiAiUser用户安装cann-nnrt软件包,cann-nnrt软件包的默认安装路径为“${HOME}/Ascend”,在该路径下安装成功后,包括“nnrt”目录。
  • pyACL在cann-toolkit软件包、cann-nnrt软件包中均有集成,用户可根据使用场景自行选择其中之一进行安装。cann-toolkit软件包为开发套件包,适用于开发环境。cann-nnrt软件包为离线推理引擎包

  • 本文以HwHiAiUser用户作为开发环境、运行环境的运行用户为例来说明操作步骤,实际操作前,请务必获取开发环境、运行环境的运行用户,以便后续操作时使用。

  • 用户使用export命令在当前终端窗口下声明环境变量,关闭Shell终端或切换用户时环境变量失效。

父主题: 环境准备

环境变量配置

在安装完CANN软件包之后,请务必自行配置pyACL相关的环境变量,否则,将无法正常“import acl”

  • 若环境中安装了cann-toolkit软件包:

    # 以root用户安装toolkit包。
    . /usr/local/Ascend/ascend-toolkit/set_env.sh
    # 以非root用户安装toolkit包。
    . ${HOME}/Ascend/ascend-toolkit/set_env.sh
  • 若环境中安装了cann-nnrt软件包:

    # 以root用户安装nnrt包。
    . /usr/local/Ascend/nnrt/set_env.sh
    # 以非root用户安装nnrt包。
    . ${HOME}/Ascend/nnrt/set_env.sh

父主题: 环境准备

样例介绍

获取样例

单击Gitee,进入Ascend samples开源仓,详细参见README中的“版本说明”下载配套版本的sample包,从“python/level1_single_api/1_acl/4_blas/acl_operator_add”目录下获取acl_operator_add样例。

功能描述

此样例实现了对自定义算子的功能验证,通过将自定义算子转换为单算子离线模型文件,然后通过ACL加载单算子模型文件进行运行。

该实现矩阵-矩阵相加的运算示例为:C = A + B,其中A、B、C都是8*16的矩阵,类型为int32,矩阵加的结果是一个8 * 16的矩阵。

主要接口

主要接口如表1所示。

表1 主要接口介绍

功能

对应ACL模块

ACL 接口函数

功能说明

资源初始化

初始化

acl.init

初始化ACL配置。

Device管理

acl.rt.set_device

指定用于运算的Device。

Context管理

acl.rt.create_context

创建Context。

Stream管理

acl.rt.create_stream

创建Stream。

算子加载与执行

acl.op.set_model_dir

加载模型文件的目录。

数据后处理

算子加载与执行

acl.op.create_attr

创建aclopAttr类型的数据。

--

acl.create_tensor_desc

创建aclTensorDesc类型的数。

--

acl.get_tensor_desc_size

获取tensor描述占用的空间大小。

--

acl.create_data_buffer

创建aclDataBuffer类型的数据。

数据交互

内存管理

acl.rt.memcpy

数据传输,Host->Device或Device->Host。

内存管理

acl.rt.malloc

申请Device上的内存。

内存管理

acl.rt.malloc_host

申请Host上的内存。

单算子推理

算子加载与执行

acl.op.execute

异步加载并执行指定的算子。

公共模块

--

acl.util.ptr_to_numpy

通过指针地址获取numpy.ndarray对象。

--

acl.util.numpy_to_ptr

获取numpy.ndarray对象的内存数据的指针地址。

资源释放

内存管理

acl.rt.free

释放Device上的内存。

内存管理

acl.rt.free_host

释放Host上的内存。

Stream管理

acl.rt.destroy_stream

销毁Stream。

Context管理

acl.rt.destroy_context

销毁Context。

Device管理

acl.rt.reset_device

复位当前运算的Device,回收Device上的资源。

去初始化

acl.finalize

实现ACL去初始化。

单算子矩阵相加流程图流程图

单算子矩阵相加流程图流程图如图1所示。

图1 单算子矩阵相加流程图

目录结构

如下为模型文件转换后的示例目录结构,“op_models”文件夹是转换后生成的。

acl_operator_add
├──src
│ ├── acl_execute_add.py //运行文件。
│ └── constant.py //常量定义。
└── test_data
├── config
│ ├── acl.json //系统初始化的配置文件。
│ └── add_op.json //矩阵相加算子的描述信息。
└── op_models
└── 0_Add_3_2_8_16_3_2_8_16_3_2_8_16.om //矩阵相加算子的模型文件。

父主题: 实现矩阵-矩阵相加运算

样例介绍

获取样例

单击Gitee,进入Ascend samples开源仓,详细参见README中的“版本说明”下载配套版本的sample包,从“python/level2_simple_inference/1_classification/vdec_resnet50_classification”目录下获取vdec_resnet50_classification样例。

功能描述

该样例主要是基于Caffe ResNet-50网络(单输入、单batch)实现图片分类的功能。

将Caffe ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型(*.om文件)。该样例中加载该om文件,将1个h265格式(*.h265)的视频码流(仅包含一帧)循环10次解码出10张YUV420SP NV12格式的图片,对该10张图片做缩放,并对缩放的图片进行推理,分别得到推理结果后,再对推理结果进行处理,输出最大置信度的类别标识以及top5置信度的总和。

转换模型时,需配置色域转换参数,用于将YUV420SP格式的图片转换为RGB格式的图片,才能符合模型的输入要求。

主要接口

主要接口如表1所示。

表1 主要接口介绍

功能

对应ACL模块

ACL 接口函数

功能说明

资源初始化

初始化

acl.init

初始化ACL配置。

Device管理

acl.rt.set_device

指定用于运算的Device。

Context管理

acl.rt.create_context

创建Context。

Stream管理

acl.rt.create_stream

创建Stream。

模型初始化

模型加载与执行

acl.mdl.load_from_file

从*.om文件加载模型到device侧。

数据类型及操作接口

acl.mdl.create_desc

创建模型描述数据类型。

数据类型及操作接口

acl.mdl.get_desc

获取模型描述数据类型。

数据预处理

媒体数据模块

acl.media.vdec_send_frame

视频解码接口。

数据类型及操作接口

acl.media.vdec_set_channel_desc系列接口

设置视频处理通道描述信息。

数据类型及操作接口

acl.media.dvpp_vpc_resize_async

将输入图片缩放到输出图片大小。

数据类型及操作接口

acl.media.dvpp_set_pic_desc系列接口

设置图片描述相关参数。

模型推理

模型加载与执行

acl.mdl.execute

执行模型同步推理。

数据后处理

数据类型及操作接口

acl.op.create_attr

创建aclopAttr类型的数据。

数据类型及操作接口

acl.create_tensor_desc

创建aclTensorDesc类型的数。

数据类型及操作接口

acl.get_tensor_desc_size

获取tensor描述占用的空间大小。

数据类型及操作接口

acl.create_data_buffer

创建aclDataBuffer类型的数据。

数据交互

内存管理

acl.rt.memcpy

数据传输,Host->Device或Device->Host。

内存管理

acl.media.dvpp_malloc

分配内存给Device侧媒体数据处理时使用。

内存管理

acl.rt.maclloc

申请Device上的内存。

内存管理

acl.rt.malloc_host

申请Host上的内存。

单算子推理

算子加载与执行

acl.op.execute

异步加载并执行指定的算子。

公共模块

--

acl.util.ptr_to_numpy

通过指针地址获取numpy.ndarray对象。

--

acl.util.numpy_to_ptr

获取numpy.ndarray对象的内存数据的指针地址。

资源释放

内存管理

acl.rt.free

释放Device上的内存。

内存管理

acl.media.dvpp_free

通过acl.media.dvpp_malloc接口申请的内存。

内存管理

acl.rt.free_host

释放Host上的内存。

模型加载与执行

acl.mdl.unload

卸载模型。

Stream管理

acl.rt.destroy_stream

销毁Stream。

Context管理

acl.rt.destroy_context

销毁Context。

Device管理

acl.rt.reset_device

复位当前运算的Device,回收Device上的资源。

去初始化

acl.finalize

实现ACL去初始化。

视频解码及模型推理流程图

视频解码及模型推理流程图如图1所示。

图1 视频解码及模型推理流程图

目录结构

目录结构如下所示。

vdec_resnet50_classification
├──src
│ ├── acl_dvpp.py //图片缩放实现文件。
│ ├── acl_model.py //模型推理实现文件。
│ ├── acl_sample.py //运行文件。
│ ├── acl_util.py //工具类函数实现文件。
│ ├── acl_vdec.py //视频解码实现文件。
│ └── constant.py //常量定义。
├── data
│ └── vdec_h265_1frame_rabbit_1280x720.h265 //用户待处理的视频文件,由用户自行获取。
├── caffe_model
│ ├── aipp.cfg
│ ├── resnet50.caffemodel //ResNet-50模型。
│ └── resnet50.prototxt // ResNet-50模型的网络文件。
└── model
└── resnet50_aipp.om //推理模型。

父主题: 基于Caffe ResNet-50网络实现图片分类(视频解码+同步推理)

样例介绍

获取样例

单击Gitee,进入Ascend samples开源仓,详细参见README中的“版本说明”下载配套版本的sample包,从“python/level2_simple_inference/1_classification/resnet50_imagenet_classification”目录下获取resnet50_imagenet_classification样例

功能描述

该样例主要是基于Caffe ResNet-50网络(单输入、单batch)实现图片分类的功能。

将Caffe ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型(*.om文件),在样例中,加载该om文件,对2张jpg(*.jpg)图片进行同步推理,分别得到推理结果后,再对推理结果进行处理,输出top5置信度的类别标识。

主要接口

主要接口如表1所示。

表1 主要接口介绍

功能

对应ACL模块

ACL 接口函数

功能说明

资源初始化

初始化

acl.init

初始化ACL配置。

Device管理

acl.rt.set_device

指定用于运算的Device。

Context管理

acl.rt.create_context

创建Context。

模型初始化

模型加载与执行

acl.mdl.load_from_file

从*.om文件加载模型到device侧。

数据类型及操作接口

acl.mdl.create_desc

创建模型描述数据类型。

数据类型及操作接口

acl.mdl.get_desc

获取模型描述数据类型。

模型推理

模型加载与执行

acl.mdl.execute

执行模型同步推理。

数据交互

内存管理

acl.rt.memcpy

数据传输,Host->Device或Device->Host。

内存管理

acl.rt.malloc

申请Device上的内存。

内存管理

acl.rt.malloc_host

申请Host上的内存。

公共模块

--

acl.util.ptr_to_numpy

void*数据转换为numpy类型数据。

--

acl.util.numpy_to_ptr

numpy类型数据转换为void*数据。

数据后处理

数据类型及操作接口

acl.mdl.get_dataset_buffer

获取数据集中信息。

数据类型及操作接口

acl.mdl.get_dataset_num_buffers

获取数据集中信息。

资源释放

内存管理

acl.rt.free

释放Device上的内存。

内存管理

acl.rt.free_host

释放Host上的内存。

模型加载与执行

acl.mdl.unload

卸载模型。

Context管理

acl.rt.destroy_context

销毁Context。

Device管理

acl.rt.reset_device

复位当前运算的Device,回收Device上的资源。

去初始化

acl.finalize

实现ACL去初始化。

模型同步推理流程图

模型同步推理流程图如图1所示。

图1 模型同步推理流程图

目录结构

目录结构如下所示。

resnet50_imagenet_classification
├──src
│ ├── acl_net.py //运行文件。
│ └── constant.py //常量定义。
├── data
│ ├── dog1_1024_683.jpg //测试图片数据。
│ └── dog2_1024_683.jpg //测试图片数据。
├── caffe_model
│ ├── resnet50.caffemodel //ResNet-50模型。
│ └── resnet50.prototxt // ResNet-50模型的网络文件。
└── model
└── resnet50.om //转换后的模型文件。

父主题: 基于Caffe ResNet-50网络实现图片分类(同步推理)

在线提单