上云无忧 > 文档中心 > 百度智能云智能边缘 - 可执行脚本类型进程应用
智能边缘
百度智能云智能边缘 - 可执行脚本类型进程应用

文档简介:
1、概述: 在进程应用概述当中提到,进程应有两类,本文重点讲解可执行脚本类型进程应用,并以如何将 飞桨开源模型的SDK 构建成BIE进程应用为例来进行详细说明。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

1、概述

在进程应用概述当中提到,进程应有两类,本文重点讲解可执行脚本类型进程应用,并以如何将 飞桨开源模型的SDK 构建成BIE进程应用为例来进行详细说明。

2、飞桨开源模型SDK说明

  • 百度AI官网 提供了多个免费的 飞桨开源模型的SDK 供用户测试使用,针对不同平台及芯片架构提供了不同的模型SDK。
  • 用户可以基于自身设备架构下载对应的模型SDK。
  • 本文将使用 YoloV3_MobileNetV3 模型 Linux操作系统 下适配 通用ARM芯片 的模型SDK EasyEdge-Linux-YoloV3_MobileNetV3_large-arm-SDK.zip 来做详细讲解。

  • 模型SDK要被可执行脚本运行,需要支持CPP编译,因此模型SDK的目录当中必须包含cpp目录,并且cpp目录当中包含src目录,示例目录如下所示:
.EasyEdge-Linux-arm
├── RES                  # 模型资源文件夹,一套模型适配不同硬件、OS和部署方式
│   ├── model            # 模型结构文件 
│   ├── params           # 模型参数文件
│   ├── label_list.txt   # 模型标签文件
│   ├── infer_cfg.json   # 模型前后处理等配置文件
├── ReadMe.txt
├── cpp                  # C++ SDK 文件目录
    └── baidu_easyedge_linux_cpp_aarch64_ARM_gcc5.4_v1.5.2_20220608.tar.gz
        ├── bin          # 可直接运行的二进制文件
        ├── include      # 二次开发用的头文件 
        ├── lib          # 二次开发用的所依赖的库
        ├── src          # 二次开发用的示例工程
        └── thirdparty   # 第三方依赖
└── python  # Python SDK 文件目录
  • 图像分类物体检测类型的开源模型SDK都支持本文的部署方案
  • OCR 类型模型不是上述目录结构,不支持本文的部署方案

3、可执行脚本类型进程应用运行逻辑

  1. 程序包主要由可执行脚本与程序入口配置文件组成,在入口配置文件当中定义可执行脚本名称。
  2. 可以在创建程序包的时候就引入开源模型SDK,也可以在创建进程应用的时候,通过卷配置引入开源模型SDK配置项。为了让程序包更加通用,此处我们选择后者,即为模型SDK文件创建独立的配置项。
  3. 进程应用部署以后,会下发程序包,以及开源模型SDK配置项。
  4. 边缘计算框架baetyl会下载程序包和开源模型SDK文件。然后根据入口配置文件的定义,在边缘侧执行可执行脚本,在可执行脚本当中定义业务处理逻辑,包含:

    • 检查边缘测试开源模型SDK是否编译完成:

      • 如果已经完成编译,跳过编译环节,直接运行模型二进制程序
      • 如果没有完成编译

        • 解压模型SDK文件
        • 执行编译
        • 运行编译得到的模型二进制程序
  5. 编译需要本地安装make、cmake、g++等环境,如果没有需要提前安装,可以使用以下命令查看是否有安装。
#查看cmake版本 cmake --version
cmake version 3.16.3make --version #查看make版本 make --version
GNU Make 4.2.1 #查看g++版本 g++ --version
g++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0

如果使用CentOS 7.9操作系统,需要升级cmake版本只3.0+,升级GCC版本至9.0+

4、程序包依赖文件准备

4.1 可执行脚本

  1. 开发可执行脚本,假定脚本名称为bootstrap.sh
  2. 将bootstrap.sh授予可执行权限,并压缩为zip文件
# 授予可执行权限 chmod +x bootstrap.sh # 查看文件权限 ls -l bootstrap.sh
-rwxr-xr-x 1 root root 5916 Sep 29 19:37 bootstrap.sh # 压缩为zip文件 zip bootstrap.sh.zip bootstrap.sh
  1. 将bootstrap.sh.zip上传至个人的对象存储,设置为公有云读并记录它的http下载地址,这个下载地址后面会用到。
  2. 针对飞桨开源模型的SDK的运行脚本可以下载bootstrap.sh.zip

4.2 程序入口配置文件

  1. 整理程序入口配置文件:

    • 文件名:program.yml
    • 文件内容:entry: "bootstrap.sh"
  2. 将program.yml压缩为zip文件
zip program.yml.zip program.yml
  1. program.yml.zip上传至个人的对象存储,设置为公有云读并记录它的http下载地址,这个下载地址后面会用到。也可以直接使用此处已经准备好的program.yml.zip

