集成Ascend使用说明
本文档介绍如何在Ascend环境的Linux系统上,使用MindSpore Lite 进行推理,以及动态shape功能的使用。目前,MindSpore Lite支持Atlas 200/300/500推理产品和Atlas推理系列产品(配置Ascend310P AI 处理器)芯片。
环境准备
确认系统环境信息
确认安装64位操作系统,glibc>=2.17,其中Ubuntu 18.04/CentOS 7.6/EulerOS 2.8是经过验证的。
确认安装GCC 7.3.0版本。
确认安装CMake 3.18.3及以上版本。
安装完成后将CMake所在路径添加到系统环境变量。
确认安装Python 3.7.5或3.9.0版本。如果未安装或者已安装其他版本的Python,可以选择下载并安装:
如果您的环境为ARM架构,请确认当前使用的Python配套的pip版本>=19.3。
确认安装昇腾AI处理器配套软件包。
昇腾软件包提供商用版和社区版两种下载途径:
商用版下载需要申请权限,下载链接与安装方式请参考Ascend Data Center Solution 22.0.RC3安装指引文档。
社区版下载不受限制,下载链接请前往CANN社区版,选择
5.1.RC2.alpha007
版本,以及在固件与驱动链接中获取对应的固件和驱动安装包,安装包的选择与安装方式请参照上述的商用版安装指引文档。
安装包默认安装路径为
/usr/local/Ascend
。安装后确认当前用户有权限访问昇腾AI处理器配套软件包的安装路径,若无权限,需要root用户将当前用户添加到/usr/local/Ascend
所在的用户组。安装昇腾AI处理器配套软件所包含的whl包。如果之前已经安装过昇腾AI处理器配套软件包,需要先使用如下命令卸载对应的whl包。
pip uninstall te topi -y
默认安装路径使用以下指令安装。如果安装路径不是默认路径,需要将命令中的路径替换为安装路径。
pip install /usr/local/Ascend/ascend-toolkit/latest/lib64/topi-{version}-py3-none-any.whl pip install /usr/local/Ascend/ascend-toolkit/latest/lib64/te-{version}-py3-none-any.whl
配置环境变量
安装好Ascend软件包之后,需要导出Runtime相关环境变量,下述命令中LOCAL_ASCEND=/usr/local/Ascend
的/usr/local/Ascend
表示配套软件包的安装路径,需注意将其改为配套软件包的实际安装路径。
# control log level. 0-EBUG, 1-INFO, 2-WARNING, 3-ERROR, 4-CRITICAL, default level is WARNING.
export GLOG_v=2
# Conda environmental options
LOCAL_ASCEND=/usr/local/Ascend # the root directory of run package
# lib libraries that the run package depends on
export LD_LIBRARY_PATH=${LOCAL_ASCEND}/ascend-toolkit/latest/lib64:${LOCAL_ASCEND}/driver/lib64:${LOCAL_ASCEND}/ascend-toolkit/latest/opp/op_impl/built-in/ai_core/tbe/op_tiling:${LD_LIBRARY_PATH}
# Environment variables that must be configured
export TBE_IMPL_PATH=${LOCAL_ASCEND}/ascend-toolkit/latest/opp/op_impl/built-in/ai_core/tbe # TBE operator implementation tool path
export ASCEND_OPP_PATH=${LOCAL_ASCEND}/ascend-toolkit/latest/opp # OPP path
export PATH=${LOCAL_ASCEND}/ascend-toolkit/latest/compiler/ccec_compiler/bin/:${PATH} # TBE operator compilation tool path
export PYTHONPATH=${TBE_IMPL_PATH}:${PYTHONPATH} # Python library that TBE implementation depends on
执行converter工具
MindSpore Lite提供离线转换模型功能的工具,将多种类型的模型(Caffe、ONNX、TensorFlow、MindIR)转换为可在Ascend硬件上推理的模型。
首先,通过转换工具转换成的ms
模型;然后,使用转换工具配套的Runtime推理框架执行推理,具体流程如下:
下载Ascend专用converter工具,当前仅支持Linux
解压下载的包
tar -zxvf mindspore-lite-{version}-linux-x64.tar.gz
{version}是发布包的版本号。
将转换工具需要的动态链接库加入环境变量LD_LIBRARY_PATH
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PACKAGE_ROOT_PATH}/tools/converter/lib
${PACKAGE_ROOT_PATH}是解压得到的文件夹路径。
进入转换目录
cd ${PACKAGE_ROOT_PATH}/tools/converter/converter
配置configFile(可选)
用户可以通过此选项配置用于转模型时的Ascend Option选项,配置文件采用INI的风格,针对Ascend场景,可配置的参数为[acl_option_cfg_param],参数的详细介绍如下表1所示,针对Ascend初始化可以通过acl_init_options参数进行配置,针对Ascend构图可以通过acl_build_options参数进行配置。
执行converter,生成Ascend
ms
模型./converter_lite --fmk=ONNX --modelFile=${model_name}.onnx --outputFile=${model_name}
${model_name}为模型文件名称,运行后的结果显示为:
CONVERT RESULT SUCCESS:0
用户若想了解converter_lite转换工具的相关参数,可参考参数说明。
说明:当原始模型输入shape不确定时,converter工具转换模型时要指定inputShape,同时configFile配置acl_option_cfg_param中input_shape_vector参数,取值相同,命令如下:
./converter_lite --fmk=ONNX --modelFile=${model_name}.onnx --outputFile=${model_name} --inputShape="input:1,64,64,1" --configFile="./config.txt"
其中,config.txt内容如下:
[acl_option_cfg_param] input_shape_vector="[1,64,64,1]"
表1:配置[acl_option_cfg_param]参数
参数 |
属性 |
功能描述 |
参数类型 |
取值说明 |
---|---|---|---|---|
|
可选 |
指定模型输入format。 |
String |
可选有 |
|
可选 |
指定模型输入Shape, 按模型输入次序排列,用 |
String |
例如: |
|
可选 |
配置模型精度模式。 |
String |
可选有 |
|
可选 |
配置算子选择模式。 |
String |
可选有 |
|
可选 |
指定动态BatchSize参数。 |
String |
|
|
可选 |
指定动态分辨率参数。 |
String |
|
|
可选 |
配置融合规则开关配置文件路径及文件名。 |
String |
- |
|
可选 |
模型插入AIPP算子 |
String |
AIPP配置文件路径 |
推理工具runtime
converter得到转换模型后,使用配套的Runtime推理框架执行推理, 有关使用Runtime执行推理详情见使用Runtime执行推理(C++)。
执行benchmark
MindSpore Lite提供benchmark基准测试工具,它可以对MindSpore Lite模型前向推理的执行耗时进行定量分析(性能),还可以通过指定模型输出进行可对比的误差分析(精度)。 关于推理工具的一般说明,可参考benchmark。
测性能
./benchmark --device=Ascend310 --modelFile=./models/test_benchmark.ms --timeProfiling=true
测精度
./benchmark --device=Ascend310 --modelFile=./models/test_benchmark.ms --inDataFile=./input/test_benchmark.bin --inputShapes=1,32,32,1 --accuracyThreshold=3 --benchmarkDataFile=./output/test_benchmark.out
有关环境变量设置,将
libmindspore-lite.so
(目录为mindspore-lite-{version}-{os}-{arch}/runtime/lib
)的so
库所在的目录加入${LD_LIBRARY_PATH}
。
高级特性
动态shape特性
在某些推理场景,如检测出目标后再执行目标识别网络,由于目标个数不固定导致目标识别网络输入BatchSize不固定。如果每次推理都按照最大的BatchSize或最大分辨率进行计算,会造成计算资源浪费。因此,推理需要支持动态BatchSize和动态分辨率的场景,Lite在Atlas 200/300/500推理产品上推理支持动态BatchSize和动态分辨率场景,在convert阶段通过configFile配置[acl_option_cfg_param]动态参数,转成ms
模型,推理时使用model的resize功能,改变输入shape。
动态Batch size
参数名
dynamic_batch_size
功能
设置动态batch档位参数,适用于执行推理时,每次处理图片数量不固定的场景,该参数需要与input_shape_vector配合使用,不能与dynamic_image_size同时使用。
取值
最多支持100档配置,每一档通过英文逗号分隔,每个档位数值限制为:[1~2048]。例如配置文件中参数配置如下:
[acl_option_cfg_param] input_shape_vector="[-1,32,32,4]" dynamic_batch_size="2,4"
其中,input_shape中的"-1"表示设置动态batch,档位可取值为"2,4",即支持档位0: [2,32,32,4],档位1: [4,32,32,4]。
converter
./converter_lite --fmk=ONNX --modelFile=${model_name}.onnx --inputShape="input:4,32,32,4" --configFile=./config.txt --outputFile=${model_name}
说明:使能动态BatchSize时,需要指定inputShape,值为最大档位对应的shape,即上节中档位1的值;同时通过configFile配置[acl_option_cfg_param]动态batch size,即上节示例中配置内容。
推理
使能动态BatchSize,进行模型推理时,输入shape只能选择converter时设置的档位值,想切换到其他档位对应的输入shape,使用model resize功能。
注意事项
1)若用户执行推理业务时,每次处理的图片数量不固定,则可以通过配置该参数来动态分配每次处理的图片数量。例如用户执行推理业务时需要每次处理2张,4张,8张图片,则可以配置为2,4,8,申请了档位后,模型推理时会根据实际档位申请内存。
2)如果用户设置的档位数值过大或档位过多,可能会导致模型编译失败,此时建议用户减少档位或调低档位数值。
3)如果用户设置的档位数值过大或档位过多,在运行环境执行推理时,建议执行swapoff -a命令关闭swap交换区间作为内存的功能,防止出现由于内存不足,将swap交换空间作为内存继续调用,导致运行环境异常缓慢的情况。
动态分辨率
参数名
dynamic_image_size
功能
设置输入图片的动态分辨率参数。适用于执行推理时,每次处理图片宽和高不固定的场景,该参数需要与input_shape_vector配合使用,不能与dynamic_batch_size同时使用。
取值
最多支持100档配置,每一档通过英文分号分隔。例如: "imagesize1_height,imagesize1_width;imagesize2_height,imagesize2_width",指定的参数必须放在双引号中,每一组参数中间使用英文分号分隔。例如配置文件中参数配置如下:
[acl_option_cfg_param] input_format="NCHW" input_shape_vector="[2,3,-1,-1]" dynamic_image_size="64,64;96,96"
其中,input_shape中的"-1"表示设置动态分辨率,即支持档位0: [2,3,64,64],档位1: [2,3,96,96]。
converter
./converter_lite --fmk=ONNX --modelFile=${model_name}.onnx --inputShape="input:2,3,96,96" --configFile=./config.txt --outputFile=${model_name}
说明:使能动态BatchSize时,需要指定inputShape,值为最大档位对应的shape,即上节中档位1的值;同时通过configFile配置[acl_option_cfg_param]动态分辨率,即上节示例中配置内容。
推理
使能动态分辨率, 进行模型推理时,输入shape只能选择converter时设置的档位值,想切换到其他档位对应的输入shape,使用model的resize功能。
注意事项
1)如果用户设置的分辨率数值过大或档位过多,可能会导致模型编译失败,此时建议用户减少档位或调低档位数值。
2)如果用户设置了动态分辨率,实际推理时,使用的数据集图片大小需要与具体使用的分辨率相匹配。
3)如果用户设置的分辨率数值过大或档位过多,在运行环境执行推理时,建议执行swapoff -a命令关闭swap交换区间作为内存的功能,防止出现由于内存不足,将swap交换空间作为内存继续调用,导致运行环境异常缓慢的情况。
算子支持
算子支持见Lite 算子支持。