鲲鹏主机+昇腾Atlas 300I Pro+龙蜥8.6 全国产化主机使用NPU推理YoloV5环境安装全过程

1.主要资料来源

1.昇腾ModelZoo 魔改版Pytorch安装说明
2.CANN 7.0.0商用版安装说明(这个其实很全)
3.官方ModelZoo容器(这个是适配910的,仅用于参考)

2.核心组件版本

组件版本安装方式
CANN7.0.0自行下载安装
Python3.9.16yum安装
torch1.11.0pip安装
torch_npu1.11.0自编译
torchvision0.12.0自编译
torchvision_npu0.12.0自编译
opencv-python4.9.0自编译
numpy1.23.5pip安装
cmake3.29.0-rc4自行下载安装
ais_bench0.0.2自行下载安装
apex0.1-ascend自编译
YoloV56.1源码
ACL_Pytorch / Yolov5_for_Pytorch6.1源码

3.安装步骤

3.1 安装驱动、升级固件

驱动和固件文件需要合同才能下载,或联系供应商自行获取。不同机型不通用。

./Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run --full --install-for-all
./Ascend-hdk-310p-npu-firmware_7.1.0.4.220.run --full
# 不重启可能存在驱动无法正常加载的情况
reboot

3.2 安装Mindx Toolbox(可选)

此工具为诊断工具,理论上非必须。安装此工具可方便确认当前的整体情况。
官方下载链接
一般下载最新版本即可,笔者安装时的版本为5.0.0.3。
安装完成后,可使用ascend-dmi查看整体安装情况,以及驱动兼容性。(此图为CANN安装完整后的状态)

$ source /usr/local/Ascend/toolbox/set_env.sh
$ ascend-dmi -c
|==============================================================================================================================|
|                                                    System Information                                                        |
|==============================================================================================================================|
| Architecture        | aarch64                                                                                                |
+---------------------+--------------------------------------------------------------------------------------------------------+
| Type                | Atlas 300I Pro                                                                                         |
|==============================================================================================================================|
|                                          Compatibility Check Result: Compatible                                              |
|==============================================================================================================================|
| Package             | Version           | Status                    | Innerversion              | Dependencies               |
+---------------------+-------------------+---------------------------+---------------------------+----------------------------+
| npu-driver          | 23.0.1            | OK                        | V100R001C15SPC004B220     | NA                         |
+---------------------+-------------------+---------------------------+---------------------------+----------------------------+
| npu-firmware        | 7.1.0.4.220       | OK                        | NA                        | NA                         |
+---------------------+-------------------+---------------------------+---------------------------+----------------------------+
| tfplugin            | 7.0.0             | OK                        | V100R001C15SPC003B226     | NA                         |
+---------------------+-------------------+---------------------------+---------------------------+----------------------------+
| toolkit             | 7.0.0             | OK                        | V100R001C15SPC003B226     | NA                         |
+---------------------+-------------------+---------------------------+---------------------------+----------------------------+
| toolbox             | 5.0.0.3           | OK                        | NA                        | NA                         |
|==============================================================================================================================|

$ ascend-dmi -i
|=========================+======================================+======================|
| ascend-dmi        5.0.0.3                             Brief Information               |
|=========================+======================================+======================|
| Card   Type             | NPU Count                            | Real-time Card Power |
+-------------------------+--------------------------------------+----------------------+
| Chip   Name             | Health           Used Memory         | Temperature  Voltage |
| Device ID               | Bus ID           AI Core Usage       |                      |
|=========================+======================================+======================|
| 1    Atlas 300I Pro     | 1                                    | 15.1W                |
+-------------------------+--------------------------------------+----------------------+
|    0    Ascend 310P3    | OK               2728MB/23047MB      | 35C          0.79V   |
|    0                    | 0000:01:00.0     0%                  |                      |
|=========================+======================================+======================|

3.3 下载安装CANN

官方下载链接
需要下载安装toolkit、kernels、tfplugin(可选),devicesdk、nnae、nnrt和前面的存在功能重复冲突,千万不要安装。
其中,kernels需要根据机型选择,从上文命令中我们可知300I Pro的芯片为310P3,因此需要选装310p的kernels

export USER=root
./Ascend-cann-toolkit_7.0.0_linux-aarch64.run --install --install-for-all
./Ascend-cann-kernels-310p_7.0.0_linux.run --install --install-for-all
./Ascend-cann-tfplugin_7.0.0_linux-aarch64.run --install --install-for-all

