EasyEdge平台Atlas-200适配SDK开发文档
简介
本文档介绍EasyEdge/EasyDL的Linux Atlas SDK的使用方法。
注意Atlas有两种产品形态,Atlas 200和Atlas 300, 请参见此处的文档说明
- 网络类型支持:图像分类
-
硬件支持:
- CPU: aarch64
- Atlas 200 DK
- 操作系统支持:Atlas指定的Linux版本, Ubuntu 18.04 aarch64 , cann 推理库请从Atlas官网中下载。
性能数据
数据仅供参考,实际数值根据使用线程数、利用率等情况可能有所波动
模型类型 | 模型算法 | 芯片类型 | SDK类型 | 实测硬件 | 单次预测耗时 |
---|---|---|---|---|---|
EasyDL 图像分类 | 高性能 | Atlas 200 | Atlas 200 | Atlas 200DK | 9ms |
EasyDL 图像分类 | 高精度 | Atlas 200 | Atlas 200 | Atlas 200DK | 12ms |
EasyDL 物体检测 | 高性能 | Atlas 200 | Atlas 200 | Atlas 200DK | 11ms |
EasyDL 物体检测 | 高精度 | Atlas 200 | Atlas 200 | Atlas 200DK | 24ms |
Release Notes
时间 | 版本 | 说明 |
---|---|---|
2022.06.29 | 1.6.0 | atlas 200支持aipp预处理加速,单算子推理 |
2022.05.18 | 1.5.0 | atlas 200在BML扩展支持10+新网络 |
2022.03.25 | 1.4.0 | atlas 200在EasyDL模型增加多个量化加速版本 |
2020.12.22 | 1.3.5 | SDK升级到CANN5.0.3, SDK包含编译好的demo二进制文件 |
2020.10.20 | 1.3.4 | 在CANN上丰富分类检测网络的支持,完善图片推理demo,HTTP Demo, 视频流demo |
2020.06.29 | 1.3.1 | SDK升级到CANN 20.1 |
2020.06.15 | 0.2 | 支持物体检测 |
2020.03.10 | 0.1 | 初始版本,支持图像分类 |
测试atlas 200的官方demo
请参见此处的文档说明, 搭建开发环境,测试atlas 200的mindstudio demo通过后,再测试
快速开始
SDK在以下环境中测试通过
- ubuntu 18.04, aarch64-linux-gnu-g++ 5.7, 编译机
- ubuntu 18.04, 开发板
Atlas CANN 信息:
Version=1.79.T22.0.B220
acllib_acl_version=1.0
acllib_dvpp_version=1.0
required_driver_ascendhal_version=4.0.0
required_driver_dvppkernels_version=1.1
required_driver_tsfw_version=1.0
2. 测试Demo
1.环境准备
sudo apt-get install sshpass build-essential
升级安装CANN5.0.3,涉及到对应的固件及驱动更新,按照昇腾https://www.hiascend.com官方指导安装验证
2. 测试Demo
####下载sdk并获取序列号 在EasyEdge,BML和EasyDL平台都可以通过离线部署或EasyEdge本地部署模块发布离线部署包,下载SDK并获取对应的序列号之后就可以开始后续的demo验证;
编译运行:
cd src
mkdir build && cd build
cmake .. && make
sudo ldconfig
./demo_image_inference/easyedge_image_inference {模型RES文件夹} {测试图片路径或仅包含图片的文件夹路径} {序列号}
在sdk/bin目录下也有编译好的二进制可执行demo文件,可以直接运行验证;
demo运行示例:
export LD_LIBRARY_PATH=path_to_sdk/lib/:path_to_sdk/thirdparty/opencv/lib/:$LD_LIBRARY_PATH
./demo_image_inference/easyedge_image_inference ../../../../RES/ /home/images/mix008.jpeg
2020-08-06 20:56:30,665 INFO [EasyEdge] 548125646864 Compiling model for fast inference, this may take a while
...
Results of image /ljay/images/mix008.jpeg:
2, kiwi, p:0.997594 loc: 0.352087, 0.56119, 0.625748, 0.868399
2, kiwi, p:0.993221 loc: 0.45789, 0.0730294, 0.73641, 0.399429
2, kiwi, p:0.992884 loc: 0.156876, 0.0598725, 0.3802, 0.394706
1, tomato, p:0.992125 loc: 0.523592, 0.389156, 0.657738, 0.548069
1, tomato, p:0.991821 loc: 0.665461, 0.419503, 0.805282, 0.573558
1, tomato, p:0.989883 loc: 0.297427, 0.439999, 0.432197, 0.59325
1, tomato, p:0.981654 loc: 0.383444, 0.248203, 0.506606, 0.400926
1, tomato, p:0.971682 loc: 0.183775, 0.556587, 0.286996, 0.711361
1, tomato, p:0.968722 loc: 0.379391, 0.0386965, 0.51672, 0.209681
Done
检测结果展示:
测试Demo HTTP 服务
编译demo完成之后,会同时生成一个http服务,运行
export LD_LIBRARY_PATH=path_to_sdk/lib/:path_to_sdk/thirdparty/opencv/lib/:$LD_LIBRARY_PATH
# ./easyedge_serving {res_dir} {serial_key} {host, default 0.0.0.0} {port, default 24401}
./easyedge_serving ../../../../RES "1111-1111-1111-1111" 0.0.0.0 24401
日志中会显示
HTTP is now serving at 0.0.0.0:24401
字样,此时,开发者可以打开浏览器,http://{设备ip}:24401
,选择图片来进行测试。
同时,可以调用HTTP接口来访问服务,具体参考下文接口说明。
SDK接口使用
使用该方式,将运行库嵌入到开发者的程序当中。
同步接口使用流程
请优先参考Demo的使用流程。遇到错误,请优先参考文件中的注释解释,以及日志说明。
// step 0: 设置序列号
global_controller()->set_licence_key("set your license here");
// step 1: 配置模型资源目录
AtlasConfig config;
config.model_dir = {模型文件目录};
// step 2: 创建并初始化Predictor;
auto predictor = global_controller()->CreateEdgePredictor(config);
int ret = predictor->init();
# 若返回非0,请查看输出日志排查错误原因。
auto img = cv::imread({图片路径});
// step 3: 预测图像
std::vector<EdgeResultData> result2;
predictor->infer(img, result2);
# 解析result2即可获取结果
异步接口使用流程
// step 0: 设置序列号
global_controller()->set_licence_key("set your license here");
// step 1: 配置模型资源目录
AtlasConfig config;
config.model_dir = {模型文件目录};
// step 3: 创建Predictor;这这里选择合适的引擎
auto predictor = global_controller()->CreateEdgePredictor(config);
// step 4: 设置异步回调
predictor->set_result_handler(YOUR_HANDLER);
// step 5: 初始化
int ret = predictor->init();
# 若返回非0,请查看输出日志排查错误原因。
// step 6: 预测图像
auto img = cv::imread({图片路径});
color_format = kBGR;
float threshold = 0.1;
uint64_t seq_id;
predictor->infer_async(img, color_format, 0.1, nullptr, seq_id);
# YOUR_HANDLER里面有seq_id的回调结果
设置序列号
请在网页控制台中申请序列号,并在init初始化前设置。 LinuxSDK 首次使用需联网授权。
- 接口
virtual int set_licence_key(const std::string& license) = 0;
日志配置
设置 EdgeLogConfig
的相关参数。具体含义参考文件中的注释说明。
EdgeLogConfig log_config;
log_config.enable_debug = true;
global_controller()->set_log_config(log_config);
FAQ
1. 如何处理一些 undefined reference?
如:undefined reference to `curl_easy_setopt@CURL_OPENSSL_3'
方案1:通过安装libcurl3 libcurl-openssl1.0-dev
来解决。
方案2:如果开发者想不想使用低版本的openssl(如Ubuntu 18.04), 可以link静态库easyedge_static.a
,自己指定需要的Library的版本:
示例:修改CMakeList.txt
find_package(CURL REQUIRED)
target_link_libraries(easyedge_demo ${OpenCV_LIBS} easyedge_static pthread ${CURL_LIBRARIES} verify_static ${其他需要的库})
其中, 其他需要的库视具体sdk中包含的库而定。
FAQ
#####1. EasyDL 离线SDK与云服务效果不一致,如何处理?
目前离线SDK与云服务的处理有些许差异,具体如下:
- 图像分类模型:离线SDK与云服务使用
通用
(非快速训练
、非AutoDL Transfer
)的效果类似 - 物体检测模型:离线SDK的
高精度
模型与云服务的精度较低,服务性能更佳
的效果类似
后续我们会消除这部分差异,如果开发者发现差异较大,可联系我们协助处理。