ModelBox上手指南

网友投稿 1378 2022-05-30

ModelBox使用简介

ModelBox是一个专门为开发者,研究人,学生提供的一个易于使用,高效,高扩展的AI推理开发框架,可以帮助开发者快速完成AI推理应用的开发和上线工作。

ModelBox的目标就是解决AI开发者在开发AI应用时的编程复杂度,降低AI应用的开发难度,将复杂的数据处理,并发互斥,多设备协同,组件复用,数据通信,交由ModelBox处理。开发者主要聚焦业务逻辑本身,而不是软件细节。 在提高AI推理开发的效率同时,保证软件的性能,可靠性,安全性等属性。

常用概念

使用ModelBox前,请提前了解ModelBox相关概念和介绍。

• 流程图

ModelBox中用流程图(Graph)来表达应用逻辑。采用有向图的方式,将应用的执行逻辑表达为顶点和边,其中顶点表示了应用的某个数据处理逻辑单元,边则表示了逻辑单元之间的数据传递关系。在ModelBox中,针对流程图的开发,既可以使用文本方式直接编辑,也可以使用可视化的编辑器进行编辑。对于流程图的表述,ModelBox默认采用Graphviz进行解释,即图的表述需要满足Graphviz的语法要求。

• 流单元

ModelBox将流程图中的顶点称为流单元(FlowUnit)。流单元是应用的基本组成部分,也是ModelBox的执行单元。在ModelBox中,内置了大量的基础流单元,开发者可以将这些流单元直接集成到应用流程图中,这也是基于流程图开发的一大好处。除内置流单元外,ModelBox支持流单元的自定义开发,支持的流单元形式多样,如C/C++动态库、Python脚本、模型+Toml配置文件等。

• ModelBox

在应用构建完成后,结合ModelBox的框架才能形成完整可运行的应用。ModelBox作为应用入口,首先进行流单元的扫描加载、应用流程图读取构建,然后接收数据处理请求,数据触发ModelBox中的执行引擎对流单元进行调度,最终完成请求的数据处理任务。

使用流程

本文档以一个简单的应用为例,帮助您快速熟悉端到端使用ModelBox开发应用的流程。本文档开发的应用即打开一个mp4视频文件,推送到RTSP服务器,然后在PC端使用PotPlayer播放该mp4视频文件。

步骤一:启动ModelBox开发镜像

准备工作

已下载SSH登录工具,如PuTTY 。

操作步骤

1. 运行PuTTY,单击“Session”,在“Host Name(or IP address)”的输入框中输入服务器IP,在“Port”输入框中输入端口号,如图2-1所示。

2. 单击“open”,登录端侧设备。

3. 输入账户密码,登录服务器。

4. 根据服务器端硬件规格下载ModelBox开发镜像。

− X86+GPU服务器,执行如下命令下载镜像

docker pull registry-cbu.huawei.com/modelbox/euler/modelbox_cuda101_develop:v1.0.8

− ARM+D310服务器(如Atlas500),执行如下命令下载镜像

docker pull registry-cbu.huawei.com/modelbox/euler/modelbox_ascend_aarch64_develop:v1.0.8

5. 在系统中创建如下docker启动脚本,或将如下脚本按需修改后,粘贴到ssh终端中执行。

注意:脚本中注明[modify]的地方都可以根据自己的需要修改。

− X86+GPU服务器可使用如下脚本。

#! /bin/bash

# ssh map port [modify]

SSH_MAP_PORT=50011

# editor map port [modify]

EDITOR_MAP_PORT=1104

# http server port [modify]

HTTP_SERVER_PORT=7788

# container name [modify]

CONTAINER_NAME="modelbox_instance_`date +%s`_xxx" # xxx可自定义。

HTTP_DOCKER_PORT_COMMAND="-p $HTTP_SERVER_PORT:$HTTP_SERVER_PORT"

sudo docker run -itd --gpus all \

-e NVIDIA_DRIVER_CAPABILITIES=compute,utility,video \

--tmpfs /tmp \

--tmpfs /run \

-v /sys/fs/cgroup:/sys/fs/cgroup:ro \

--name $CONTAINER_NAME \

-v /opt/modelbox:/opt/modelbox \

-v /home:/home \

-p $SSH_MAP_PORT:22 \

-p $EDITOR_MAP_PORT: 1104 $HTTP_DOCKER_PORT_COMMAND \

registry-cbu.huawei.com/modelbox/euler/modelbox_cuda101_develop:v1.0.8 /usr/sbin/init

− ARM+D310服务器可使用如下脚本。

#!/bin/bash

# ssh map port, [modify]

SSH_MAP_PORT=50011

# editor map port [modify]

EDITOR_MAP_PORT=1144

# http server port [modify]