3.4 安装Ascend Docker Runtime(可选)

如果希望最终在容器中使用,务必安装。
一般安装最新版本即可,笔者安装的版本为5.0.0.5。

官方下载链接

./Ascend-docker-runtime_5.0.0.5_linux-aarch64.run --install
systemctl daemon-reload && systemctl restart docker

官方的容器商城中,基本都是适配900的。为了方便后续迁移,因此决定自己做一个。
参考资料可知,需要映射系统资源给容器内使用,才能正常玩转。

考虑到宿主机为龙蜥8.6,为了避免不必要的麻烦,基于龙蜥8.6的容器制作。后续所有流程可以宿主机做,也可以容器做。
*示例中因为我们已经有一个龙蜥8.6的c++编译镜像,因此直接拿这个做了
*<your_name> 需要保证每个镜像不同,保证资源复用。不写就是只能启动一份

docker run -u root -it --privileged --name=<your_name> --ipc=host \
--device=/dev/davinci0 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/Ascend:/usr/local/Ascend \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /etc/Ascend:/etc/Ascend \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /etc/vnpu.cfg:/etc/vnpu.cfg \
hub.myhub.io/my/myos_dev:1.0 \
/bin/bash

3.5 安装常规编译环境

yum源上没有Python3.7,因此选了各方面兼容性还都不错的3.9
cmake的yum源上的版本过老,无法编译opencv-python,因此需要自行下载安装

yum install libstdc++-devel python39 python39-devel mesa-libGL
./cmake-3.29.0-rc4-linux-aarch64.sh --skip-license --prefix=/usr

3.5 安装torch和torchvision

3.5.1 安装torch

顺手把后面torchvision用到的依赖一起装了

pip3 install torch==1.11.0 setuptools==65.7.0 

3.5.2 安装torch_npu

参考昇腾官方说明下载whl或自编译
可以直接下载whl安装,也可以自己编译。
两种都用过,似乎没啥区别。

在局域网自编译时,需要注意设置容器内代理

vi ci/docker/ARM/Dockerfile

……
# Set pip source
RUN mkdir /root/.pip \
    && echo "[global]" > /root/.pip/pip.conf \
    && echo "index-url=https://mirrors.aliyun.com/pypi/simple" >> /root/.pip/pip.conf \
    && echo "trusted-host=mirrors.aliyun.com" >> /root/.pip/pip.conf \
    && echo "timeout=120" >> /root/.pip/pip.conf
    
 #此处新增代理配置,前后文都不用动
ENV http_proxy='http://10.1.13.115:50061'
ENV https_proxy='http://10.1.13.115:50061'

#后面一样的
# Install pip package(build)
RUN pip3.7 install pyyaml  \
    && pip3.7 install torch==1.11.0 \
    && pip3.7 install numpy==1.21.3 
 ……

安装完成后,建议用官方示例验证。特别是容器中运行

#后续所有操作,默认都已经source过了,建议加入到~/.bashrc中
$ source /usr/local/Ascend/ascend-toolkit/set_env.sh
$ python3
import torch
import torch_npu

x = torch.randn(2, 2).npu()
y = torch.randn(2, 2).npu()
z = x.mm(y)

print(z)

3.5.3 安装apex

参考昇腾官方说明自编译

git clone -b 5.0.0 https://gitee.com/ascend/apex.git
cd apex/
bash scripts/build.sh --python=3.9
pip3 install apex/dist/apex-0.1_ascend-cp39-cp39-linux_aarch64.whl

3.5.4 安装opencv-python(可选)

按照官方说明,推荐自编译

export GIT_SSL_NO_VERIFY=true
git clone https://github.com/opencv/opencv.git
cd opencv
mkdir -p build
cd build
cmake -D BUILD_opencv_python3=yes -D BUILD_opencv_python2=no -D PYTHON3_EXECUTABLE=/usr/bin/python3.9 -D PYTHON3_INCLUDE_DIR=/usr/include/python3.9/ -D PYTHON3_LIBRARY=/usr/lib64/libpython3.9.so -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib64/python3.9/site-packages/numpy/core/include/ -D PYTHON3_PACKAGES_PATH=/usr/local/lib64/python3.9/site-packages -D PYTHON3_DEFAULT_EXECUTABLE=/usr/bin/python3.9 ..
make -j16
make install

3.5.5 安装torchvision + torchvision_npu