5、创建程序包

  1. 参考进程程序包教程,创建程序包paddle-opensource-sdk-edge-serving,通过HTTP方式引入前面创建的2个文件:

    • bootstrap.sh.zip
    • program.yml.zip
  2. 也可以直接下载(右键->另存为) 进程程序包-paddle-opensource-sdk-edge-serving.json,然后导入程序包。

6、创建进程应用

6.1 创建开源模型SDK配置项

前面提到,需要为每一个开源模型SDK创建独立的配置项,创建步骤如下:

  1. 点击配置管理
  2. 点击创建配置项
  3. 在配置项当中输入配置项信息

    • 名称:easyedge-linux-yolov3-mobilenetv3-large-arm-sdk.zip
    • 类型:http
    • URL:https://baidu-aiap.bj.bcebos.com/easyedge/open-model/46/EasyEdge-Linux-YoloV3_MobileNetV3_large-arm-SDK.zip
    • 文件名:EasyEdge-Linux-YoloV3_MobileNetV3_large-arm-SDK.zip
    • 校验文件:否
    • 是否解压:否。因为上面bootstrap.sh当中包含解压操作,所以此处不需要边缘计算框架baetyl来解压。
  4. 如果不想从头手动创建,可以直接下载(右键-另存为) 配置项-easyedge-linux-yolov3-mobilenetv3-large-arm-sdk.zip.json,然后导入配置项

6.2 创建进程应用,关联程序包与模型SDK配置项

  1. 创建进程应用

    • 名称:paddle-opensource-sdk-edge-serving
  2. 添加服务(程序包)

    • 名称:paddle-opensource-sdk-edge-serving
    • 程序包:关联前面创建的paddle-opensource-sdk-edge-serving
    • 卷配置:

      • 卷名称:paddle-model-file
      • 类型:配置项
      • 参数:关联前面创建的easyedge-linux-yolov3-mobilenetv3-large-arm-sdk.zip这个配置项
      • 目录:/mnt/easyedge。因为上面bootstrap.sh当中默认使用了工作目录/mnt/easyedge作为模型SDK文件的存放地址,所以此处填写/mnt/easyedge。使用mnt/easyedge也可以,都是相对于工作目录的相对路径。
    • 点击确定
    • 点击下一步
  3. 目标节点(可选环境,可以先创建应用,再部署至目标节点)

    • 单节点匹配
    • 选择一个进程节点
    • 点击下一步
  4. 部署方式:

    • 立即部署
    • 点击创建
  5. 如果不想从头手动创建,可以直接下载(右键-另存为) 应用-paddle-opensource-sdk-edge-serving.json,然后导入应用

6.3 进程应用环境变量配置说明

本文引入的可执行脚本,支持传递以下环境变量:

  • PARAMS_SDK_SRC:模型SDK挂载目录,不传默认为/mnt/easyedge
  • PARAMS_PORT:模型服务发布端口号,不传默认为8701
  • PARAMS_EXTRA_LD_LIBRARY_PATH:额外的LD_LIBRARY_PATH,不传默认为空
  • PARAMS_SERIAL_NUM:模型序列号,不传默认为AAAA-AAAA-AAAA-AAAA,开源模型SDK不校验模型序列号,因此可以直接使用默认。
  • EDGE_SOC:部署硬件的SOC,仅对NVIDIA Jetson生效,如果是jetson硬件,此处必须填写jetson

7、验证

  1. 云端查看边缘应用状态

  1. 边缘查看systemctl服务状态

我们知道创建的进程应用名称为paddle-opensource-sdk-edge-serving,使用如下命令检索该服务的运行状态,可以看到状态是loaded active running

# 查询进程应用服务状态 systemctl | grep paddle # 返回结果 baetyl-edge.paddle-opens
ource-sdk-edge-serving.1664451447xmf2rs.paddle-opensource-sdk-edge-serving.1.service  loaded active running 3333

  1. 边缘查看应用日志文件