HTTP_SERVER_PORT=7788

# container name [modify]

CONTAINER_NAME="modelbox_instance_arm64_`date +%s`_xxx" # xxx可自定义。

HTTP_DOCKER_PORT_COMMAND="-p $HTTP_SERVER_PORT:$HTTP_SERVER_PORT"

sudo docker run -itd --privileged --cap-add=SYS_PTRACE \

--tmpfs /tmp --tmpfs /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro \

--device=/dev/davinci0 --device=/dev/davinci_manager --device=/dev/hisi_hdc --device=/dev/devmm_svm \

--name $CONTAINER_NAME -v /opt/modelbox:/opt/modelbox -v /home:/home \

-p $SSH_MAP_PORT:22 -p $EDITOR_MAP_PORT:1144 $HTTP_DOCKER_PORT_COMMAND \

registry-cbu.huawei.com/modelbox/euler/modelbox_ascend_aarch64_develop:v1.0.8 /usr/sbin/init

6. 执行如下命令查看本服务器已启动的所有镜像,保存新启动的镜像ID。

docker ps –a|grep modelbox

7. 执行如下命令进入ModelBox。

docker exec -it $docker_id bash # 其中$docker_id 指新启动的镜像ID。

8. 执行如下命令修改root用户密码。密码要求至少三类字符组合,如数字、字母、特殊符号。

passwd root

9. 退出容器,安装RTSP服务器,用于推送实时的RTSP视频流。

− X86+GPU服务器可选择下载 EasyDarwin ,下载后解压文件,相关配置在easydarwin.ini文件中,其中默认RTSP端口号为554,记住它,后面会用到。

执行start.sh启动RTSP服务器。

− ARM+D310服务器可选择下载 rtsp-simple-server ,下载后解压得到可执行文件和配置文件。

打开rtsp-simple-server.yml可修改RTSP服务相关的配置参数,如端口号默认为8554,可以根据需要修改。

修改后,执行如下命令后台启动RTSP服务器。

nohup ./rtsp-simple-server &

步骤二:远程连接ModelBox

准备工作

已下载并安装Visual Studio Code。注意:请下载1.57.1及以下版本的Visual Studio Code。

操作步骤

1. 打开Visual Studio Code,单击左侧图标,搜索并安装Remote-SSH、Remote-Containers、Docker等插件。

2. 单击左侧图标,鼠标移至“SSH TARGETS”右侧的,在右侧搜索框中选择“config”

3. 配置ModelBox容器的远程连接,如上图所示。

Host:用户可自定义本次远程连接的名称。

HostName:服务器IP。

Port:与步骤 一 :启动 ModelBox 开发镜像 创建docker时“SSH_MAP_PORT”的值一致。

User:填写“root”。

4. 配置完,单击“SSH TARGETS”下方出现的图标。新弹出一个窗口。

5. 在新窗口,按提示输入ModelBox容器root帐号的密码,即步骤 一 :启动 ModelBox 开发镜像 中修改后的新密码。

等待一会,即可连接上ModelBox容器。

连接成功后,单击“Open folder”可直接打开ModelBox容器中的文件。

步骤三:开发ModelBox应用

开发流程图

本章节以开发一个简单的应用为例,介绍如何在Visual Studio Code开发ModelBox应用,该应用即打开一个mp4视频文件,推送到RTSP服务器,然后在PC端使用PotPlayer播放该mp4视频文件。

准备工作

在PC端安装PotPlayer播放器,用于播放RTSP视频流。

操作步骤

1. 在服务器创建“toml”格式文件,用来描述流程图。

ModelBox会根据流程图构建应用处理逻辑。

[driver]

dir = ["/usr/local/"]

skip-default = false

[profile]

profile=false

trace=false

dir="/tmp/"

[log]

level="DEBUG"

[graph]

format = "graphviz"

graphconf = """digraph test {

node [shape=Mrecord]

queue_size = 16

ModelBox上手指南

video_input[type=flowunit, flowunit=video_input, device=cpu, deviceid=0, source_url="XXX/XXX/XXX.mp4"]

videodemuxer[type=flowunit, flowunit=videodemuxer, device=cpu, deviceid=0]

videodecoder[type=flowunit, flowunit=videodecoder, device=cpu, deviceid=0, pix_fmt=rgb]

videoencoder[type=flowunit, flowunit=videoencoder, device=cpu, deviceid=0, default_dest_url="rtsp://IP:PORT/stream", format=rtsp]

video_input:stream_meta -> videodemuxer:stream_meta

videodemuxer:video_packet -> videodecoder:video_packet

videodecoder:frame_info -> videoencoder: frame_info

}"""

[flow]

desc = "test for video streams"

其中,“source_url”和“default_dest_url”需要根据实际情况自己配置。

