CE3226 之 算法模型的移植(Classifier) 简介

一、CE3226 之 算法模型的移植(Classifier) 简介

MagicMind 是面向寒武纪MLU(Machine Learning Unit,机器学习单元)的推理加速引擎。MagicMind 能将深度学习框架(Tensorflow,Pytorch 等)训练好的算法模型转换成MagicMind 统一计算图表示,并提供端到端的模型优化、代码生成以及推理业务部署能力。MagicMind 致力于为用户提供高性能、灵活、易用的编程接口以及配套工具,让用户能够专注于推理业务开发和部署本身,而无需过多关注底层硬件细节。

MM 的部署流程:

           

            

  

以上是我们的工程运行环境,下面来看具体的步骤,所使用的环境为 Ubuntu16.04 + docker ,开发板为 ce3226,内核为0.8 。

1.1、mlu 驱动安装

量化的过程在ce3226中,需要先将mlu 驱动安装,进入ce3226 终端,运行脚本如下:


 

/mps/ko 进入,运行 drv.sh 脚本

 

1.2、 数据集准备

运行本示例前,用户需自行配置对应的深度学习框架模型和数据集,寒武纪提供了部分可用于benchmark的网络模型/数据集列表,见《寒武纪MagicMind Benchmark指南》`模型和数据集`章节。

 

以ResNet50举例:

  1. 使用的数据集为:ILSVRC2012_img_val.tar,可在imagenet官网下载或者联系寒武纪技术支持人员获取。

  图片列表如下:

  ILSVRC2012_val_00000001.JPEG

  ILSVRC2012_val_00000002.JPEG

  ...

  ILSVRC2012_val_00001000.JPEG

  1. 从官网下载ResNet50网络权重和模型。
  2. 自行或使用sample中提供的Python脚本将数据集中的图片做预处理。用户如果在寒武纪提供的docker中,没有Python环境,请先运行如下指令:

 

  apt-get update

apt-get install vim

apt-get install python3-pip

apt install libgl1-mesa-glx

pip3 install --upgrade pip

pip3 install numpy

pip3 install opencv-python


也可以在其他环境上生成预处理文件夹。该Python环境仅用来实现预处理,不影响其他程序运行。 

  mkdir output

python3 preprocess.py --labels ./path/to/labels.txt --image_path ./path/to/imagenet_val/ --save_path ./path/to/output/

sample文件夹内预先提供了1000张图片的labels.txt,请用户自行根据实际运行数据集调整。

 

1.3、 模型量化并转换 

sample_calibration 是基于Caffe模型,向用户展示如何使用MagicMind的API进行模型解析、量化校准、编译、部署并运行的例子。位置如下:

samples\magicmind\basic_samples\sample_calibration

 

工作原理介绍: 

本示例基于MagicMind C++ API,展示模型解析到运行的整体流程,包括:

  1. 基于Caffe模型解析并生成INetwork。
  2. 基于校准数据集进行量化校准。
  3. 用户选择量化类型,包括对称量化和非对此量化,默认为对称量化
  4. 配置并构建网络。
  5. 序列化模型,生成`model`。
  6. 反序列化模型并实例化IModel。
  7. 从IModel初始化并配置IEngine。
  8. 从IEngine实例化运行时IContext用于运行网络。
  9. 计算图片集并输出精度(Top1/Top5)。

 

运行 sample_server ,使用rpc 服务 

[root@cambricon /userdata]# cd bin/


[root@cambricon /userdata/bin]# ls

sample_server

[root@cambricon /userdata/bin]# ./sample_server

1970-01-01 01:42:34.728803: INFO: magicmind/runtime/remote/rpc_server.cc:282] Server listening on 0.0.0.0:9009

 

 

以下为编译过程:

cd /usr/local/neuware/samples/magicmind/basic_samples/sample_remote

mkdir build

cd build

cmake -DABI=1 ..

make

得到量化模型的工具sample_calic, 然后使用工具来量化转换模型 

./sample_calib /inference/models/resnet50/ResNet-50-deploy.prototxt /inference/models/resnet50/

,→ResNet-50-model.caffemodel ../../sample_calibration/labels.txt ../../sample_calibration/

,→output_224/


最终得到量化后的模型remote_model
 

1.4、 编译并在板子中执行代码 

工程位置如下:

cd /usr/local/neuware/samples/magicmind/basic_samples/sample_calibration/edge

 

在之前先配置在板子中的环境: 

export ABI_MODE=1

export NEUWARE_HOME=/usr/local/neuware/edge/

export TOOLCHAIN_DIR=/tmp/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu/

./build_for_edge.sh

编译出来 infer_model 可执行文件

把build 里面的infer_model 拷贝到EVB 板子上,同时也把处理好的数据集和模型拷贝到板子上,然后

运行 

./infer_model ./output_224_nhwc/ labels.txt remote_model

 
结果如下所示:

[root@cambricon /userdata/karl]# ./infer_model ./output_224_nhwc/ labels.txt rem

ote_model

1970-01-01 00:36:03.347286: INFO: magicmind/runtime/core/model.cc:158] Create Engine Finish!

[MMINFO] top1:0.000000 top5:0.000000

注:该部分结果有点问题,但是已经解决,需要后续修改。

二、总结

这部分博文主要介绍了,如何将模型量化后移植到CE3226的开发板中并执行,需要有数据还有运行驱动,开启rpc 服务。

 

三、参考资料

【1】《Lesson8 CE3226 算法模型的移植(Classifier).pdf》 

【2】《Cambricon-MagicMind-Best-Practices-Guide-CN-v0.7.0.pdf》

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

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

评论