保姆級教程 - atlas500部署yolov3-tiny檢測實時視頻流 [1] - 內網環境下docker部署atlas500

      網友投稿 1060 2022-05-29

      保姆級教程 - atlas500部署yolov3-tiny檢測實時視頻流 [1] - 內網環境下docker部署atlas500 開發環境

      — 本教程詳細介紹在華為atlas500智能小站上,部署自己的darknet版本的yolov3-tiny目標檢測模型

      保姆級教程 - atlas500部署yolov3-tiny檢測實時視頻流 [1] - 內網環境下docker部署atlas500 開發環境

      1、內網環境下atlas500 docker鏡像部署開發環境

      (1)前言

      (2)鏡像構建方式

      (3)鏡像構建前置操作

      (4)DockerFile 構建docker 鏡像

      dockerfile 構建鏡像

      將鏡像文件導出,通過/tmp目錄上傳至atlas500

      atlas500運行鏡像生成容器

      經過多次踩坑,總結到,還是要多看官方文檔,論壇文章僅能作為借鑒。畢竟軟件生態版本迭代較快。相關技術文章具有時效性,和您的軟件環境也不一定匹配,但還是想系統整理出文章,一起溝通討論。

      本教程主要涉及以下四部分:

      (一)內網環境下DockerFile構建docker容器,并部署在atlas500(無法訪問互聯網)

      (二)原生darknet yolov3-tiny的weight -> om 模型轉換教程

      (三)om模型在atlas500邊端部署,實現有效推理

      (四)前、后處理優化,aipp + dvpp 實現推理流程的速度優化

      本文的設備情況:

      本文默認讀者已經根據500小站用戶指南,完成設備上電等前置操作:https://support.huawei.com/enterprise/zh/doc/EDOC1100133176/c6355e39

      小站是華為歐拉linux系統(aarch64架構),Ascend310芯片,本文的500完全隔絕外網 (正常的500可以連接外網),也沒有apt-get install等方式安裝軟件,但是小站系統自帶docker軟件,僅用于模型邊緣部署。

      uname -a 查看系統架構信息:

      Linux Euler 4.19.36-vhulk1907.1.0.h1017.eulerosv2r8.aarch64 #1 SMP Sat Mar 27 10:04:38 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux

      由于內網部署網絡的限制,同時為軟件環境修改方便,本文借助其他外網設備,通過DockerFile方式構建docker鏡像,再把打包好的鏡像文件上傳至500小站使用。由于小站是aarch64架構,所用的apt源和開發軟件的架構也要是aarch64架構,我們鏡像構建和后續的模型轉換在另一臺可連接外網的atlas200 DK(arrch64)設備上操作。

      由于設備不在身邊,完全內網環境,通過公網ip遠程登錄。我們在構建docker時,需要了解后續的開發方式,準備所需軟件環境。

      經過研究文檔發現,在昇騰設備上開發主要有兩種方式:

      使用MindX SDK推理,MindX SDK是一種插件化編程方式,我理解是一個簡化的推理SDK,少量代碼開發,拼接幾個預定義好的插件就可以實現應用開發,嘗試過但遇到一些程序崩潰問題,同時覺得過于模板化,自主性不強,沒有使用。

      基于ACL架構進行開發,這種算是采用ascend的API進行自主開發編譯運行,并不需要從0開發,昇騰的樣例倉中有很多參考項目,可以基于昇騰的sample開發:https://gitee.com/ascend/samples,同時參考Ascend的開發工具包 CANN推理的API文檔,本文也是這種思路.

      拿到atlas500,可以ssh遠程登錄后,進入的初始系統是類似啟動項,還不是Euler系統:

      登錄Euler系統之前,我們要在IES界面做一些操作:

      ssh遠程登錄a500后,在IES:/ -> 界面,首先輸入 sftp enable,終端返回 set enable success,即可開放atlas500的 /tmp 目錄,進行遠程文件傳輸。

      但/tmp目錄僅有2G空間。并且是臨時目錄,固件升級等操作會將該目錄清空,可僅用于文件傳輸目錄,不可長時間存放文件。博主曾經將代碼放到該目錄下用Xftp打開文件編輯代碼,這樣很危險,/tmp被清空沒有備份就涼涼了。

      重置會話超時時間,否則超時后,ssh會話會自動關閉,遠程終端中斷。

      在IES界面輸入timeout 0 ,終端返回set success;然后輸入develop (開發者模式),進入歐拉系統。再輸入TMOUT=0:

      Euler:~ # TMOUT=0

      docker --version 查看atlas500 docker信息:

      Euler:~ # docker --version Docker version 18.09.0, build ebc4987

      npu-smi info 查看gpu芯片信息:

      其中,我的driver固件版本為21.0.4,CANN版本必須和固件版本配套,否則會遇到很多不可預料的問題。關于版本不匹配導致的問題見issues:https://gitee.com/ascend/samples/issues/I532OI?from=project-issue

      保姆級教程 - atlas500部署yolov3-tiny檢測實時視頻流 [1] - 內網環境下docker部署atlas500

      下載固件時,會有版本的對應關系:https://www.hiascend.com/hardware/firmware-drivers?tag=community

      比如下圖:CANN的5.0.4版本,必須對應21.0.4的固件版本。但我在使用時發現,社區版的固件更新是滯后的。導致一直在使用低版本的固件,出現很多玄學問題,最后版本匹配后就解決了。

      固件升級,選擇智能邊緣管理系統升級最方便,參考文檔:(https://support.huawei.com/enterprise/zh/doc/EDOC1100133173/dede8113)

      在構建docker 鏡像前我們要確定CANN的版本,本文選用 昇騰CANN社區版(5.0.4.alpha002),后續的操作應嚴格按照CANN對應的文檔來,CANN文檔分為訓練和推理,請移步: 昇騰CANN社區版(5.0.4.alpha002)(訓練)、 昇騰CANN社區版(5.0.4.alpha002)(推理)

      由于a500的網絡原因,我們用身邊的一臺atlas200 dk進行docker 鏡像部署,好處在于都是aarch64 架構,感覺構建鏡像時會更順利。用其他linux設備是一樣的。

      DockerFile基于ubuntu18.04進行構建,包括安裝atlas500部署所用的Ascend-cann-nnrt_5.0.4.alpha002_linux-aarch64.run、以及后臺AI引擎所需的python依賴、redis、linux所需的必要軟件。

      在此解釋一下CANN分為cann-toolkit 和 cann-nnrt ;區別大致是toolkit包更完整,包含開發,推理訓練都可以;nnrt是離線推理引擎包,較為輕量,包含開發、推理應用。像模型轉換操作就只能用cann-toolkit包。因為我們只在500部署,所以選用nnrt包。

      - Dockerfile文件作為參考

      基于sample樣例進行開發時,要看清楚軟件版本,比如python版本

      其中的MindX SDK安裝是可選操作,后續的文章沒有用到。

      其中,以root用戶登錄小站,執行id HwHiAiUser命令查詢并記錄宿主機上HwHiAiUser用戶的UID和GID。

      groupadd -g gid HwHiAiUser && useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser && usermod -u uid HwHiAiUser &&\

      為在容器內創建HwHiAiUser用戶。gid、uid為宿主機上HwHiAiUser用戶的UID和GID,容器內的HwHiAiUser用戶的UID和GID需要和宿主機保持一致。

      FROM ubuntu:18.04 # 更換aliyun鏡像源,安裝linux必要的依賴 RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list RUN set -ex && apt-get update -y 2> /dev/null && apt install vim -y 2> /dev/null && apt install sudo -y 2> /dev/null \ && apt-get install -y cmake curl g++ pkg-config libxcb-shm0-dev libxcb-xfixes0-dev tesseract-ocr libblas3 liblapack3 liblapack-dev libblas-dev gfortran libhdf5-dev libffi-dev ffmpeg wget # install redis-server5.0.5 WORKDIR /root RUN apt-get update && mkdir /root/redis WORKDIR /root/redis RUN apt-get install software-properties-common -y \ && apt-get update \ && apt-get install gcc -y \ && apt-get install --reinstall make \ && wget http://download.redis.io/releases/redis-5.0.5.tar.gz \ && tar zxvf redis-5.0.5.tar.gz WORKDIR ./redis-5.0.5 RUN make && make install # 復制配置文件到容器,并運行redis COPY ./redis.conf /etc/ CMD redis-server /etc/redis.conf #Using douban pipy mirror setup software RUN apt-get install python3.6 -y \ && rm /usr/bin/python3 \ && ln -s /usr/bin/python3.6 /usr/bin/python3 \ && apt-get install python3-pip -y \ && /usr/bin/python3 -m pip install --upgrade pip --user -i https://mirrors.huaweicloud.com/repository/pypi/simple \ && /bin/bash -c "source ~/.bashrc" WORKDIR /home/docker/docker_atlas500/ COPY packages/ ./packages # 很多庫沒有在線安裝arm版,下載離線包安裝, 安裝包放在dockerfile同級的packages目錄 RUN ls -la ./packages \ && echo `pwd` \ && echo `ls` \ && pip3 install --upgrade pip \ && cd packages/requests-offline \ && pip3 install certifi-2019.9.11-py2.py3-none-any.whl \ && pip3 install chardet-3.0.4-py2.py3-none-any.whl \ && pip3 install idna-2.8-py2.py3-none-any.whl \ && pip3 install urllib3-1.25.7-py2.py3-none-any.whl \ && cd requests-2.22.0 \ && cd ../../ \ && rm -rf packages/ \ && pip3 install opencv-python-headless redis tqdm tzlocal==2.1 pytesseract -i https://pypi.tuna.tsinghua.edu.cn/simple # 無法直接安裝opencv-python,解決方法是安裝opencv-python-headless #設置離線推理引擎包參數 ARG NNRT_PKG #設置環境變量 ARG ASCEND_BASE=/usr/local/Ascend ENV LD_LIBRARY_PATH=\ $LD_LIBRARY_PATH:\ $ASCEND_BASE/nnrt/latest/acllib/lib64:\ /home/data/miniD/driver/lib64 # 關聯宿主機npu的路徑 ENV ASCEND_AICPU_PATH=\ $ASCEND_BASE/nnrt/latest #設置進入啟動后的容器的目錄 WORKDIR /root #拷貝離線推理引擎包 COPY $NNRT_PKG . #安裝CANN離線推理引擎包,此處參考:官方文檔,要保證和HwHiAiUser用戶的UID和GID一致 RUN umask 0022 && \ groupadd -g 1001 HwHiAiUser && useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser && usermod -u 1001 HwHiAiUser &&\ chmod +x ${NNRT_PKG} &&\ ./${NNRT_PKG} --quiet --install &&\ rm ${NNRT_PKG} # Ascend-mindxsdk-mxmanufacture_2.0.1_linux-aarch64(可選) ARG SDK_PKG # 設置工作路徑 WORKDIR /root # 安裝到home COPY $SDK_PKG . # 安裝MindX SDK mxmanufacture RUN chmod +x ${SDK_PKG} &&\ ./${SDK_PKG} --quiet --install &&\ rm ${SDK_PKG} &&\ /bin/bash -c "source ~/.bashrc"

      docker 鏡像構建過程,也可以參考官方文檔https://support.huawei.com/enterprise/zh/doc/EDOC1100133176/63895f14

      在200dk或其他linux設備均可構建鏡像:

      docker build -t atlas500_last:v5 --build-arg NNRT_PKG=Ascend-cann-nnrt_20.3.0_linux-aarch64.run --build-arg SDK_PKG=Ascend-mindxsdk-mxmanufacture_2.0.1_linux-aarch64.run .

      其中,-t指明鏡像名和版本號;–build-arg NNRT_PKG=“輸入cann-nnrt包的路徑” ;–build-arg SDK_PKG= “輸入MindX SDK的路徑” (可選)

      構建鏡像結束:

      docker images # 查看鏡像

      可以看到我的鏡像已經很大了,我們在dockerfile中構建時,可以將不用的軟件包刪除,比如MindX sdk

      docker save a920 > atlas500_last.tar

      docker run --privileged --network=host --device=/dev/davinci0 --device=/dev/davinci_manager --device=/dev/hisi_hdc --device /dev/devmm_svm -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi -v /home/data/miniD/driver/lib64:/home/data/miniD/driver/lib64 -v /run/board_cfg.ini:/run/board_cfg.ini -it atlas500_last:v5 /bin/bash

      其中,–privileged開啟特權模式,容器才能調用宿主機的npu芯片,即device。

      –network=host 開啟宿主機的網絡映射,容器才能和宿主機一樣訪問網絡。

      -it atlas500_last:v5,指明容器的名稱: 版本號

      簡單docker操作

      docker ps 查看容器:

      如果沒有剛生成的容器,可能是掛起了, docker ps --all查看所有容器。

      docker start containerID 即可啟動容器

      Euler:~ # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 06654b02ee44 atlas500 "/bin/bash" 2 months ago Up 4 days gagarin

      docker exec -it 0665 /bin/bash 進入容器

      進入容器后,檢查輸入npu-smi info 出現芯片信息,檢查相關軟件環境,即安裝成功。

      進行推理之前,需要到容器中CANN的安裝目錄下,激活環境

      我的路徑在:

      cd /usr/local/Ascend/nnrt/ source set_env.sh

      至此,我們完成atlas上CANN等開發環境的docker鏡像部署!

      Atlas 200 DK開發者套件 Docker Linux 鏡像服務

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Google Earth Engine (GEE) ——代碼編輯器
      下一篇:計算機網絡探究一之利用雙網卡主機共享上網
      相關文章
      亚洲人成依人成综合网| 亚洲äv永久无码精品天堂久久 | 亚洲av永久无码制服河南实里| gogo全球高清大胆亚洲| 在线亚洲v日韩v| 在线视频亚洲一区| www.亚洲精品| 亚洲精品高清在线| 区三区激情福利综合中文字幕在线一区亚洲视频1| 亚洲av最新在线观看网址| 亚洲精品乱码久久久久久蜜桃图片| 狠狠色伊人亚洲综合网站色| 亚洲啪AV永久无码精品放毛片| 国产亚洲精品bv在线观看| 亚洲色中文字幕在线播放| 亚洲人成电影网站免费| 亚洲国产精品无码观看久久| 亚洲av午夜电影在线观看 | 亚洲国产成人久久综合| 亚洲精品无码国产片| 国产精品久久久久久亚洲小说 | 亚洲国产精品一区二区第四页| 亚洲国模精品一区| 国产AV无码专区亚洲AWWW| 亚洲乳大丰满中文字幕| 亚洲成av人片天堂网| 亚洲视频.com| 亚洲av无码片在线观看| 亚洲色成人四虎在线观看| 亚洲AV成人无码网站| 亚洲伊人久久成综合人影院| 亚洲熟妇丰满多毛XXXX| 亚洲av日韩av无码黑人| 亚洲大香人伊一本线| 亚洲成_人网站图片| 自拍偷自拍亚洲精品播放| 亚洲日本一区二区一本一道| 亚洲精品亚洲人成在线观看| 亚洲一区中文字幕久久| 亚洲首页国产精品丝袜| 久久亚洲精品无码av|