ModelBox上手指南

      網(wǎng)友投稿 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]

      ModelBox上手指南

      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)容。

      上一篇:(精華)2020年9月25日 微服務(wù) API網(wǎng)關(guān)Ocelot的使用
      下一篇:Excel2007版表格自動(dòng)添加表格字段標(biāo)題的操作方法
      相關(guān)文章
      亚洲精品无码久久久久去q| 亚洲最大的视频网站| 亚洲乱码一二三四区麻豆| 亚洲av不卡一区二区三区| 亚洲午夜久久久久久久久久| 亚洲AV无码不卡在线观看下载| 亚洲av永久无码精品秋霞电影秋 | 国产成人亚洲精品青草天美| 亚洲精品无码专区久久久 | 亚洲人成亚洲人成在线观看| 国产亚洲精品资在线| 91麻豆精品国产自产在线观看亚洲| 亚洲女同成人AⅤ人片在线观看| 五月婷婷亚洲综合| 亚洲A∨精品一区二区三区| 亚洲国产成人精品女人久久久 | 亚洲av乱码一区二区三区| 国产成人精品日本亚洲专一区| 久久久无码精品亚洲日韩按摩 | 中文字幕无码精品亚洲资源网| 亚洲伊人久久精品影院| 亚洲国产精品无码久久久秋霞2 | 日韩精品一区二区亚洲AV观看| 亚洲美女人黄网成人女| 亚洲中文字幕在线无码一区二区| 久久精品国产99国产精品亚洲| 2020天堂在线亚洲精品专区| 亚洲色大成WWW亚洲女子| 亚洲爆乳少妇无码激情| 亚洲国产成人久久精品99| 久久精品国产精品亚洲| 国产AV无码专区亚洲AVJULIA| 亚洲an天堂an在线观看| 亚洲成av人片在线看片| 亚洲一本到无码av中文字幕| 最新亚洲人成无码网站| 毛茸茸bbw亚洲人| 亚洲gv猛男gv无码男同短文| 久久亚洲sm情趣捆绑调教| 在线综合亚洲中文精品| 国产精品亚洲专区无码唯爱网|