Cambricon Pytorch MLU220 模型在线推理与性能评估

本内容主要介绍寒武纪 Pytorch 框架 docker 容器处理与如何在 MLU220 硬件平台上加载与实现模型的量化、推理,并总结相关的经验分享给大家,希望给各位有所帮助。

  • 前期准备工作

1.1 docker 容器打包与加载

本次处理的对象属于 MLU270 硬件平台对应的docker 容器,分别实现容器的打包成镜像与备份为 tar 文件、移植到 MLU220 硬件平台并加载,以上内容如图 1.1 所示,其详细步骤如下:

#查找 MLU270 现有运行的容器

$ docker ps -a

#打包指定 pytorch 容器为新的镜像

$ docker commit -m "atu create pytorch of cambricon" 1ce2962c9ca9 atu_cambricon_pytorch:v1.0

#查看是否打包

$ docker images

#将新的镜像备份为 .tar 文件

$ docker save -o ./atu_cambricon_pytorch.tar atu_cambricon_pytorch:v1.0

#查看当前目录是否输出 .tar

$ ls

#待拷贝到 MLU220 硬件平台后加载 .tar 文件

$ docker load -i atu_cambricon_pytorch.tar

#最后查看是否加载成功

$ docker images

图 1.1 docker 容器打包与加载

1.2 docker 容器启动设置脚本

为了方便后续容器与本地系统的文件共享,此处需要创建指定容器的启动脚本 run-docker_pytorch.sh,详细内容如下:

#/bin/bash

 

export MY_CONTAINER="Cambricon-MLU270-220-pytorch-src"

num=`docker ps -a|grep "$MY_CONTAINER"|wc -l`

echo $num

echo $MY_CONTAINER

if [ 0 -eq $num ];then

        xhost +

docker run -e DISPLAY=unix$DISPLAY --device /dev/cambricon_dev0 --net=host --pid=host -v /sys/kernel/debug:/sys/kernel/debug -v /tmp/.X11-unix:/tmp/.X11-unix -it --privileged --name $MY_CONTAINER -v $PWD/:/home/Cambricon-MLU270 \

        -v $PWD/datasets:/home/gxf/cambricon/220/kalpa/datasets \

        atu_cambricon_pytorch:v1.0 /bin/bash

else

docker start $MY_CONTAINER

#sudo docker attach $MY_CONTAINER

docker exec -ti $MY_CONTAINER /bin/bash

fi

 补充说明:

MY_CONTAINER="Cambricon-MLU270-v1.6.0-tf-src" 是容器名字;

该脚本启动的容器所使用的镜像为:atu_cambricon_pytorch:v1.0

启动脚本,执行如下命令:

$ ./ run-docker_pytorch.sh

1.3 Pytorch 环境搭建

进入 docker 容器后,此处需要分别实现激活与编译模型所需的环境,分别执行如下脚本:

$ source /torch/venv3/pytorch/bin/activate

$ cd /torch/examples/online/mask-rcnn/

$ ./build_mask-rcnn.sh

执行后的效果如图 1.2 所示。

图 1.2 build_mask-rcnn.sh  执行效果

  • 量化实操与 Online 推理

2.1 MLU220 硬件平台处理

除了量化实操部分请参考 ATU 同仁 Barret 编写的 “Hands-On-Cambricon_MLU270-Pytorch 运行环境搭建-模型推理_Barret_210415-v1.0.*”,Online 推理执行 MLU220 相关操作,内容包括量化模型文件的准备、pytorch 环境变量的设置以及模型 Online 推理脚本的执行。详细操作如下所示(执行效果分别如图 2.1、2.2所示):

#量化模型文件的准备

$ mkdir -p /torch/examples/online/mask-rcnn/online/checkpoints

$ mkdir -p /torch/examples/online/mask-rcnn/int8/checkpoints

$ cp /torch/examples/online/mask-rcnn/mask_rcnn.pth  /torch/examples/online/mask-rcnn/online/checkpoints

$ cp /torch/examples/online/mask-rcnn/mask_rcnn.pth /torch/examples/online/mask-rcnn/int8/checkpoints

#pytorch 环境变量的设置

$ export TORCH_HOME='/torch/examples/online/mask-rcnn'

$ export COCO_PATH_PYTORCH='/home/Cambricon-MLU270/datasets'

#模型 Online 推理,MLU220 拥有 4 Core