按照官方说明,需要自编译。

 git clone -b v0.12.0 https://github.com/pytorch/vision.git
 cd vision
 python3 setup.py bdist_wheel
 pip3 install dist/torchvision-0.12.*.whl
git clone https://gitee.com/ascend/vision.git vision_npu  
cd vision_npu  
git checkout v0.12.0-dev  
pip3 install -r requirement.txt  
python3 setup.py bdist_wheel  
cd dist  
pip3 install torchvision_npu-0.12.*.whl    # 不同环境下编译出的安装包名称有区别,请用户根据实际情况填写安装包名

3.5.6 修改upsampling.py适配YoloV5

修改/usr/local/lib64/python3.9/site-packages/torch/nn/modules/upsampling.py:154

    def forward(self, input: Tensor) -> Tensor:
        return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners)
#                             ,recompute_scale_factor=self.recompute_scale_factor)

不改的话可能会遭到这样的报错。这个是YoloV5的torch依赖问题,在其他平台下使用新版本torch也需要修改

'Upsample' object has no attribute 'recompute_scale_factor'

3.5.7 验证是否正常安装

>>> import torch
>>> import torch_npu
>>> import torchvision_npu
/usr/local/lib64/python3.9/site-packages/torchvision/io/image.py:13: UserWarning: Failed to load image Python extension: 
  warn(f"Failed to load image Python extension: {e}")
>>> from torch_npu.contrib import transfer_to_npu
/usr/local/lib64/python3.9/site-packages/torch_npu/contrib/transfer_to_npu.py:144: ImportWarning: 
    *************************************************************************************************************
    The torch.Tensor.cuda and torch.nn.Module.cuda are replaced with torch.Tensor.npu and torch.nn.Module.npu now..
    The torch.cuda.DoubleTensor is replaced with torch.npu.FloatTensor cause the double type is not supported now..
    The backend in torch.distributed.init_process_group set to hccl now..
    The torch.cuda.* and torch.cuda.amp.* are replaced with torch.npu.* and torch.npu.amp.* now..
    The device parameters have been replaced with npu in the function below:
    torch.logspace, torch.randint, torch.hann_window, torch.rand, torch.full_like, torch.ones_like, torch.rand_like, torch.randperm, torch.arange, torch.frombuffer, torch.normal, torch._empty_per_channel_affine_quantized, torch.empty_strided, torch.empty_like, torch.scalar_tensor, torch.tril_indices, torch.bartlett_window, torch.ones, torch.sparse_coo_tensor, torch.randn, torch.kaiser_window, torch.tensor, torch.triu_indices, torch.as_tensor, torch.zeros, torch.randint_like, torch.full, torch.eye, torch._sparse_csr_tensor_unsafe, torch.empty, torch._sparse_coo_tensor_unsafe, torch.blackman_window, torch.zeros_like, torch.range, torch.sparse_csr_tensor, torch.randn_like, torch.from_file, torch._cudnn_init_dropout_state, torch._empty_affine_quantized, torch.linspace, torch.hamming_window, torch.empty_quantized, torch._pin_memory, torch.autocast, torch.Tensor.new_empty, torch.Tensor.new_empty_strided, torch.Tensor.new_full, torch.Tensor.new_ones, torch.Tensor.new_tensor, torch.Tensor.new_zeros, torch.Tensor.to, torch.nn.Module.to, torch.nn.Module.to_empty
    *************************************************************************************************************
    
  warnings.warn(msg, ImportWarning)
>>> print(torch.cuda.is_available())
True

成功完成了cuda 的模拟。不过很可惜,这样直接简易修改YoloV5的源码,会各种抛错,需要官方的魔改版。

4 使用官方魔改版YoloV5

整体基于modelzoo-GPL
ACL_Pytorch下为离线推理,PyTorch下为在线训练与在线推理。
在线推理模型加载(不含训练)大约需要半分钟以上,而且会吃满一个CPU核,感觉就是在临时转格式,因此不推荐。
本次只讲解离线推理部分。
官方站点

4.1 签出yolov5

前期在测试YoloV5 7.0时遇到坐标全0 的奇怪问题,回退到了6.1.本次介绍以6.1为准。

git clone -b v6.1 https://github.com/ultralytics/yolov5.git

按照官方说明,把当前目录(Yolov5_for_Pytorch)下的绝大多数文件放到yolov5目录下

4.2 安装依赖

