本期【洞见AI硬件,部署讲坛】主要分享基于飞桨的昇腾310及相关硬件的多方案部署教程,包括:
1. Paddle Lite在Atlas 200 DK上部署实战;
2. 通过Paddle2ONNX在Atlas 200 DK上部署模型;
3. 基于EasyDL的全流程模型开发和Atlas 200 DK部署。
本篇教程以Atlas 200 DK为例,介绍基于EasyDL的“NonCode”模式的部署流程。基于百度EasyDL零门槛AI开发平台,可以实现全程可视化零代码训练CV模型,一键发布昇腾310专项适配SDK,一行代码即可完成调用。
使用EasyDL完成昇腾310相关硬件(本教程用的是Atlas 200 DK)部署,整体可分为三个流程:
在EasyDL平台上完成训练并发布部署包。
在运行环境验证部署包的运行效果。
通过SDK或服务接口将模型嵌入到用户程序中。
目前在Atlas 200和Atlas 300上,EasyDL已经支持图像分类和物体检测两类任务;以下性能数据仅供参考,实际数值根据使用线程数、芯片利用率等情况可能有所波动
模型类型 | 模型算法 | 芯片类型 | 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 | 31ms |
在EasyDL平台上完成模型训练并发布部署包
打开EasyDL官网(https://ai.baidu.com/easydl/),选择合适的目标任务类型,这里我们以图像分类任务为例。
在EasyDL图像分类的操作台中创建模型,点击训练模型,依次选择「EasyEdge本地部署」-「通用小型设备」,然后根据对精度或者性能的侧重选择适合场景的算法,就可以开始训练。
注:模型训练需要准备训练数据,目前平台支持已标注数据上传和数据在线标注。
训练成功后可以看到「训练成功」字样。如下图所示。
训练完成后点击上图中的「申请发布」,然后如下图所示,选择「EasyEdge-纯离线服务」,再选择「华为昇腾Atlas开发板」,点击「发布」,将模型发布为专项适配昇腾310的SDK服务。
发布完成后,在图中位置点击「下载SDK」,同时在百度智能云控制台申请序列号用于后续本地部署时联网授权。
在Atlas 200 DK
上测试发布包
下载SDK并拷贝到本地,并从控制台获取EasyDL的测试序列号即可开始在Atlas 200 DK上的部署流程。首先,在本地解压SDK文件,进入Demo文件夹目录,运行build_and_run.sh一键编译并生成Demo:
然后设置Demo运行所需要依赖库搜索路径:
运行Demo;在运行程序时,需要在终端输入输入「Demo文件 模型地址 输入图片地址 序列号」,如图可见,输入图片被识别为“dog”的概率为0.998。
通过SDK或服务接口
将模型嵌入到用户程序中
同步接口使用流程
// 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);
同时,SDK中还包含AI Serving等程序,可以启动HTTP Serving服务,通过调用HTTP接口进行服务调用,具体可以参考EasyDL官方文档教程以及常见问题解答(https://ai.baidu.com/ai-doc/EASYDL/7k7q0uipo)。
为了向大家提供更易用、更好用的AI推理部署工具,我们诚邀您参与调研,分享您使用推理部署工具时的需求和期待!
问卷地址(点击阅读原文即可跳转):
https://iwenjuan.baidu.com/?code=323o1l
如有相关AI硬件部署的技术问题,欢迎加入飞桨硬件部署交流群提问交流:609865659(QQ群)
长按下方二维码立即
Star
更多信息:
飞桨官方QQ群:793866180
飞桨官网网址:
www.paddlepaddle.org.cn/
飞桨开源框架项目地址:
GitHub:
github.com/PaddlePaddle/Paddle
Gitee:gitee.com/paddlepaddle/Paddle
欢迎在飞桨论坛讨论交流~~
http://discuss.paddlepaddle.org.cn