$ python test_mask-rcnn.py --min-image-size 800 --mlu true --jit true --image_number 4 --batch_size 1 --half_input 0 --coco_path $COCO_PATH_PYTORCH --quantization false --quantized_mode 1 --ann_dir $COCO_PATH_PYTORCH/COCO --dump true --core_number 4 --mcore MLU220 MODEL.DEVICE mlu

补充说明:

‑-min‑image‑size:输入到网络的图片尺寸,规模为 (n*n)。

‑-mlu:设置为 true 时即为选择在 MLU 上运行。不设置 jit 参数的情况下运行在线逐层的模式。

--jit:设置为 true 时即为选择使用 jit 运行融合模式,当参数 mlu 也为 True 的情况下运行在线融合的模式。

‑-image_number:设置实际希望运行的样本数量。

‑-batch_size:设置模型运行的 batch 数。

-‑half_input:设置输入 Tensor 为 Float 或 Half 类型。[0-fp32; 1-fp16; default 0]

--coco_path:设置 COCO 数据集路径。

‑-quantization:设置是否使能量化模式。量化模式时参数–mlu 和–jit 都必须设置成 false。

‑-quantized_mode:设置使用的权重为原始权重, int8, int16,分通道 int8 和分通道 int16 量化的权重。

‑-ann_dir:指定 annotation file 的路径。

‑-dump:是否将检测结果绘制到图片并输出。

--core_number:设置运行网络时用到的 MLU 核数。16 这里是生成16核的离线模型,一般我们生成模型的core number数量为1, 4, 16

--genoff:是否生成离线模型。

MODEL.DEVICE:指定在特定设备上运行,与–mlu 相对应。例如–mlu true ‑> MODEL.DEVICE mlu,或者 –mlu false ‑> MODEL.DEVICE cpu。


图 2.1 Online 执行结果

图 2.2 Online 执行后输出结果图片

2.2 MLU270 硬件平台处理

类似于 2.1 章节处理方法,将 Online 执行脚本更换为如下内容:

python test_mask-rcnn.py --min-image-size 800 --mlu true --jit true --image_number 4 --batch_size 1 --half_input 0 --coco_path $COCO_PATH_PYTORCH --quantization false --quantized_mode 1 --ann_dir $COCO_PATH_PYTORCH/COCO --dump true --core_number 16 MODEL.DEVICE mlu

即可得到相应的输出图片结果。

2.3 MLU270/220 性能参数对比

MLU270/220 执行 Mask-Rcnn 处理图片的结果分别如图 2.3、2.4 所示,任意挑选 000000000139.jpg 作为执行效果对比如图 2.5 所示。

图 2.3 MLU270 执行效果图片

图 2.4 MLU220 执行效果图片

图 2.5 MLU220/270 执行效果图片对比

MLU270/220 处理 4 张图片的硬件处理时间的各种参数、算法执行的各种参数、吞吐量(thoughout, fps)、延迟(latency, ms)以及平均精度(Mean AP)如图 2.6 所示。

图 2.6 MLU220/270 其他性能参数对比

  • 总结

   本文介绍了 MLU270、MLU220 处理 Pytorch Mask-Rcnn 模型 Online 推理离线的实际操作,并以 COCO 数据集中部分图片为对象,对上述两款板卡进行性能对比。后期将对 Cambricon 离线模型的实际部署进行详细介绍。如对此方案有更多需求,敬请联系世平集团 ATU 部门,atu.cn@wpi-group.com

下期预告

    后期将对寒武纪 Cambricon MLU 220/270 其他问题进行研究、总结,敬请期待。本文作者为 ATU kalpa,大大通的资料如下:

    欢迎在大大通上关注我,给我留言,我将及时解答各位的疑问。

相关知识点往期回顾

1、基于 MobileNet V2—SSD 的车道线检测

2、ADAS-LDW 霍夫直线检测算法与 S32V234 实施介绍

3、深度学习之模型量化

4、深度学习之隐藏层设计(初步)

5、深度学习之数据增强(常规)

6、深度学习之模型剪枝

7、深度学习之迁移学习

8、深度学习之人脸识别

9、深度学习之 OpenCV 安装

10、基于深度学习 2D 人脸识别的NXP i.MX 8 M Shark 方案

11、Cambricon caffe 测试程序

12、Cambricon caffe 模型量化

参考资料

  • 寒武纪 —— https://www.yuque.com/books/share/66dc4ebc-c220-49b8-b5dc-64320bc15da7/mogxu9

 

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论