− “XXX/XXX/XXX.mp4”:实际mp4视频文件存放路径。

− “IP”:服务器IP。

− “PORT”:步骤 一 :启动 ModelBox 开发镜像 中安装的RTSP服务器配置端口号。

例如source_url="home/test.mp4"、default_dest_url="rtsp://10.10.10.100:8554/stream"。

2. ModelBox使用graphviz格式描述流程图,将流程图定义内容拷贝到graphhiz 工具 中进行查看。

3. 在Visual Studio Code执行如下命令,执行流程图。

modelbox-tool -verbose -log-level INFO flow -run xxx/xxx.toml

其中,“xxx/xxx.toml”为“toml”格式文件的实际存放路径。

4. 打开浏览器,输入“toml”格式文件中配置的“default_dest_url”地址,选择对话框中“打开PotPlayer专用播放”。

弹出的PotPlayer将会播放“toml”格式文件中配置的mp4视频文件。

开发流单元

上一节所开发的应用使用的是ModelBox自带的流单元,本章节在此基础上使用Python语言开发一个简单的流单元,嵌入到应用中,即在视频页面左上方写上“Hello World”。

1. 在Visual Studio Code执行如下命令,在指定路径下基于Python流单元模板生成“HelloWorld”流单元。

modelbox-tool create -t python -n HelloWorld -d ./examples/flowunits

其中,“./examples/flowunits”为存放流单元的实际路径。

生成的流单元包括“.py”文件和“.toml”配置文件。

2. “.py”文件描述了流单元的处理逻辑,在“.py”文件中增加OpenCV与numpy包的引用,修改其中的process函数,具体如下。

import cv2

import numpy as np

def process(self, data_context):

# Process the data

in_data = data_context.input("Input")

out_data = data_context.output("Output")

for buffer_img in in_data:

width = buffer_img.get('width')

height = buffer_img.get('height')

channel = buffer_img.get('channel')

img_data = np.array(buffer_img.as_object(), copy=False)

img_data = img_data.reshape((height, width, channel))

cv2.putText(img_data, 'Hello World', (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)

out_buffer = self.create_buffer(img_data)

out_buffer.copy_meta(buffer_img)

out_data.push_back(out_buffer)

return modelbox.Status.StatusCode.STATUS_SUCCESS

“.toml”配置文件配置该流单元的名称、类别、输入输出端口等信息,当前不用修改。

3. 修改在4.2 开发流单元创建的流程图“toml”格式文件,具体内容如下。

[driver]

dir = ["/usr/local/" ,

"path-to-HelloWorld-flowunits"]

skip-default = false

[profile]

profile=false

trace=false

dir="/tmp/"

[log]

level="DEBUG"

[graph]

format = "graphviz"

graphconf = """digraph test {

node [shape=Mrecord]

queue_size = 16

video_input[type=flowunit, flowunit=video_input, device=cpu, deviceid=0, source_url="xxx/xxx.mp4"]

videodemuxer[type=flowunit, flowunit=videodemuxer, device=cpu, deviceid=0]

videodecoder[type=flowunit, flowunit=videodecoder, device=cpu, deviceid=0, pix_fmt=rgb]

HelloWorld[type=flowunit, flowunit=HelloWorld, device=cpu, deviceid=0]

videoencoder[type=flowunit, flowunit=videoencoder, device=cpu, deviceid=0, default_dest_url="rtsp://IP:PORT/stream", format=rtsp]

video_input:stream_meta -> videodemuxer:stream_meta

videodemuxer:video_packet -> videodecoder:video_packet

videodecoder:frame_info -> HelloWorld: Input

HelloWorld: Output -> videoencoder: frame_info

}"""

[flow]

desc = "test for video streams"

其中,

− [driver]配置项的“dir”中添加了HelloWorld流单元的路径“path-to-HelloWorld-flowunits”,根据实际路径配置。

− “source_url”和“default_dest_url”需要根据实际情况自己配置,和上一节创建的“toml”格式文件内容一致。

4. ModelBox使用graphviz格式描述流程图,将流程图定义内容拷贝到graphhiz 工具 中进行查看。

5. 在Visual Studio Code执行如下命令,执行流程图。

modelbox-tool -verbose -log-level INFO flow -run xxx/xxx.toml

其中,“xxx/xxx.toml”为“toml”格式文件的实际存放路径。

6. 打开浏览器,输入“toml”格式文件中配置的“default_dest_url”地址,选择对话框中“打开PotPlayer专用播放”。

弹出的PotPlayer将会播放“toml”格式文件中配置的mp4视频文件。

AI 华为HiLens

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:[转载]Cloudfoundry对接华为公有云部署指南
下一篇:Spring Boot微信扫码支付
相关文章