部署通用CPU模型
所有文档

          智能边缘 BIE

          部署通用CPU模型

          本教程说明如何使用EasyEdge生成端模型,以及如何使用BIE将模型下发至边缘设备。

          一、前提假设

          本案例的前提条件是已完成快速入门当中的操作,边缘节点已连接至云端,并处于在线状态。


          二、在EasyEdge控制台生成端模型

          1.获取mobilnetv1-ssd-voc-fluid原模型

          原始模型可以是用户自己训练的模型,也可以使用现成的模型。在本教程当中,我们将使用一个基于 paddle 框架的 物体检测 模型 mobilnetv1-ssd-voc-fluid

          image.png


          2.在EasyEdge上传原模型

          打开EasyEdge官网,点击 立即使用 ,登录EasyEdge控制台。这里使用的登录账号就是百度智能云的账号,与BIE账号一致。

          image.png

          进入 EasyEdge,点击 上传模型

          image.png

          上传原模型 界面,输入原模型信息:

          • 模型名称:用户自定义,此处输入 mobilnetv1-ssd-voc-fluid-paddle
          • 模型类型:物体检测
          • 模型框架:PaddlePaddle
          • 模型网络:MobileNetV1-SSD
          • 网络结构:选择模型目录当中以的model文件
          • 网络参数:选择模型目录当中以的params文件
          • 模型标签:选择模型目录当中以的label_list.txt
          • 其他配置:选择模型目录当中以的preprocess_args.json
          • 自定义分组:用户自定义,此处输入 PaddlePaddle
          • 功能描述:用户自定义,此处输入 MobileNet SSD Demo

          image.png


          3.生成端模型

          点击 校验并提交模型 ,校验通过以后,进入到 生成端模型 菜单,在此处设置此模型需要适配的端环境,如下图所示:

          image.png

          点击 生成模型 ,进入到模型生成阶段,这个过程大约需要几分钟,实际实际取决于模型的大小。

          此处我们生成基于Linux操作系统的通用ARM芯片版本和通用x86芯片版本的端模型,分别对应 Linux-arm64Linux-amd64 这两种架构。

          4.在SDK列表下载端模型

          在模型生成完毕以后,进入到 SDK列表 ,可以看到生成的端模型

          image.png

          点击下载,获取V1(amd64)、V2(arm64)两个不同芯片架构版本的端模型,并计算两个zip文件的MD5值,后续用于模型下发校验文件完整性。

          版本 模型SDK文件名 模型文件MD5值 芯片架构
          V1 mobilnetv1-ssd-voc-fluid-amd64.zip d2664dfd726e9bbcf1b42b81b357dc26 amd64
          V2 mobilnetv1-ssd-voc-fluid-arm64.zip 64c2fad351a5bf455d382cbf864316b0 arm64

          此处获得的mobilnetv1-ssd-voc-fluid-amd64.zip 点此下载mobilnetv1-ssd-voc-fluid-arm64.zip 点此下载 两个文件就是我们的AI模型。


          三、在BIE控制台创建模型服务并下发

          1.AI模型上传

          在得到AI模型以后,需要将AI模型上传到对象存储当中,BIE支持从以下对象存储当中获取模型文件:

          • Baidu BOS
          • AWS S3标准的对象存储,例如AWS S3,CEPH,Minio

          模型上传Baidu BOS

          如果使用的是Baidu BOS,操作步骤如下:

          • 创建bucket:bucket-demo-01
          • 在bucket当中创建目录:easyedge
          • 将模型文件上传到easyedge目录下,如下图所示:

          image.png

          模型上传到Minio

          如果使用自己搭建的Minio,操作步骤如下:

          • 登录Minio
          • 输入用户名密码,一般默认用户名密码如下:

            • ak:AKIAIOSFODNN7EXAMPLE
            • sk:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
          • 创建bucket:model-upload
          • 上传模型文件到bucket下,如下图所示:

          image2020-9-27_11-30-43.png

          2.创建AI模型配置项

          进入配置管理界面,点击创建配置项,填写配置项名称:mobilnetv1-ssd-voc-fluid-arm64。然后点击引入文件,填写AI模型文件在对象存储当中的下载信息。

          image.png

          方案一:从Baidu BOS引入文件

          在公有云环境下,BIE与BOS账号集成打通,如果从BOS引入文件,不需要输入用户名密码,直接通过下拉菜单选择模型文件位置即可。如果是引入非当前BIE账号下的模型文件,则需要输入访问BOS的AK\SK

          image2020-9-25_17-37-9.png

          方案二:从AWS S3引入文件

          如果需要从AWS S3,或者是满足AWS S3标准的兑现存储(CEPH、Minio)当中下载模型文件,则按照以下案例输入模型文件下载信息,实际使用的的是自己搭建的minio服务。

          image.png

          3.创建AI应用并部署到边缘节点

          进入应用部署界面,点击创建应用,按照提示以此填写:①基本信息->②服务配置->③目标节点

          ①基本信息

          在基本信息界面填写应用的基本信息,如下图所示:

          image.png

          • 应用名称:edge-ai-demo-app
          • 应用类型:容器应用
          • 应用描述:可选,可为空

          ②服务配置

          在服务配置界面,填写服务信息,点击添加服务,在弹出框当中填写如下信息:

          image.png

          image.png

          • 基本信息

            • 服务名称:ai-infer-service
            • 服务镜像地址:hub.baidubce.com/baetyl/easyedge-inference:0.5.1,这是一个多平台镜像,支持 arm64amd64 两种芯片架构。
          • 卷配置

            • 卷名称:ai-model
            • 类型:配置项
            • 参数:从下拉框当中选择前面创建的AI模型配置项,easyedge-model-mobilnet
            • 容器目录:/var/db/baetyl
            • 读写权限:读写
          • 端口映射

            • 宿主机端口:8088
            • 容器端口:8088
            • 协议:TCP
          • 启动参数(启动参数与模型和推断镜像强相关,启动参数并非所有模型都是标准的)

            • bash
            • run.sh
            • /var/db/baetyl/RES
            • 0.0.0.0
            • 8088
          • 其他

            • 使用默认配置

          ③目标节点

          在应用部署当中,可以选择选择将应用部署至哪些边缘节点,部署的逻辑是通过边缘节点的标签进行匹配。例如edge-node这个边缘节点有一个baetyl-node-name: edge-node这样的KV标签,如下图所示:

          image.png

          那么目标节点界面,点击匹配标签,添加baetyl-node-name: edge-node作为目标节点标签,如下图所示:

          image.png

          在添加完毕以后,系统自动基于标签匹配出目标节点为edge-node,如下图所示:

          image.png

          4.验证边缘AI服务

          打开原模型的label_list.txt文件,我们可以看到此模型可以识别以下种类物体: background、 aeroplane、 bicycle、 bird、 boat、 bottle、 bus、 car、 cat、 chair、 cow、 diningtable、 dog、 horse、 motorbike、 person、 pottedplant、 sheep、 sofa、 train、 tvmonitor。

          可以看到此模型可以识别这两种物体,我们可以找一张遛狗的测试图片

          浏览器校验

          本案例当中的AI推断服务提供了web操作界面,所以可以通过web界面上传上述测试图片。打开浏览器,访问:http://[边缘节点IP地址]:8088/。如果能够打开界面,表示边缘推断服务正常启动。此时上传测试图片,推断服务将自动给出推断结果,如下图所示,在置信度为80%时,识别出图片当中有3个人,1条狗,置信度可用户自定义修改。

          image2020-8-18_20-1-47.png

          API校验

          ai-infer-service作为一个容器服务运行在边缘节点,它同时对外提供API访问接口,支持被其他应用调用,并返回物体检测结果。具体API使用参考EasyEdge SDK文档

          下面通过python代码调用接口进行示例说明:

          • 拷贝下面的python代码保存至本地,命名为test_ai_model_api.py。
          import requests
           
          with open('./1.jpg', 'rb') as f:
              img = f.read()
           
          # params is GET params,  data is POST Body
          result = requests.post('http://[边缘节点ip]:8088/', params={'threshold': 0.8},data=img).json()
           
          print (result)
          • 下载图片 1.jpg,保存至与test_ai_model_api.py同目录下。
          • 执行test_ai_model_api.py
          python test_ai_model_api.py
          • 查看接口返回结果为如下JSON,同样标识识别出1个人和3条狗。
          {
              'cost_ms': 179,
              'error_code': 0,
              'results': [{
                  'confidence': 0.9943918585777283,
                  'index': 12,
                  'label': 'dog',
                  'location': {
                      'height': 397,
                      'left': 100,
                      'top': 691,
                      'width': 383
                  },
                  'name': 'dog',
                  'score': 0.9943918585777283,
                  'x1': 0.14523082971572876,
                  'x2': 0.6987910866737366,
                  'y1': 0.6263848543167114,
                  'y2': 0.9866765737533569
              }, {
                  'confidence': 0.9922541379928589,
                  'index': 15,
                  'label': 'person',
                  'location': {
                      'height': 304,
                      'left': 547,
                      'top': 332,
                      'width': 92
                  },
                  'name': 'person',
                  'score': 0.9922541379928589,
                  'x1': 0.7918291687965393,
                  'x2': 0.9249030947685242,
                  'y1': 0.30082497000694275,
                  'y2': 0.5762962102890015
              }, {
                  'confidence': 0.9846013784408569,
                  'index': 15,
                  'label': 'person',
                  'location': {
                      'height': 1020,
                      'left': 311,
                      'top': 63,
                      'width': 308
                  },
                  'name': 'person',
                  'score': 0.9846013784408569,
                  'x1': 0.4507014751434326,
                  'x2': 0.8969031572341919,
                  'y1': 0.05781838297843933,
                  'y2': 0.9817966222763062
              }, {
                  'confidence': 0.9536634683609009,
                  'index': 15,
                  'label': 'person',
                  'location': {
                      'height': 357,
                      'left': 35,
                      'top': 327,
                      'width': 149
                  },
                  'name': 'person',
                  'score': 0.9536634683609009,
                  'x1': 0.05083557963371277,
                  'x2': 0.2662031948566437,
                  'y1': 0.2963605523109436,
                  'y2': 0.6200013160705566
              }]
          }
          上一篇
          EasyEdge概述
          下一篇
          部署专用NVIDIA Jetson模型