mmcv适配昇腾开源验证任务心得
mmcv适配昇腾开源验证任务心得
一、任务需求
首先看了一下任务计划书:https://bbs.huaweicloud.com/blogs/437788 ,主要目的是让mmcv能够在Ascend NPU和Kunpeng CPU上高效运行,确保项目在平台上具备良好的兼容性和性能,扩大其在AI和深度学习领域的竞争力和影响力。即验证mmcv能不能在 Ascend(昇腾)和 Kunpeng(鲲鹏)处理器中运行。
二、开发过程
明确目的后开始熟悉模型,mmcv的github网址: https://github.com/open-mmlab/mmcv 。DEMO要求是使用mmcv进行训练一个图像分类模型,并进行推理验证,图像分类推理主要是使用的是mmdetection来实现,这个是在mmcv基础上构建的目标检测工具箱。使用https://github.com/open-mmlab/mmdetection 来进行推理验证,因为要进行图像分类模型,所以使用resnet模型和权重。首先使用git clone https://github.com/open-mmlab/mmdetection.git命令下载开源代码,如果想使用自己训练的模型权重进行推理,可以先训练然后推理时加载自己训练好的权重。由于训练时间过长,我直接使用在mmdetection下的configs/centernet/metafile.yml下载centernet_resnet18_140e_coco_20210705_093630-bb5b3bf7.pth权重文件。
1.鲲鹏CPU、OpenEuler 验证推理
(1)安装依赖
按照开源代码mmdetection安装提示,安装相应的库,需要注意的是mmdet版本、mmcv版本和torch版本要相对应。(注意:如果版本不匹配会报错)
(2)运行推理代码
如果想先训练再推理,首先进行训练编译运行 python tools/train.py /dev/shm/dbc/mmdetection-main/configs/centernet/centernet_r18_8xb16-crop512-140e_coco.py ,训练完成后将权重保存到指定位置,然后使用训练好的权重推理即可。
我是直接使用已有权重进行推理,先在鲲鹏cpu和欧拉操作系统下验证推理,在云堡垒机上下载好开源代码和要使用的权重文件。这个是编译运行,所以不能只输入python xx.py,正确的运行命令为python demo/image_demo.py /dev/shm/dbc/mmdetection-main/demo/demo.jpg /dev/shm/dbc/mmdetection-main/configs/centernet/centernet_r18_8xb16-crop512-140e_coco.py --weights /dev/shm/dbc/mmdetection-main/centernet_resnet18_140e_coco_20210705_093630-bb5b3bf7.pth --device cpu 其中image_demo.py为推理代码,demo.jpg为要进行推理的图片,centernet_r18_8xb16-crop512-140e_coco.py是图像分类代码,--weights后面是具体权重,--device是要指定的运行设备,现在进行的是鲲鹏CPU的推理,所以将device设置为CPU,需要注意的是其他参数的路径要根据实际情况设定,不然会报错找不到文件。
2.NPU验证推理
(1)安装依赖包
进行NPU推理和鲲鹏CPU一样都在云堡垒机上进行。首先查看云堡垒机上已安装的CANN的版本和python版本,然后根据版本安装配套的torch_npu等,在https://www.hiascend.com/document/detail/zh/Pytorch/60RC3/configandinstg/instg/insg_0001.html,代码和权重和鲲鹏CPU推理一样的操作,然后安装一些必要的依赖。
注:numpy版本建议安装1.23左右的,不要安装2.0及以上的,会有兼容问题。
同样需要注意mmdet版本、mmcv版本和torch版本要相对应。
(2)运行推理代码
进行NPU的推理,有两种方式,第一种是将device修改为NPU,不用做其他修改,在mmdetection目录下直接运行python demo/image_demo.py /dev/shm/dbc/mmdetection-main/demo/demo.jpg /dev/shm/dbc/mmdetection-main/configs/centernet/centernet_r18_8xb16-crop512-140e_coco.py --weights /dev/shm/dbc/mmdetection-main/centernet_resnet18_140e_coco_20210705_093630-bb5b3bf7.pth --device npu
第二种方式是使用自动迁移在image_demo.py中加入
import torch
import torch_npu
from torch_npu.contrib import transfer_to_npu
然后代码中的device不用做修改,默认是cuda方式。然后将运行命令不指定device。这两种方法最后都会使用NPU来运行代码。
三、结果
1验证截图
mmcv是计算机视觉库,能够进行图像处理、数据加载、模型构建、训练等。
mmdetection是基于mmcv的目标检测工具,有多种先进的算法和模型,能够使用数据集进行训练、推理部署。
训练
使用自己训练的权重进行推理,就先进行训练编译运行,运行后的界面如下:
训练完成后的权重会保存到work_dirs下。
1.1 CPU推理
在堡垒机上进行编译运行指令后,会出现这样的运行界面:
运行之后会显示使用的是CPU,然后会将结果保存到outputs中,然后查看保存的图片:
从结果可以看出,推理结果能够分类出类别。
1.2 NPU推理
NPU和CPU推理流程一样,但是需要在运行前后查看一下NPU使用情况,运行程序前
运行程序后
运行时的需要将device修改为NPU,或者使用cuda的自动迁移方式,下面是方式一的运行图:
可以看到其使用的设备是NPU,然后也能推理成功并保存结果,说明了能够成功迁移到昇腾NPU上。
保存结果为:
能够从图中看到,也是和CPU一样的分类出类别,只是置信度大小有区别。
- 点赞
- 收藏
- 关注作者
评论(0)