# 执行命令,如果应用名称是paddle-opensource-sdk-edge-serving,可以直接使用如下命令 
tail -f /var/lib/baetyl/log/baetyl-edge/paddle-opensource-sdk-edge-serving/1*/*.log 
# 返回日志 /usr/bin/ld: ../../../thirdparty/opencv/lib/libopencv_imgproc.so: .dynsym
 local symbol at index 9 (>= sh_info of 3) [100%] Built target easyedge_serving
+ [[ -f /var/lib/baetyl/run/baetyl-edge/paddle-opensource-sdk-edge-serving/166445
1447xmf2rs/paddle-opensource-sdk-edge-serving/1/sdk/EasyEdge-Linux-arm/cpp/src/
demo_serving/build/demo_serving ]] + start_serving
+ local llp=/var/lib/baetyl/run/baetyl-edge/paddle-opensource-sdk-edge-serving/
1664451447xmf2rs/paddle-opensource-sdk-edge-serving/1/sdk/EasyEdge-Linux-arm/cpp
/lib:/var/lib/baetyl/run/baetyl-edge/paddle-opensource-sdk-edge-serving/16644514
47xmf2rs/paddle-opensource-sdk-edge-serving/1/sdk/EasyEdge-Linux-arm
/cpp/thirdparty/opencv/lib:/usr/local/lib:
+ '[' -f /var/lib/baetyl/run/baetyl-edge/paddle-opensource-sdk-edge-serving/166445
1447xmf2rs/paddle-opensource-sdk-edge-serving/1/sdk/EasyEdge-Linux-arm/cpp/bin/edge
kit_serving ']' + LD_LIBRARY_PATH=/var/lib/baetyl/run/baetyl-edge/paddle-opensour
ce-sdk-edge-serving/1664451447xmf2rs/paddle-opensource-sdk-edge-serving/1/sdk/EasyE
dge-Linux-arm/cpp/lib:/var/lib/baetyl/run/baetyl-edge/paddle-opensource-sdk-edge-se
rving/1664451447xmf2rs/paddle-opensource-sdk-edge-serving/1/sdk/EasyEdge-Linux-arm
/cpp/thirdparty/opencv/lib:/usr/local/lib::
+ /var/lib/baetyl/run/baetyl-edge/paddle-opensource-sdk-edge-serving/1664451447xmf2
rs/paddle-opensource-sdk-edge-serving/1/sdk/EasyEdge-Linux-arm/cpp/src/demo_serving
/build/easyedge_serving /var/lib/baetyl/run/baetyl-edge/paddle-opensource-sdk-edge-
serving/1664451447xmf2rs/paddle-opensource-sdk-edge-serving/1/sdk/EasyEdge-Linux-arm
/RES '' 0.0.0.0 8701 2022-09-29 19:37:47,541 INFO [EasyEdge] 281472910028816 Easy
Edge Linux Development Kit 1.5.2(Build ARM 20220608) Release 2022-09-29 19:37:47,786
 INFO [EasyEdge] 281472910028816 HTTP is now serving at 0.0.0.0:8701, holding 1 instances

通过上述日志我们可以发现,该模型在边缘侧发布了一个端口为8701的HTTP服务,因此直接输入http://[ip]:8701 ,可以测试该模型服务是否正常启动。

8、多平台测试应用汇总

8.1 通用x86_64平台

  1. 确认 进程程序包-paddle-opensource-sdk-edge-serving.json 已经被导入
  2. 导入 配置项-easyedge-linux-yolov3-mobilenetv3-x86-sdk.zip.json
  3. 导入 应用-easyedge-linux-yolov3-mobilenetv3-x86.json

8.2 通用ARM64平台

yolov3-mobilenetv3

  1. 确认 进程程序包-paddle-opensource-sdk-edge-serving.json 已经被导入
  2. 导入 配置项-easyedge-linux-yolov3-mobilenetv3-large-arm-sdk.zip.json
  3. 导入 应用-easyedge-linux-yolov3-mobilenetv3-arm.json

pp-yolo-resnet50

  1. 确认 进程程序包-paddle-opensource-sdk-edge-serving.json 已经被导入
  2. 导入 配置项-easyedge-linux-pp-yolo-resnet50-arm-sdk.zip.json
  3. 导入 应用-linux-pp-yolo-resnet50-arm.json

8.3 Jetson平台(近支持jetpack 4.6)

  1. 确认 进程程序包-paddle-opensource-sdk-edge-serving.json 已经被导入
  2. 导入 配置项-easyedge-linux-yolov3-mobilenetv3-large-jetson-sdk.zip.json
  3. 导入 应用-easyedge-linux-yolov3-mobilenetv3-jetson.json

相似文档
  • 基本介绍: 概述: 函数应用由函数运行时和函数脚本两部分组成: 函数运行时为BIE官方提供,支持python36、node85等多种运行时。 函数脚本则需要由用户完成编写。函数脚本以卷挂载的形式与函数应用关联。具体参考 配置管理->函数 章节。 函数应用同时支持容器模式和进程模式。在操作使用上,两者本身没有什么区别。下面以容器模式的函数应用使用指南进行说明。
  • 本章主要介绍如何在函数应用中配置多个从百度 CFC 中导入的函数: CFC 函数创建: 本文将以 Python3.6 为例进行说明。 从百度智能云控制台进入 函数计算CFC,我们选择"华南-广州"区域,点击“创建函数”按钮,选择“空白函数”。
  • 在编写函数时,我们常常会需要引用第三方依赖,本文将介绍如何把代码以及第三方依赖上传至云端 BOS,并在函数应用中引入该函数。 本文将以 Python3.6 为例进行说明。
  • 1、背景描述: 在使用边缘函数时,边缘函数常常需要使用import来引用第三方依赖。本文将介绍如何将依赖包上传至对象存储,以及如何在编写函数代码时直接引用依赖包。本文将以 Python3.6 为例进行说明。
  • 1、场景: 边缘节点上部署了AI模型,现在希望使用函数触发式调用AI模型,并将AI模型返回结果发送到边缘Broker当中,供其他用户应用订阅。 2、方案: 整体边缘函数调用结构如下图所示:
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部