开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术
AR与VR
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
信息服务
智能园区

EasyEdge平台Atlas-300适配SDK开发文档

简介

本文档介绍EasyEdge/EasyDL的Linux Atlas SDK的使用方法。

注意Atlas有两种产品形态,Atlas 200和Atlas 300, 请参见此处的文档说明

  • 网络类型支持:图像分类
  • 硬件支持:

    • CPU: x86_64
    • Atlas 300 卡
  • 操作系统支持:Atlas指定的Linux版本, Ubuntu 18.04 x86_64 或 centos 7 x86_64 , cann 推理库请从Atlas官网中下载。
  • 飞腾 + Atlas300I推理卡的环境配置(Linux aarch64)与使用方式类似Atlas300 可参照使用

Release Notes

时间 版本 说明
2022.06.29 1.6.0 atlas 300支持aipp预处理加速,单算子推理
2022.05.18 1.5.0 atlas 300在BML扩展支持15+新网络
2022.03.25 1.4.0 atlas 300在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.3.23 0.1 初始版本,支持图像分类

性能数据

数据仅供参考,实际数值根据使用线程数、利用率等情况可能有所波动

模型类型 模型算法 芯片类型 SDK类型 实测硬件 单次预测耗时
EasyDL 图像分类 高性能 Atlas 300 Atlas 300 Atlas 800服务器 9ms
EasyDL 图像分类 高精度 Atlas 300 Atlas 300 Atlas 800服务器 12ms
EasyDL 物体检测 高性能 Atlas 300 Atlas 300 Atlas 800服务器 11ms
EasyDL 物体检测 高精度 Atlas 300 Atlas 300 Atlas 800服务器 18 ms

atlas 300 加速卡注意事项

一般服务器(HOST侧)安装多个300加速卡,,每个300加速卡有4个芯片。一个芯片(DEVICE侧)可以认为是一个单独的系统,并且不共享储存系统。

每个芯片都有独立的device-id,可以通过命令查看:sudo npu-smi info

由于模型需要在芯片上运行。因此运行SDK前,需要手动将模型复制到每个单独芯片的储存系统上。

快速开始

SDK在以下环境中测试通过

  • ubuntu 18.04, Atlas 800 服务器指定版本;

1.环境准备

sudo apt-get install sshpass build-essential
升级安装CANN5.0.3,涉及到对应的固件及驱动更新,按照昇腾https://www.hiascend.com官方指导安装验证

2. 测试Demo

####下载sdk并获取序列号 在EasyEdge,BML和EasyDL平台都可以通过离线部署或EasyEdge本地部署模块发布离线部署包,下载SDK并获取对应的序列号之后就可以开始后续的demo验证; image.png

编译运行:

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

检测结果展示:

image.png

测试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,选择图片来进行测试。

image.png

同时,可以调用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);

日志及报错

日志

日志需要开启Atlas 的 INFO级别,/etc/slog.conf中配置关闭zip格式。清空/var/dlog 目录,运行atlas 300 官方示例代码,可以在/var/dlog目录下看见host和device开头的2个日志文件,中间是明文的info级别的日志

日志共有3处:

  • host 测的easyedge.log。 当前运行目录下。
  • device侧的easyedge.device.xxx.log。 device侧的日志,在芯片的同名目录下。
  • /var/dlog host 与device开头的log文件,ddk运行日志,其中device侧有略微延时

通用错误码

错误码 常量 解释
1000004 RESOURCE_LOAD_FAIL 缺少data/model/conf.json文件或者该文件以及被改动。下载包中的data/model下的所有文件都不要改动,尝试使用默认配置。或者按照报错复制到对应目录。
7000001 AUTH_FAILED 服务端校验序列号失败
7000002 AUTH_LICENSE_INVALID 校验序列号
7000003 AUTH_LICENSE_EXPIRED 序列号过期
500001 NET_CURL_PERFORM_FAILED 服务端校验序列号的请求因为网络原因失败
600001 GET_MACHINE_ID_FAILED 没有相关权限,请反馈

Atlas SDK 错误码