理论上,yolov5的requirement和Yolov5_for_Pytorch下的requirement都需要安装。由于部分组件是自行编译的,因此进行少量修改

matplotlib>=3.2.2
Pillow>=7.1.2
PyYAML>=5.3.1
requests>=2.23.0
scipy>=1.4.1
tqdm>=4.41.0
numpy==1.23.5
tensorboard>=2.4.1
pandas>=1.1.4
seaborn>=0.11.0
onnx==1.12.0
onnxruntime==1.12.0
pycocotools>=2.0
decorator
psutil

4.3 修改Model.yaml(可选)

如官方评测,我们打算使用各方面都较好的nms_script方式,该方式需要修改model.yaml中的conf_thres和iou_thres

conf_thres: 0.001  # object confidence threshold
iou_thres: 0.6  # IOU threshold for NMS

4.4 准备数据集

在yolov5下新建coco目录,按照下述结构放置图片文件。其实可以不放coco 2017数据集,原版yolo默认配套的coco128或者其他图片都行

- Yolov5_for_Pytorch
  - yolov5
    - coco
      - val2017
        - 000000000139.jpg
        - 000000000285.jpg
        - 000000000632.jpg
        - ...

在coco目录下生成val2017.txt

find ./val2017/ -type f

4.5 运行推理

#以YOLOv5S官方模型示例
wget https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5s.pt
#转成ONNX
bash pth2onnx.sh --tag 6.1 --model yolov5s --nms_mode nms_script
#转成离线模型.OM
bash onnx2om.sh --tag 6.1 --model yolov5s --nms_mode nms_script --bs 4 --soc Ascend310P3 
#运行推理验证
python3 om_val.py --tag 6.1 --model=yolov5s_bs4.om --nms_mode nms_script --batch_size=4

查看推理结果文件yolov5s_nms_bs4_6.1_predictions.json

[{
	"image_id": 139, //对应图片名称,如果图片是英文就是字符串
	"category_id": 1, //对应检测到的物体类型ID,从1开始编号(person)
	"bbox": [411.25, 155.625, 54.75, 143.125],//实际图的xywh
	"score": 0.83203 
}]

5 后记

参考om_valy.py,集成进Label Studio验证坐标系,看起来没啥问题
在这里插入图片描述

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装tinymce需要以下步骤: 1. 安装tinymce依赖包 ```bash npm install tinymce --save ``` 2. 在Vue组件中引入tinymce ```javascript import tinymce from 'tinymce/tinymce' import 'tinymce/themes/silver/theme' import 'tinymce/plugins/advlist' import 'tinymce/plugins/autolink' import 'tinymce/plugins/lists' import 'tinymce/plugins/link' import 'tinymce/plugins/image' import 'tinymce/plugins/charmap' import 'tinymce/plugins/print' import 'tinymce/plugins/preview' import 'tinymce/plugins/hr' import 'tinymce/plugins/anchor' import 'tinymce/plugins/pagebreak' import 'tinymce/plugins/searchreplace' import 'tinymce/plugins/wordcount' import 'tinymce/plugins/visualblocks' import 'tinymce/plugins/visualchars' import 'tinymce/plugins/code' import 'tinymce/plugins/fullscreen' import 'tinymce/plugins/insertdatetime' import 'tinymce/plugins/media' import 'tinymce/plugins/nonbreaking' import 'tinymce/plugins/table' import 'tinymce/plugins/contextmenu' import 'tinymce/plugins/directionality' import 'tinymce/plugins/emoticons' import 'tinymce/plugins/template' export default { components: { tinymce } } ``` 3. 在Vue组件中使用tinymce ```html <template> <div> <tinymce v-model="content" :init="initSettings"></tinymce> </div> </template> <script> export default { data() { return { content: '', initSettings: { height: 500, menubar: false, plugins: [ 'advlist autolink lists link image charmap print preview hr anchor pagebreak', 'searchreplace wordcount visualblocks visualchars code fullscreen', 'insertdatetime media nonbreaking table contextmenu directionality', 'emoticons template paste textcolor colorpicker textpattern imagetools codesample toc help' ], toolbar: 'undo redo | formatselect | bold italic backcolor | \ alignleft aligncenter alignright alignjustify | \ bullist numlist outdent indent | removeformat | help', content_css: [ '//fonts.googleapis.com/css?family=Lato:300,300i,400,400i', '//www.tiny.cloud/css/codepen.min.css' ] } } } } </script> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值