本内容主要介绍寒武纪 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,大大通的资料如下:
欢迎在大大通上关注我,给我留言,我将及时解答各位的疑问。
相关知识点往期回顾
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
评论