错误码值 常量 含义 报错示例信息 示例解释及解决方式
12000011 FILE_NOT _READABLE 资源文件不可读 data/model/params IS NOT READABLE data/model/params,这个文件不可读。SDK下载包中的data/model下的所有文件都不要改动,尝试使用默认配置。或者按照报错复制到对应目录。
12000012 HIAI_ERRORLIST _FILE status.h.list不是原始文件 data/model/status.h.list IS TOO SMALL 下载包中的data/model下的所有文件都不要改动,包括status.h.list
12000102 PREDICTOR_NOT_INITED create后没有调用init()函数 please call init() first 调用infer函数前没有调用init()
12000103 PREDICTOR_NO_HANDLER create后没有调用set_result_handler()函数 please call set_result_handler() first 调用infer_async函数前没有调用set_result_handler(),建议init前调用
12000104 PREDICTOR_ALREADY_INITED init()不管是否成功,不能连续调用。 don't call init() more than once 如果失败,请再次新建一个Predictor
12000105 BATCH_SIZE AltasConfig里的batch_size设置与model_name不符合 model batch size is 1; your config batch size is 4 batch_size设置里4,model_name设置里params,不对应导致报错。model_name应该设置为params-batch4
12000106 INPUT_WIDTH preprocess_args.json被改动 model input tensor width is 224; your config resize is 226 请勿修改preprocess_args.json
12000107 INPUT_HEIGHT 同上 同上 同上
12000201 BATCH_TOO_MANY_IMAGES 一次输入的图片大于batch_size too_many_images input:2; batch_size is 1 调用infer函数,输入了2张图片,大于batch数。如果batch=1的话,每次infer只能传一张图。
12000202 IMAGE_FORMAT_CHANNELS infer函数输入的color_format与cv::Mat里的channel数不匹配 EdgeColorFormat is not according to cv channels; format is 101; channels is 3; seq_id1 101表示kRGBA,cv::Mat里channel应该期望是4。如果是直接读的图片,填kBGR。
12200001 ENGINE_MATRIX _COMMON Atlas DDK Matrix部分(非CreateGraph函数)接口报错。即返回值HIAI_StatusT不是HIAI_OK。具体解释见Atlas官方文档。 hiai::Graph::ParseConfigFile (graph.prototxt) ; status Code is 16855066 ; HIAI ERROR CODE is 101 HIAI_GRAPH_PROTO_FILE _PARSE_FAILED_CODE, 调用hiai::Graph:: ParseConfigFile()返回16855066, 对应的status.h.list中的错误码是101。保留日志,具体见Atlas官方文档。
12200002 ENGINE_AI_COMMON Atlas DDK Device引擎部分hiai::AIStatus 不为hiai::SUCCESS _ai_model_manager->Process() 保留日志,具体见Atlas官方文档。
12200003 ENGINE_MATRIX_INIT Atlas DDK CreateGraph() 初始化DDK报错。具体解释见Atlas官方文档。 hiai::Graph::CreateGraph(); data/model/graph.prototxt ; status Code is 16855190 ; HIAI ERROR CODE is 225 HIAI_FILE_NOT_EXIST_CODE, 示例为缺少libatlas_device.so导致
12200004 EDGEATLAS_ENGINE MATRIX_INIT_DEVICE Atlas DDK CreateGraph() 初始化DDK报错,这个报错很可能是device侧出现问题 hiai::Graph::CreateGraph() ;data/model/graph.prototxt ; status Code is 16855057 ; HIAI ERROR CODE is 92 HIAI_GRAPH_ENGINE _INIT_FAILED_CODE 需要具体排查DEVICE侧日志再次找具体报错,发现原因
12200005 ENGINE_ARGS_NULL 内部错误 请反馈
12300001 SYNC_INFER_TIMEOUT 调用infer同步接口时,内部会调用infer_async函数,这个函数超时 infer sync wait timout more than 10ms 内部会调用infer_async函数超过10ms。1.不要并发过高 2. 超时参数略微大些。
上一篇
EdgeBoard
下一篇
EasyEdge平台Atlas-200适配SDK开发文档