准备工作
參照《Cambricon_MLU270运行环境搭建》準備好SDK和安装環境
启动容器
请勿使用SDK中自带的Pytorch docker image,在build过程中可能会报错。已请Cambricon技术更新相关文档,当前最新的pytorch docker image位于如下地址:
链接:https://pan.baidu.com/s/1OmewvbhvWMOxv9tdZr0MzA
提取码:556w
加载image,命令行执行:$sudo docker load < pytorch-image-0.14.1.tar
查看刚刚加载的image:sudo docker images
启动容器:基于镜像 pytorch-image-0.14.1.tar 启动一个容器,并映射相关工作目录,脚本內容如下
进入docker后,首先需要激活环境:
source /torch/venv3/pytorch/bin/activate
再进入目录:
cd /torch/examples/online/mask-rcnn/
执行build_mask-rcnn.sh
直接执行run.sh是跑不了的,需要量化,再运行。
模型量化
export TORCH_HOME='/torch/examples/online/mask-rcnn'
export COCO_PATH_PYTORCH='/home/Cambricon-MLU270/datasets'
python test_mask-rcnn.py --min-image-size 800 --mlu false --jit false --image_number 4 --batch_size 1 --half_input 0 --coco_path $COCO_PATH_PYTORCH --quantization true --quantized_mode 1 --ann_dir $COCO_PATH_PYTORCH/COCO --dump false --core_number 16 MODEL.DEVICE cpu
COCO_PATH_PYTORCH目录如下:
TORCH_HOME目录如下:
origin/checkpoints/mask_rcnn.pth
如果没有这个目录下的文件,在下载的该image对应目录下有原始mask_rcnn.pth,可以如下手动创建:
mkdir -p /torch/examples/online/mask-rcnn/origin/checkpoints
cp /home/Cambricon-MLU270/mask_rcnn.pth /torch/examples/online/mask-rcnn/origin/checkpoints
TORCH_HOME指定当前目录,这里用来找原始的pth的。
COCO_PATH_PYTORCH 是datasets目录
执行上面的量化脚本后:
会在当前目录下看到一个mask_rcnn.pth文件。
Online推理
创建一个目录存放生成的pth:
mkdir -p /torch/examples/online/mask-rcnn/online/checkpoints
cp /home/Cambricon-MLU270/mask_rcnn.pth /torch/examples/online/mask-rcnn/online/checkpoints
export TORCH_HOME='/torch/examples/online/mask-rcnn'
export COCO_PATH_PYTORCH='/home/Cambricon-MLU270/datasets'
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 false --core_number 16 MODEL.DEVICE mlu
Offline推理
在online模型中,运行在线代码时候,mlu会把pth模型读入,模型实际上已经在mlu的内存上了,pytorch上我们实现了把离线模型保存的功能。
export TORCH_HOME='/torch/examples/online/mask-rcnn'
export COCO_PATH_PYTORCH='/home/Cambricon-MLU270/datasets'
修改test_mask-rcnn.py中内容如下:
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 false --core_number 16 --genoff true MODEL.DEVICE mlu
表示模型生成,后缀是 cambricon的就是离线模型。
相关参数解释---
‑-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。
运行离线模型---
将下载的pytorch目录中的mlu_demo放到offline目录下
进入mlu_demo/src
mkdir build
cd build
cmake ..
make
进入 mask-rcnn目录:cd /torch/examples/offline/mlu_demo/src/mask_rcnn
test_throughput.sh 测试性能
test_accuracy.sh 测试精度
注意两个脚本需要修改地方如下图
Offlinemodel 需要指定到online里面生成的模型,我这里把它直接拷贝到了当前目录下。
执行./test_accuracy.sh运行结果如下
参考资料
- 《Cambricon-Driver-User-Guide-CN-v4.8.0.pdf》
- 《Cambricon-PyTorch-User-Guide-CN-v0.11.0.pdf》
評論