该样例主要是基于Caffe ResNet-50网络(单输入、单batch)实现图片分类的功能。
将Caffe ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型(*.om文件)。该样例中加载该om文件,对2张*.jpg图片进行n次异步推理(n作为运行应用的参数,由用户配置,可通过--execute_times参数设置,默认为4次),分别得到n次推理结果后,再对推理结果进行处理,输出top5置信度的类别标识。
如下为模型文件转换后的示例目录结构,model文件夹是转换后生成的。
resnet50_async_imagenet_classification
├──src
│ ├── acl_net.py //运行文件
│ └── constant.py //常量定义
├── data
│ ├── dog1_1024_683.jpg //测试图片数据
│ └── dog2_1024_683.jpg //测试图片数据
├── caffe_model
│ ├── resnet50.caffemodel //resnet50模型
│ └── resnet50.prototxt // resnet50模型的网络文件
└── model
└── resnet50.om //转换后的模型文件
功能 | 对应pyACL模块 | pyACL 接口函数 | 功能说明 |
---|---|---|---|
资源初始化 | 初始化 | acl.init | 初始化pyACL配置。 |
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_async | 执行模型异步推理。 |
同步等待 | 同步等待 | acl.rt.subscribe_report | 指定处理Stream上回调函数的线程。 |
同步等待 | acl.rt.unsubscribe_report | 取消线程注册,Stream上的回调函数不再由指定线程处理。 | |
同步等待 | acl.rt.launch_callback | 在Stream的任务队列中增加一个需要在 Host/Device上 执行的回调函 数。 | |
同步等待 | acl.rt.process_report | 等待指定时间后,触发回调处理。 | |
数据交互 | 内存管理 | acl.rt.memcpy | 数据传输,Host->Device或Device->Host。 |
内存管理 | acl.rt.malloc | 申请Device上的内存。 | |
内存管理 | acl.rt.malloc_host | 申请Host上的内存。 | |
公共模块 | -- | acl.util.ptr_to_numpy | 指针转numpy类型数据。 |
-- | acl.util.numpy_to_ptr | numpy类型数据转指针。 | |
-- | acl.util.ptr_to_bytes | 指针转bytes类型数据。 | |
-- | acl.util.bytes_to_ptr | bytes类型数据转指针。 | |
-- | acl.util.start_thread | 启动一个回调函数线程。 | |
-- | acl.util.stop_thread | 回收一个回调函数线程。 | |
数据后处理 | 数据类型及操作接口 | 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 | 实现pyACL去初始化。 |
在安装完CANN软件包之后,请务必自行配置pyACL相关的环境变量,否则,将无法正常“import acl”。
# 以root用户安装toolkit包
. /usr/local/Ascend/ascend-toolkit/set_env.sh
# 以非root用户安装toolkit包
. ${HOME}/Ascend/ascend-toolkit/set_env.sh
# 以root用户安装nnrt包
. /usr/local/Ascend/nnrt/set_env.sh
# 以非root用户安装nnrt包
. ${HOME}/Ascend/nnrt/set_env.sh
# 以root用户安装nnae包
. /usr/local/Ascend/nnae/set_env.sh
# 以非root用户安装nnae包
. ${HOME}/Ascend/nnae/set_env.sh
Atlas 500 智能小站:
配置PYTHON环境变量,将“/home/data/miniD/driver/lib64”加入到PYTHON中。命令示例如下:
export PYTHONPATH=/home/data/miniD/driver/lib64:$PYTHONPATH
配置LD_LIBRARY_PATH,将“/home/data/miniD/driver/lib64”加入到LD_LIBRARY_PATH中。命令示例如下:
export LD_LIBRARY_PATH=/home/data/miniD/driver/lib64:$LD_LIBRARY_PATH
Atlas 200 AI加速模块( RC场景):
安装minirc版本的runtime包,以安装在默认路径“/usr/local/Ascend”为例:配置LD_LIBRARY_PATH,将“/usr/local/Ascend/runtime/lib64”加入到LD_LIBRARY_PATH中。命令示例如下:
export LD_LIBRARY_PATH=/usr/local/Ascend/runtime/lib64:$LD_LIBRARY_PATH
获取aarch64架构的cann-nnrt软件包,在服务器上解压,在软件包所在目录下的解压命令如下:
./Ascend-cann-nnrt_xxx_linux-aarch64.run --noexec --extract="解压目标路径"
在解压目标路径下找到“run_package/Ascend-pyACL-xxx-linux.aarch64.run”,在软件包所在目录下的解压命令如下:
./Ascend-pyACL-xxx-linux.aarch64.run --noexec --extract="解压目标路径"
在解压路径下找到“python/site-packages/acl/acl.so”,将acl.so上传至200RC上,例如,上传至“ /usr/local/Ascend/pyACL/python/site-packages/acl”目录下,配置PYTHON环境变量,将“ /usr/local/Ascend/pyACL/python/site-packages/acl”加入到PYTHON中。命令示例如下:
export PYTHONPATH=/usr/local/Ascend/pyACL/python/site-packages/acl:$PYTHONPATH
模型转换。
以HwHiAiUser(运行用户)登录开发环境。
参见《昇腾文档》中的“将已有模型通过ATC工具转换”指导中的ATC工具使用环境搭建,获取ATC工具并设置环境变量。
准备数据。 从以下链接获取ResNet-50网络的权重文件(*.caffemodel)、模型文件(resnet50.prototxt),并以HwHiAiUser(运行用户)将获取的文件上传至开发环境的“resnet50_async_imagenet_classification/caffe_model”目录下。
将ResNet-50网络转换为适配昇腾AI处理器的离线模型(*.om文件)。 切换到“resnet50_async_imagenet_classification”目录,执行如下命令。 Ascendxxx为使用的昇腾AI处理器型号,请用户自行替换。
atc --model=caffe_model/resnet50.prototxt --weight=caffe_model/resnet50.caffemodel --framework=0 --output=model/resnet50 --soc_version=Ascendxxx --input_format=NCHW --input_fp16_nodes=data --output_type=FP32 --out_nodes=prob:0
以运行用户将开发环境的样例目录及目录下的文件上传到运行环境。
运行应用
python3 ./src/acl_net.py
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。