寒武纪 MLU270上測試Tensorflow模型

准备工作

具體參照《Cambricon_MLU270运行环境搭建》准备好SDK和安装环境

此測試基于Cambricon SDK v1.6.0版本

在workdir目錄下解壓tensorflow包

tar xvf Cambricon-MLU270/v1.6.0/tensorflow/src/tensorflow-v1.0.2.tar.gz

得到cambricon_tensorflow目錄,包含models,配置文件等

文檔:在ftp的最新版本中,找到docker对应的版本。
       

下载 tensorflow-1.0.2-devel-mlu-ubuntu16.04-py3.7.tar包,

devel版本:源码编译,二次开发使用。

載入鏡像

        docker load < tensorflow-x.y.z-devel-mlu-ubuntu16.04-py3.7.tar #x,y,z是版本号

                       docker images #检查是否安装成功,是否有刚才导入的镜像

说明:

目前提供两种方式供开发者,1) docker(这里提供的是devel版本的docker)2)源码

其中,docker的方式,把tf需要的环境都配置好,devel是指二次开发,这里的docker里面没有把tf编译ok,不能直接通过import的方式导入。使用上,需要先编译,再source 环境,再在python里面import。这里需要注意。

 

启动容器

       进入到SDK docker image所在目录

       cd ~/workdir/Cambricon-MLU270/v1.6.0/tensorflow

       加载image,命令行执行:sudo docker load < tensorflow-x.y.z-devel-mlu-ubuntu16.04-py3.7.tar (#x,y,z是版本号)

sudo docker load < tensorflow-1.0.2-devel-mlu-ubuntu16.04-py3.7.tar

       查看刚刚加载的image:sudo docker images
       

       启动容器:基于镜像 tensorflow-1.0.2-devel-mlu-ubuntu16.04-py3.7.tar 启动一个容器,并映射相关工作目录,脚本內容如下
       

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

该脚本启动的容器所使用的镜像为:hub.cambricon.com/tensorflow/tensorflow:1.0.2-mlu-ubuntu16.04-py3.7

其中:

-v参数: $PWD/Cambricon-MLU270/:/home/Cambricon-MLU270;前面是host端地址,后面是在docker 容器里面所映射的地址。
        

进入docker后,当前目录会有一个 tensorflow-src 目录,这个就是tf的源码

清理一下:bazel clean

编译:./build_tensorflow_mlu.sh

如果遇到下载报错,重复执行 build命令即可,多试几次可以成功。
        

激活环境:

回到根目录:cd /

激活环境:source /tensorflow-src/virtualenv_mlu/bin/activate

在python中导入:
       

说明环境激活ok.

下面以1.6.0版本的resnet50_v1模型为例进行模型量化、转离线、测试
        

模型量化

       当前models/tensorflow的模型没有提供cpu.pb,直接运行跑不起来,pb文件是需要在官方网站上下载ckpt文件,利用tf官方工具转pb。 这里友情赞助下已经转化ok的pb文件,地址如下:

       链接:https://pan.baidu.com/s/1RPRkTbVT782ow682WXBzFQ

       提取码:idij

       下载后解压到如下位置:
       

cd /tensorflow-src/tensorflow/cambricon_examples/tools/fppb_to_intpb

export DATASET_HOME='/home/Cambricon-MLU270/datasets/' ## datasets放在此路径

export TENSORFLOW_MODEL_HOME='/home/Cambricon-MLU270/models/tensorflow' ## models放在此路径

修改generate_image_list.py文件


       

       然后执行python generate_image_list.py生成图片list
       

修改generate_ini.py文件:将所有的 “TENSORFLOW_MODELS_MODEL_HOME” 为“TENSORFLOW_MODEL_HOME”

       执行 python generate_ini.py生成configs目录下生成模型的ini
       

       执行量化模型程序:python fppb_to_intpb.py configs/resnet50_v1_naive_int8.ini
       

       量化完成后会在当前目录下生成
       

Offline推理

  • 生成离线模型

将 resnet50_v1_int8.pb 转换为 Cambricon 可运行的 .cambricon 格式模型,执行如下命令:

cd /tensorflow_src/tensorflow/cambricon_examples/tools/pb_to_cambricon

export TENSORFLOW_HOME=/tensorflow_src

exportTENSORFLOW_MODEL_HOME=/home/Cambricon-MLU270/models/tensorflow

export DATASET_HOME='/home/Cambricon-MLU270/datasets/'

./build_host.sh

./tensorflow_pb_to_cambricon.sh resnet50_v1 int8 1 1 small MLU270 [batch 为1,core_num为1;两个参数根据需要设置]
       

执行后生成的离线模型 “resnet50_v1_int8_1cm_1batch.cambricon”位于如下目录
       

  • 测试离线模型

cd /tensorflow_src/tensorflow/cambricon_examples/cpp_demos/offline/label_image

./build_host.sh

./label_image_offline.sh --network=resnet50_v1 --dtype=int8 --batch_size=1 --thread_num=1 --core_num=1 --image_number=1000 --visible_devices=0 --core_version=MLU270 --preload_all_imgs=true --image_mode=small --perf_mode=true

       运行成功后结果如下
             

Online推理

将 resnet50_v1_int8.pb 转换为 Cambricon 可运行的 .cambricon 格式模型,执行如下命令:

cd /tensorflow_src/tensorflow/cambricon_examples/cpp_demos/online/label_image

export TENSORFLOW_HOME=/tensorflow_src

exportTENSORFLOW_MODEL_HOME=/home/Cambricon-MLU270/models/tensorflow

export DATASET_HOME='/home/Cambricon-MLU270/datasets/'

./build_host.sh

       ./label_image_online.sh --network=resnet50_v1 --dtype=int8 --batch_size=1 --thread_num=1 --core_num=1 --image_number=1000 --visible_devices=0 --preload_all_imgs=true --image_mode=small --perf_mode=true

       执行成功后结果如下图所示
        

参考资料

  • 《Cambricon-Driver-User-Guide-CN-v4.8.0.pdf》
  • 《Cambricon-PyTorch-User-Guide-CN-v0.11.0.pdf》


 

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

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

評論