【云小課】EI第29課 大數(shù)據(jù)時(shí)代的隱私利器-GaussDB(DWS)數(shù)據(jù)脫敏
1599
2025-03-31
ModelBox使用簡介
ModelBox是一個(gè)專門為開發(fā)者,研究人,學(xué)生提供的一個(gè)易于使用,高效,高擴(kuò)展的AI推理開發(fā)框架,可以幫助開發(fā)者快速完成AI推理應(yīng)用的開發(fā)和上線工作。
ModelBox的目標(biāo)就是解決AI開發(fā)者在開發(fā)AI應(yīng)用時(shí)的編程復(fù)雜度,降低AI應(yīng)用的開發(fā)難度,將復(fù)雜的數(shù)據(jù)處理,并發(fā)互斥,多設(shè)備協(xié)同,組件復(fù)用,數(shù)據(jù)通信,交由ModelBox處理。開發(fā)者主要聚焦業(yè)務(wù)邏輯本身,而不是軟件細(xì)節(jié)。 在提高AI推理開發(fā)的效率同時(shí),保證軟件的性能,可靠性,安全性等屬性。
常用概念
使用ModelBox前,請(qǐng)?zhí)崆傲私釳odelBox相關(guān)概念和介紹。
? 流程圖
ModelBox中用流程圖(Graph)來表達(dá)應(yīng)用邏輯。采用有向圖的方式,將應(yīng)用的執(zhí)行邏輯表達(dá)為頂點(diǎn)和邊,其中頂點(diǎn)表示了應(yīng)用的某個(gè)數(shù)據(jù)處理邏輯單元,邊則表示了邏輯單元之間的數(shù)據(jù)傳遞關(guān)系。在ModelBox中,針對(duì)流程圖的開發(fā),既可以使用文本方式直接編輯,也可以使用可視化的編輯器進(jìn)行編輯。對(duì)于流程圖的表述,ModelBox默認(rèn)采用Graphviz進(jìn)行解釋,即圖的表述需要滿足Graphviz的語法要求。
? 流單元
ModelBox將流程圖中的頂點(diǎn)稱為流單元(FlowUnit)。流單元是應(yīng)用的基本組成部分,也是ModelBox的執(zhí)行單元。在ModelBox中,內(nèi)置了大量的基礎(chǔ)流單元,開發(fā)者可以將這些流單元直接集成到應(yīng)用流程圖中,這也是基于流程圖開發(fā)的一大好處。除內(nèi)置流單元外,ModelBox支持流單元的自定義開發(fā),支持的流單元形式多樣,如C/C++動(dòng)態(tài)庫、Python腳本、模型+Toml配置文件等。
? ModelBox
在應(yīng)用構(gòu)建完成后,結(jié)合ModelBox的框架才能形成完整可運(yùn)行的應(yīng)用。ModelBox作為應(yīng)用入口,首先進(jìn)行流單元的掃描加載、應(yīng)用流程圖讀取構(gòu)建,然后接收數(shù)據(jù)處理請(qǐng)求,數(shù)據(jù)觸發(fā)ModelBox中的執(zhí)行引擎對(duì)流單元進(jìn)行調(diào)度,最終完成請(qǐng)求的數(shù)據(jù)處理任務(wù)。
使用流程
本文檔以一個(gè)簡單的應(yīng)用為例,幫助您快速熟悉端到端使用ModelBox開發(fā)應(yīng)用的流程。本文檔開發(fā)的應(yīng)用即打開一個(gè)mp4視頻文件,推送到RTSP服務(wù)器,然后在PC端使用PotPlayer播放該mp4視頻文件。
步驟一:啟動(dòng)ModelBox開發(fā)鏡像
準(zhǔn)備工作
已下載SSH登錄工具,如PuTTY 。
操作步驟
1. 運(yùn)行PuTTY,單擊“Session”,在“Host Name(or IP address)”的輸入框中輸入服務(wù)器IP,在“Port”輸入框中輸入端口號(hào),如圖2-1所示。
2. 單擊“open”,登錄端側(cè)設(shè)備。
3. 輸入賬戶密碼,登錄服務(wù)器。
4. 根據(jù)服務(wù)器端硬件規(guī)格下載ModelBox開發(fā)鏡像。
? X86+GPU服務(wù)器,執(zhí)行如下命令下載鏡像
docker pull registry-cbu.huawei.com/modelbox/euler/modelbox_cuda101_develop:v1.0.8
? ARM+D310服務(wù)器(如Atlas500),執(zhí)行如下命令下載鏡像
docker pull registry-cbu.huawei.com/modelbox/euler/modelbox_ascend_aarch64_develop:v1.0.8
5. 在系統(tǒng)中創(chuàng)建如下docker啟動(dòng)腳本,或?qū)⑷缦履_本按需修改后,粘貼到ssh終端中執(zhí)行。
注意:腳本中注明[modify]的地方都可以根據(jù)自己的需要修改。
? X86+GPU服務(wù)器可使用如下腳本。
#! /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服務(wù)器可使用如下腳本。
#!/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. 執(zhí)行如下命令查看本服務(wù)器已啟動(dòng)的所有鏡像,保存新啟動(dòng)的鏡像ID。
docker ps –a|grep modelbox
7. 執(zhí)行如下命令進(jìn)入ModelBox。
docker exec -it $docker_id bash # 其中$docker_id 指新啟動(dòng)的鏡像ID。
8. 執(zhí)行如下命令修改root用戶密碼。密碼要求至少三類字符組合,如數(shù)字、字母、特殊符號(hào)。
passwd root
9. 退出容器,安裝RTSP服務(wù)器,用于推送實(shí)時(shí)的RTSP視頻流。
? X86+GPU服務(wù)器可選擇下載 EasyDarwin ,下載后解壓文件,相關(guān)配置在easydarwin.ini文件中,其中默認(rèn)RTSP端口號(hào)為554,記住它,后面會(huì)用到。
執(zhí)行start.sh啟動(dòng)RTSP服務(wù)器。
? ARM+D310服務(wù)器可選擇下載 rtsp-simple-server ,下載后解壓得到可執(zhí)行文件和配置文件。
?
打開rtsp-simple-server.yml可修改RTSP服務(wù)相關(guān)的配置參數(shù),如端口號(hào)默認(rèn)為8554,可以根據(jù)需要修改。
修改后,執(zhí)行如下命令后臺(tái)啟動(dòng)RTSP服務(wù)器。
nohup ./rtsp-simple-server &
步驟二:遠(yuǎn)程連接ModelBox
準(zhǔn)備工作
已下載并安裝Visual Studio Code。注意:請(qǐng)下載1.57.1及以下版本的Visual Studio Code。
操作步驟
1. 打開Visual Studio Code,單擊左側(cè)圖標(biāo),搜索并安裝Remote-SSH、Remote-Containers、Docker等插件。
2. 單擊左側(cè)圖標(biāo),鼠標(biāo)移至“SSH TARGETS”右側(cè)的,在右側(cè)搜索框中選擇“config”
3. 配置ModelBox容器的遠(yuǎn)程連接,如上圖所示。
Host:用戶可自定義本次遠(yuǎn)程連接的名稱。
HostName:服務(wù)器IP。
Port:與步驟 一 :啟動(dòng) ModelBox 開發(fā)鏡像 創(chuàng)建docker時(shí)“SSH_MAP_PORT”的值一致。
User:填寫“root”。
4. 配置完,單擊“SSH TARGETS”下方出現(xiàn)的圖標(biāo)。新彈出一個(gè)窗口。
5. 在新窗口,按提示輸入ModelBox容器root帳號(hào)的密碼,即步驟 一 :啟動(dòng) ModelBox 開發(fā)鏡像 中修改后的新密碼。
等待一會(huì),即可連接上ModelBox容器。
連接成功后,單擊“Open folder”可直接打開ModelBox容器中的文件。
步驟三:開發(fā)ModelBox應(yīng)用
開發(fā)流程圖
本章節(jié)以開發(fā)一個(gè)簡單的應(yīng)用為例,介紹如何在Visual Studio Code開發(fā)ModelBox應(yīng)用,該應(yīng)用即打開一個(gè)mp4視頻文件,推送到RTSP服務(wù)器,然后在PC端使用PotPlayer播放該mp4視頻文件。
準(zhǔn)備工作
在PC端安裝PotPlayer播放器,用于播放RTSP視頻流。
操作步驟
1. 在服務(wù)器創(chuàng)建“toml”格式文件,用來描述流程圖。
ModelBox會(huì)根據(jù)流程圖構(gòu)建應(yīng)用處理邏輯。
[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
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”需要根據(jù)實(shí)際情況自己配置。
? “XXX/XXX/XXX.mp4”:實(shí)際mp4視頻文件存放路徑。
? “IP”:服務(wù)器IP。
? “PORT”:步驟 一 :啟動(dòng) ModelBox 開發(fā)鏡像 中安裝的RTSP服務(wù)器配置端口號(hào)。
例如source_url="home/test.mp4"、default_dest_url="rtsp://10.10.10.100:8554/stream"。
2. ModelBox使用graphviz格式描述流程圖,將流程圖定義內(nèi)容拷貝到graphhiz 工具 中進(jìn)行查看。
3. 在Visual Studio Code執(zhí)行如下命令,執(zhí)行流程圖。
modelbox-tool -verbose -log-level INFO flow -run xxx/xxx.toml
其中,“xxx/xxx.toml”為“toml”格式文件的實(shí)際存放路徑。
4. 打開瀏覽器,輸入“toml”格式文件中配置的“default_dest_url”地址,選擇對(duì)話框中“打開PotPlayer專用播放”。
彈出的PotPlayer將會(huì)播放“toml”格式文件中配置的mp4視頻文件。
開發(fā)流單元
上一節(jié)所開發(fā)的應(yīng)用使用的是ModelBox自帶的流單元,本章節(jié)在此基礎(chǔ)上使用Python語言開發(fā)一個(gè)簡單的流單元,嵌入到應(yīng)用中,即在視頻頁面左上方寫上“Hello World”。
1. 在Visual Studio Code執(zhí)行如下命令,在指定路徑下基于Python流單元模板生成“HelloWorld”流單元。
modelbox-tool create -t python -n HelloWorld -d ./examples/flowunits
其中,“./examples/flowunits”為存放流單元的實(shí)際路徑。
生成的流單元包括“.py”文件和“.toml”配置文件。
2. “.py”文件描述了流單元的處理邏輯,在“.py”文件中增加OpenCV與numpy包的引用,修改其中的process函數(shù),具體如下。
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”配置文件配置該流單元的名稱、類別、輸入輸出端口等信息,當(dāng)前不用修改。
3. 修改在4.2 開發(fā)流單元?jiǎng)?chuàng)建的流程圖“toml”格式文件,具體內(nèi)容如下。
[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]配置項(xiàng)的“dir”中添加了HelloWorld流單元的路徑“path-to-HelloWorld-flowunits”,根據(jù)實(shí)際路徑配置。
? “source_url”和“default_dest_url”需要根據(jù)實(shí)際情況自己配置,和上一節(jié)創(chuàng)建的“toml”格式文件內(nèi)容一致。
4. ModelBox使用graphviz格式描述流程圖,將流程圖定義內(nèi)容拷貝到graphhiz 工具 中進(jìn)行查看。
5. 在Visual Studio Code執(zhí)行如下命令,執(zhí)行流程圖。
modelbox-tool -verbose -log-level INFO flow -run xxx/xxx.toml
其中,“xxx/xxx.toml”為“toml”格式文件的實(shí)際存放路徑。
6. 打開瀏覽器,輸入“toml”格式文件中配置的“default_dest_url”地址,選擇對(duì)話框中“打開PotPlayer專用播放”。
彈出的PotPlayer將會(huì)播放“toml”格式文件中配置的mp4視頻文件。
AI 華為HiLens
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。