上云无忧 > 文档中心 > 百度智能云智能边缘 - 部署模型SDK至Intel Movidius设备
智能边缘
百度智能云智能边缘 - 部署模型SDK至Intel Movidius设备

文档简介:
1、概述: 进程模式与容器模式不同,进程模式强依赖于边缘节点的运行环境变量,比如lib库、系统变量等参数。如果没有提前设置好path等环境变量,可能导致云端下发的二进制程序在边缘节点上无法正常运行,甚至运行出错。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

1、概述

进程模式与容器模式不同,进程模式强依赖于边缘节点的运行环境变量,比如lib库、系统变量等参数。如果没有提前设置好path等环境变量,可能导致云端下发的二进制程序在边缘节点上无法正常运行,甚至运行出错。

而所有的运行环境变量,本质上都可以通过脚本命令进行动态设置,因此如果在一个shell脚本提前设置好环境变量,最后再执行二进制程序,就不再需要为每一台设备重复去设置环境变量了。

本文将描述如何在一个脚本(run.sh)当中定义:(a)需要加载的环境变量和(b)需要运行的二进制程序。然后通过这个脚本执行入口(entry)实现BIE云边协同的进程模式。

2、获取 Movidius 类型SDK

参考 模型转换 章节,此处我们需要再多生成一个 Movidius 类型的SDK。

进入我的模型界面,点击生成端模型

选择Jetson芯片和Linux操作系统,点击发布

过几分钟,可以在离线计算SDK界面看到生成的Jetson SDK,如下图所以

点击下载获得Jetson专用SDK:EasyEdge-Linux-m38748-b38748-movidius.zip 。

3、申请测试序列号

点击上图当中的获取序列号激活,进入到序列号管理界面,点击新增测试序列号来获取测试序列号,如下图所示:

4、获得模型二进制运行程序

4.1 检查SDK是否带有模型二进制执行程序

SDK当中的RES目录是模型资源文件,CPP目录是模型运行程序,解压CPP目录当中的文件,找到demo目录,查看是否有bin文件夹。

如下图所示,SDK包当中带了二进制执行程序(easyedge_serving、easyedge_multhread、easyedge_batch_inferenc),针对这种SDK,我们可以直接使用SDK包当中提到的二进制程序。

本文使用x86_64架构的cpp包,即baidu_easyedge_linux_cpp_x86_64_VPU_gcc7.5_v1.3.2_20210824.tar.gz这个压缩文件。

4.2 编译SDK获得模型二进制执行程序

如果SDK包当中不带模型二进制执行程序,则需要通过编译程序获取模型二进制执行程序,可以参考:https://ai.baidu.com/ai-doc/EASYDL/1k38n3ade#测试demo

5、本地验证

5.1 检查是否识别movidius神经计算棒

对于硬件使用为Intel Movidius MyRIAD2 / MyRIAD X 的,如果宿主机找不到神经计算棒Intel® Neural Compute Stick,需要执行以下命令添加USB Rules:

cp ${cpp_kit位置路径}/thirdparty/openvino/deployment_tools/inference_engine/external/97-myriad
-usbboot.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules sudo udevadm trigger sudo ldconfig

执行命令以后,建议重启一下。

5.2 制作本地run.sh脚本并验证

创建run.sh脚本,放在cpp_kit目录下,如下图所示:

run.sh的脚本内容如下:

#!/bin/bash workpath=$(pwd) param_y="$1 $2 $3 $4" source $workpath/thirdparty/openvino/bin/setupvars.sh
 && LD_LIBRARY_PATH=$workpath/thirdparty/opencv/lib:$workpath/lib:$LD_LIBRARY_PATH $workpath/bin/easyedge_serving $param_y

将上述x86_64整个目录copy至本地测试机器,然后将RES的绝对路径和测试SN号填写到脚本当中。然后授予run.sh可执行权限,命令如下

chmod 755 run.sh

最后在本地执行测试

# 必须要管理员权限,否则识别不到加速卡 sudo ./run.sh /xx/xx/xx/x86_64/RES {测试SN号} 0.0.0.0 24401

正常情况下,打开浏览器,输入:http://[ip]:24401 ,即可看到测试界面。

6、利用BIE进程模式部署

6.1 工作目录的说明

进程模式当中,工作目录路径格式如下:/var/lib/baetyl/run/baetyl-edge/{app-name}/{app-version}/{service-name}/1/。

通过进程模式下发的可执行脚本可以通过如下方式获取真实的工作路径。

workpath=$(pwd)

6.2 进程模式运行说明

本节介绍如何下发一个可执行脚本,并在脚本中定义:

  • 需要加载环境变量
  • 需要运行的模型二进制执行程序
  • 需要被调用的模型文件

