寒武纪 MLU270上測試Pytorch模型

准备工作

       參照《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》


 

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論