DLAP221 基于mxVision 容器内推理
前 提条件
- DLAP221启动镜像制作成功,查看系统信息如下
HwHiAiUser@davinci-mini:~$ npu-smi info
+------------------------------------------------------------------------------------------------+
| npu-smi 22.0.2 Version: 22.0.2 |
+-----------------------+-----------------+------------------------------------------------------+
| NPU Name | Health | Power(W) Temp(C) Hugepages-Usage(page) |
| Chip Device | Bus-Id | AICore(%) Memory-Usage(MB) |
+=======================+=================+======================================================+
| 0 310 | OK | 12.8 55 2 / 970 |
| 0 0 | NA | 0 5353 / 7764 |
+=======================+=================+======================================================+
- 访问官方推理镜像网站,下载对应的mxVision容器镜像
点击获取镜像,注册华为用户,如果有则直接登录。
选择22.0.RC2-mxvision镜像版本,并点击下载,将弹出以下窗口,根据窗口中说明的步骤,下载推理镜像。
在DLAP221的命令行,运行上图中步骤的命令,如果在step2中输入了正确的密码,但仍然无法下载镜像,请根据step3设置下载凭证.
查看镜像,命令为:
HwHiAiUser@davinci-mini:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ascendhub.huawei.com/public-ascendhub/infer-modelzoo 22.0.RC2-mxvision ed381e9a8f24 3 months ago 6.08GB
- 安装Ascend-cann-toolkit包
HwHiAiUser@davinci-mini:~$ sudo ./Ascend-cann-toolkit_5.1.RC2_linux-aarch64.run --install
启动容器
- 下载mindX测试样例
HwHiAiUser@davinci-mini:~$ git clone https://gitee.com/ascend/ascend_community_projects.git
HwHiAiUser@davinci-mini:~$ cd ascend_community_projects/
HwHiAiUser@davinci-mini:~/ascend_community_projects$ ls
2D_LiDAR_Pedestrain_Detection AlphaPose Assisted-driving ChineseOCR FCOS gesturedetection
insulatorDetection Luggage-Checker MonocularDepthEstimation_V2 OWNERS README.md RosSdkInfer VideoStitch A200DK_GPIO_I2C AluminumDefectDetection Atlas200DKMPU6050 deepsort figures HelmetIdentification_V2 kws MedicalKeypointsDetecion MoveitMechanicalArmSimulation PointPillars
RefineDet UAV_CrowdCounting Yolact A200DK_UART_SPI AnimeGAN Atlas200DKSPILCD FairMOT fire_detection Individual_V2 LICENSE MobileStereoNet MultiChannelVideoInfer README.en.md Retinaface Video-ReID YOLOv5Prune
- 创建容器启动脚本
docker run -it -u root --rm \
--net=host \
--device=/dev/davinci0 \
--device=/dev/davinci_manager \
--device=/dev/ascend_manager \
--device=/dev/svm0 \
--device=/dev/log_drv \
--device=/dev/event_sched \
--device=/dev/upgrade \
--device=/dev/hi_dvpp \
--device=/dev/memory_bandwidth \
--device=/dev/ts_aisle \
-v /usr/local/Ascend/driver/tools:/usr/local/Ascend/driver/tools \
-v /usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64 \
-v /usr/lib64/aicpu_kernels:/usr/lib64/aicpu_kernels \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
-v /var/hdc_ppc:/var/hdc_ppc \
-v /etc/hdcBasic.cfg:/etc/hdcBasic.cfg \
-v /etc/rc.local:/etc/rc.local \
-v /sys:/sys \
-v /usr/bin/sudo:/usr/bin/sudo \
-v /usr/lib/sudo/:/usr/lib/sudo/ \
-v /etc/sudoers:/etc/sudoers/ \
-v /etc/sys_version.conf:/etc/sys_version.conf \
-v /home/HwHiAiUser/ascend_community_projects:/data/ascend_community_projects \
-v /home/HwHiAiUser/ascend_ddk/:/home/HwHiAiUser/ascend_ddk \
ascendhub.huawei.com/public-ascendhub/infer-modelzoo:22.0.RC2-mxvision \
/bin/bash -c "/usr/local/Ascend/driver/tools/minirc_container_prepare.sh;/bin/bash"
其中:
/usr/local/Ascend/driver: 为驱动的安装目录,需要映射到容器中 /usr/local/Ascend/ascend-toolkit: CANN toolkit的安装目录需要映射到容器中,如果客户安装的是nnrt运行环境,则替换为nnrt的安装目录 /home/HwHiAiUser/ascend_community_projects: mindx测试样例
- 修改minirc_container_prepare.sh脚本
#!/bin/bash
[ -d /usr/lib64 ] || mkdir -p /usr/lib64
[ -d /var ] || mkdir -p /var
[ -d /var/driver ] || mkdir -p /var/driver
[ -d /usr/slog ] || mkdir -p /usr/slog
[ -d /run/driver ] || mkdir -p /run/driver
[ -d /var/dmp ] || mkdir -p /var/dmp
[ -d /home/root/hdc_ppc ] || mkdir -p /home/root/hdc_ppc
[ -d /home/HwHiAiUser/hdc_ppc ] || mkdir -p /home/HwHiAiUser/hdc_ppc
cp -arf /usr/local/Ascend/driver/lib64/* /usr/lib64/
cp -arf /usr/local/Ascend/driver/tools/* /var/
###添加以下6行代码
export LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64:$LD_LIBRARY_PATH
mkdir -p /usr/slog
/var/slogd &
mkdir -p /run/driver
/var/dmp_daemon -I -U 8087 &
chown -R root:root /home/hwMindX/sdk_home
######
chmod 755 /usr/lib64
chown -h HwHiAiUser:HwHiAiUser /usr/slog
chown -h HwHiAiUser:HwHiAiUser /var/dmp
chown -h HwHiAiUser:HwHiAiUser /home/HwHiAiUser/hdc_ppc
if [ ! -f /usr/lib64/libcrypto.so.1.1 ] && [ ! -L /usr/lib64/libcrypto.so.1.1 ]; then
cp -arf /usr/local/Ascend/driver/lib64/inner/libcrypto.so.1.1 /usr/lib64/
fi
- 启动容器
HwHiAiUser@davinci-mini:~$ sudo ./docker_run.sh
root@davinci-mini:/home/hwMindX# <-----进入了容器
运行测试样例
本文运行的测试样例为Luggage-Checker,根据样例的readme,做如下操作
- 下载om模型
root@davinci-mini:/home/hwMindX# cd /data/ascend_community_projects/Luggage-Checker/
root@davinci-mini:/data/ascend_community_projects/Luggage-Checker# cd python/models/
root@davinci-mini:/data/ascend_community_projects/Luggage-Checker/python/models# wget -O yolox_pre_post.om https://mindx.sdk.obs.myhuaweicloud.com/ascend_community_projects/laser_detect/yolox_pre_post.om --no-check-certificate
- 编译测试样例的后处理代码
root@davinci-mini:/home/hwMindX# cd /data/ascend_community_projects/Luggage-Checker/
root@davinci-mini:/data/ascend_community_projects/Luggage-Checker# bash build.sh
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /data/ascend_community_projects/Luggage-Checker/postprocess/build
[ 50%] Building CXX object CMakeFiles/YoloxPostProcess.dir/YoloxPostProcess.cpp.o
[100%] Linking CXX shared library libYoloxPostProcess.so
[100%] Built target YoloxPostProcess
- 运行测试样例
root@davinci-mini:/data/ascend_community_projects/Luggage-Checker/python/Main# python3 pre_post.py
Begin to initialize Log.
WARNING: Logging before InitGoogleLogging() is written to STDERR
W20230109 02:15:26.178339 65 ConfigUtil.h:103] [1016][Object, file or other resource doesn't exist] Fail to read (log_prefix) from config, default is: 1
W20230109 02:15:26.178485 65 ConfigUtil.h:103] [1016][Object, file or other resource doesn't exist] Fail to read (colorlogtostderr) from config, default is: 1
W20230109 02:15:26.178542 65 ConfigUtil.h:103] [1016][Object, file or other resource doesn't exist] Fail to read (stop_logging_if_full_disk) from config, default is: 1
The output directory of logs file doesn't exist.
Create directory to save logs information.
Save logs information to specified directory.
.....
.....
I20230109 02:15:28.072665 65 MxpiImageDecoder.cpp:120] Begin to deinitialize MxpiImageDecoder(mxpi_imagedecoder0).
I20230109 02:15:28.074342 65 MxpiImageDecoder.cpp:139] End to deinitialize MxpiImageDecoder(mxpi_imagedecoder0).
I20230109 02:15:28.074736 65 MxGstBase.cpp:822] element(mxpi_dataserialize0) gst_change_state READY_TO_NULL.
I20230109 02:15:28.074843 65 MxGstBase.cpp:822] element(mxpi_objectpostprocessor0) gst_change_state READY_TO_NULL.
I20230109 02:15:28.074934 65 MxGstBase.cpp:822] element(mxpi_tensorinfer0) gst_change_state READY_TO_NULL.
I20230109 02:15:28.075084 65 MxGstBase.cpp:822] element(mxpi_imageresize0) gst_change_state READY_TO_NULL.
I20230109 02:15:28.075177 65 MxGstBase.cpp:822] element(mxpi_imagedecoder0) gst_change_state READY_TO_NULL.
I20230109 02:15:28.076000 65 MxsmStream.cpp:917] Destroys the stream(detection) successfully.
I20230109 02:15:28.076083 65 MxStreamManager.cpp:72] Begin to destroy management threads.
I20230109 02:15:28.077147 65 DeviceManager.cpp:120] DestroyDevices begin
I20230109 02:15:28.082032 65 DeviceManager.cpp:138] DestroyDevices successfully
I20230109 02:15:28.082115 65 MxStreamManager.cpp:263] Destroy streams successfully.
遇到一下错误
Traceback (most recent call last): File "/data/ascend_community_projects/Luggage-Checker/python/Main/pre_post.py", line 25, in <module> from visualize import plot_one_box File "/data/ascend_community_projects/Luggage-Checker/python/Main/visualize.py", line 20, in <module> import webcolors ModuleNotFoundError: No module named 'webcolors' WARNING: Logging before InitGoogleLogging() is written to STDERR I20230109 02:13:37.540711 52 MxStreamManager.cpp:54] MxStreamManager destroy. I20230109 02:13:37.540863 52 MxStreamManager.cpp:61] log rotate thread exits successful.
解决方法:
root@davinci-mini:/data/ascend_community_projects/Luggage-Checker/python/Main# pip3 install webcolors Looking in indexes: http://pypi.doubanio.com/simple/ Collecting webcolors Downloading http://pypi.doubanio.com/packages/af/a9/71beaebcacd7dd848af470740dbe7f39aa6bd23a60b8162f8c050090eed4/webcolors-1.12-py3-none-any.whl (9.9 kB) Installing collected packages: webcolors Successfully installed webcolors-1.12 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv [notice] A new release of pip available: 22.2.2 -> 22.3.1 [notice] To update, run: pip install --upgrade pip
- 测试结果
测试结果图片为pre_post_bgr.jpg
root@davinci-mini:/data/ascend_community_projects/Luggage-Checker/python/Main# cd ../test_img/
root@davinci-mini:/data/ascend_community_projects/Luggage-Checker/python/test_img# ls
pre_post_bgr.jpg test.jpg
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SDT3nuQ5-1673231104070)(null)]