二进制程序运行模型-进程模式
1、概述
本文将描述如何将EasyEdge SDK打包成一个二进制程序,然后通过BIE云边协同将二进制程序和模型文件下发至边缘节点并运行。
2、获取Jetson类型SDK
参考 模型转换 章节,此处我们需要再多生成一个Jetson类型的SDK。
进入我的模型界面,点击生成端模型。
选择Jetson芯片和Linux操作系统,点击发布。
过几分钟,可以在离线计算SDK界面看到生成的Jetson SDK,如下图所以:
点击下载获得Jetson专用SDK:EasyEdge-Linux-m38748-b38748-Jetson.zip 。
3、申请测试序列号
点击上图当中的获取序列号激活,进入到序列号管理界面,点击新增测试序列号来获取测试序列号,如下图所示
4、获得模型二进制运行程序
4.1 检查SDK是否带有模型二进制执行程序
SDK当中的RES目录是模型资源文件,CPP目录是模型运行程序,解压CPP目录当中的文件,找到demo目录,查看是否有bin文件夹。如下图所示,SDK包当中带了二进制执行程序(easyedge_serving、easyedge_multhread、easyedge_batch_inferenc),针对这种SDK,我们可以直接使用SDK包当中提到的二进制程序。
4.2 编译SDK获得模型二进制执行程序
如果SDK包当中不带模型二进制执行程序,则需要通过编译程序获取模型二进制执行程序,编译命令如下:
cd demo
mkdir build && cd build
cmake .. && make
- 模型二进制程序对jetson版本有依赖要求,具体参考 Jetson依赖说明。
- SDK编译详细内容可以参考:https://ai.baidu.com/ai-doc/EASYDL/Dka3ky0an
5、本地验证
本地运行 easyedge_serving 程序。
$ sudo ldconfig
$ cd sdk/cpp/baidu_easyedge_linux_cpp_aarch64_JetPack4.4_gcc7.4_v0.5.5_20200811/demo/build
$ ls
CMakeCache.txt CMakeFiles cmake_install.cmake easyedge_batch_inference easyedge.log easyedge_multi_thread easyedge_serving install_manifest.txt Makefile
$ ./easyedge_serving /home/nano/Downloads/sdk/RES "测试序列号" 0.0.0.0 24401
打开浏览器,输入:http://[ip]:24401 , 然后在web界面当中上传一张图片进行测试。
如果提示缺少lib包,则需要将lib添加到path当中去。
6、利用BIE进程模式部署
本章节介绍如何使用进程模式下发模型二进制执行程序和模型文件。
通过本地验证,我们知道,程序在边缘运行的命令如下:
./easyedge_serving /home/nano/Downloads/sdk/RES "测试序列号" 0.0.0.0 24401
如果要使用BIE实现模型下发并运行,需要将上述本地验证命令分割为以下几部分:
-
下发文件
- 程序包:包含easyedge_serving和program.yml配置文件的压缩包,上传对象存储。在program.yml配置文件当中定义了entry。
- 配置项:模型资源文件,上传对象存储
-
启动参数
- 模型资源文件下发以后的工作目录。
- 模型序列号
- 服务暴露IP
- 服务暴露端口
基于上述需要的内容,我们开始后面的的操作。
6.1 制作程序包
进程应用创建没有镜像,由程序包代替。程序包由对应平台的可执行文件和程序配置文件program.yml组成,在本demo中:
easyedge_serving
:NIVIDIA Jetson nano的可执行文件。该文件在sdk文件的 /demo/build目录中。program.yml
:可执行文件的配置文件,在其中定义了entry,对应本地验证程序当中的./easyedge_serving
命令。详细配置如下:
6.2 添加程序包配置项
将这两个文件压缩成zip文件并上传到对象存储中,然后在BIE程序包中引入这个压缩文件。
制作压缩包建议使用zip压缩命令,执行命令如下:
# 查看当前目录下的文件,应该只有easyedge_serving 和 program.yml
$ ls
easyedge_serving program.yml
# 将当前目录下的2个文件压缩到压缩包当中
$ zip -r jetson-native.zip *
6.3 添加模型文件
将模型资源文件RES目录压缩,并上传至对象存储,然后在BIE配置项中引入这个压缩文件。
制作压缩包建议使用zip压缩命令,执行命令如下:
# 查看当前目录下的文件,应该可以看到RES目录
$ ls
RES cpp python
# 将RES目录压缩
$ zip -r RES.zip RES
6.4 创建进程应用
添加进程服务,将模型以卷的形式添加到服务中。这里的目录填的是工作目录下的相对路径,如下图所示
添加启动参数如下:
因为上面的RES.zip解压以后,会带有一个RES目录,所以启动参数当中的模型资源文件路径为
var/lib/baetyl/sdk/RES
。是相对于上述卷配置当中模型文件配置项相对路径var/lib/baetyl/sdk
多了一层RES
。
6.5 创建对应节点并将应用部署到节点上
6.6 进程模式安装节点
6.7 验证边缘节点AI推断服务
通过浏览器打开在线推断服务:http://「ip」 :24401/,上传测试图片,推断结果如下,证明AI服务正常启动。