mmcv适配昇腾开源验证任务心得

举报
yd_258621122 发表于 2024/11/29 14:29:50 2024/11/29
【摘要】 首先看了一下任务计划书:https://bbs.huaweicloud.com/blogs/437788 ,主要目的是让mmcv能够在Ascend NPU和Kunpeng CPU上高效运行,确保项目在平台上具备良好的兼容性和性能,扩大其在AI和深度学习领域的竞争力和影响力。即验证mmcv能不能在 Ascend(昇腾)和 Kunpeng(鲲鹏)处理器中运行。

mmcv适配昇腾开源验证任务心得

一、任务需求

首先看了一下任务计划书:https://bbs.huaweicloud.com/blogs/437788 主要目的是让mmcv能够在Ascend NPUKunpeng CPU上高效运行,确保项目在平台上具备良好的兼容性和性能,扩大其在AI和深度学习领域的竞争力和影响力。即验证mmcv能不能在 Ascend(昇腾)和 Kunpeng(鲲鹏)处理器中运行。

 

二、开发过程

明确目的后开始熟悉模型,mmcvgithub网址: 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.鲲鹏CPUOpenEuler 验证推理

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的目标检测工具,有多种先进的算法和模型,能够使用数据集进行训练、推理部署。

 

训练

使用自己训练的权重进行推理,就先进行训练编译运行,运行后的界面如下:

train.png

训练完成后的权重会保存到work_dirs下。

 

1.1 CPU推理

在堡垒机上进行编译运行指令后,会出现这样的运行界面:

cpu1.png

运行之后会显示使用的是CPU,然后会将结果保存到outputs中,然后查看保存的图片:

demo-cpu.jpg


从结果可以看出,推理结果能够分类出类别。

1.2 NPU推理

NPUCPU推理流程一样,但是需要在运行前后查看一下NPU使用情况,运行程序前

npu1.png

运行程序后

npu2.png

运行时的需要将device修改为NPU,或者使用cuda的自动迁移方式,下面是方式一的运行图:

npu3.png


可以看到其使用的设备是NPU,然后也能推理成功并保存结果,说明了能够成功迁移到昇腾NPU上。

保存结果为:

demo-npu.jpg

能够从图中看到,也是和CPU一样的分类出类别,只是置信度大小有区别。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。