如果要使用BIE实现模型下发并运行,需要将上述内容分割为以下几部分:

  • 下发文件

    • 程序包:

      • run.sh:需要有可执行权限
      • program.yml:配置文件,在program.yml配置文件当中定义了entry: "run.sh"
      • cpp_kit相关文件:在run.sh当中定义会使用cpp_kit当中的二进制运行程序,以及依赖的lib库。
    • 配置项:模型资源文件,上传对象存储
  • 启动参数

    • 模型资源文件下发以后的工作目录。
    • 模型序列号
    • 服务暴露IP
    • 服务暴露端口

基于上述需要的内容,我们开始后面的的操作。

6.3 制作程序包并创建程序包配置项

本demo当中使用的程序包,主要包含可执行脚本程序配置文件program.ymlcpp_kit文件:

  • run.sh:具有可执行权限的运行脚本,run.sh的脚本如下:

#!/bin/bash workpath=$(pwd) # program_apath是固定的,在后面创建进程服务的时候,选择程序包以后,
就设定了程序路径为工作目录下的/var/lib/baetyl/bin目录。 program_apath=$workpath/var/lib/baetyl/bin
 echo "pram1 is $1" echo "pram2 is $2" echo "pram3 is $3" echo "pram4 is $4" param_x=$workpath"/"$1
" "$2" "$3" "$4 param_y="$workpath/$1 $2 $3 $4" echo "program_apath is $program_apath" echo "param_x
 is $param_x" echo "param_y is $param_y" source $program_apath/thirdparty/openvino/bin/setupvars.sh
 && LD_LIBRARY_PATH=$program_apath/thirdparty/opencv/lib:$program_apath/lib:$LD_LIBRARY_PATH
 $program_apath/bin/easyedge_serving $param_y

  • program.yml:可执行文件的配置文件,在其中定义了entry: "run.sh",对应本地验证程序当中的./run.sh命令。详细配置如下:

  • cpp_kit:模型二进制程序以及依赖lib库

程序包整理目录结构如下图所示:

将上述文件进行压缩,建议使用zip压缩命令,执行命令如下:

$ ls ReadMe.txt	bin		include		lib		program.yml	run.sh		src
		thirdparty # 将当前目录下的文件压缩到压缩包当中 $ zip -r movidius-native.zip *

将压缩包上传到对象存储中,然后在BIE云管平台当中创建程序包类型配置项。

6.4 添加模型文件

将模型资源文件RES目录压缩,并上传至对象存储,然后在BIE配置项中引入这个压缩文件。

制作压缩包建议使用zip压缩命令,执行命令如下:

#  查看当前目录下的文件,应该可以看到RES目录 $ ls RES	cpp	python # 将RES目录压缩 $ zip -r RES.zip RES

6.5 创建进程应用

添加进程服务,将模型以卷的形式添加到服务中。这里的目录填的是工作目录下的相对路径,如下图所示。

添加启动参数如下:

  • 因为上面的RES.zip解压以后,会带有一个RES目录,所以启动参数当中的模型资源文件路径为var/lib/baetyl/sdk/RES。是相对于上述卷配置当中模型文件配置项相对路径var/lib/baetyl/sdk多了一层RES。
  • 此处的4个参数,与run.sh脚本当中的4个输入参数$1 $2 $3 $4相对应

6.6 创建对应节点并将应用部署到节点上

6.7 验证边缘节点AI推断服务

通过浏览器打开在线推断服务:http://「ip」 :24401/,上传测试图片,推断结果如下,证明AI服务正常启动。

相似文档
  • 本文档介绍如何通过进程模式下发easyedge的linux-python-sdk。 本文档使用了easyedge开源的sdk做验证。 依赖环境安装: 参考 easyedge linux-python-sdk 使用指南: (1) 安装paddle环境 x86用paddlepaddle,arm可以安装paddlelite。 (2) 安装easyedge python wheel包 在下载的sdk中包含了对应的wheel包。安装版本需要与python版本对应。
  • 1、概述: 本文重点介绍使用EasyDL训练一个烟火检测模型,并获取离线部署SDK,然后通过BIE将离线模型SDK部署至边缘节点设备。 2、训练集准备: 本身使用开源烟火检测标注数据集fire-smoke-detect-yolov4,下载 烟火(2059张图像,含标签)-百度云盘下载链接-提取码3q4r。
  • 本文介绍如何在AI中台导入模型,然后在AI中台模型仓库直接下发模型至边缘节点。 前提条件: 有一个可用的测试边缘节点设备,本案例使用一个2核8G的BCC云服务器作为测试边缘节点。 按照快速入门教程,将测试边缘节点连接云端。
  • 本文介绍如何在AI中台的模型中心导入原始模型,转换成适配NVIDIA Jetson的模型文件,并下发至设备边缘。 前提条件: 有一个可测试的边缘节点设备。 边缘节点连接至云端。 有一个模型,本实验用的是一个图像分类模型fuild-mobilenceV2.zip。该模型支持识别检测猴子、鸡、狗、猫等上百种生物。
  • 本文介绍如何在AI中台的模型中心导入原始模型,然后通过模型转换,生成适配通用X86芯片/通用ARM芯片的图像分类模型,并部署至设备边缘。 一、前提条件: 有一个可测试的边缘节点设备。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部