Quantization-caffe

编译Quantization-caffe

最近疯狂肝caffe模型量化,尝试很多模型量化方法,踩坑无数,各家用的量化方式不尽相同,配了多种模型量化环境后,发现自己最初的问题不用量化模型也可以解决,记录一下调研的方法,以及Quantization-caffe编译的问题。

caffe-int8-convert-tools: https://github.com/BUG1989/caffe-int8-convert-tools,基于TensorRT2.0 Int8 calibration tools的量化方法,使用KL算法找到合适的阈值进行Float32到Int8(-127-127)的量化。README文档中有基于TensorRT进行8-bit推理的PDF,代码实现流程很简单,按照HowTo一步一步做没有遇到特殊的问题。

算丰模型量化:https://sophon-edge.gitbook.io/project/toolkit/bmnet-compiler,操作步骤明确,按照网页说明文档没有遇到特别的问题,就是得到的量化模型,需要在特定开发板上进行测试。

NVIDIA/caffehttps://github.com/NVIDIA/caffe,网页介绍上说支持16bit floating point训练和推理,项目提供了cpu和gpu的镜像,如果创建失败,也可以按照caffe官网的编译文档自行编译,只是调研了该项目,还没有亲自编译,但是看文档说明应该和下一个的编译方式大同小异。

Quantization-caffehttps://github.com/GongCheng1919/Quantization-caffe,鬼使神差地开始编译这个项目,可能是被量化给蒙蔽了双眼,这个项目的README文档,在我编译成功后才开始仔细阅读,介绍说的一种ultra-low loss quantization (μL2Q) 量化方法,具体原理有网页有具体的参考文献。下面是针对该项目编译的一些细节。

1. 前提

电脑配置:Ubuntu 16.04 , Tesla P100

拉取镜像:docker pull nvidia/cuda:9.2-cudnn7-devel-ubuntu18.04

项目网址:https://github.com/GongCheng1919/Quantization-caffe.git

2. 编译

在上述镜像下创建容器,下载好代码,解压缩,之后就可以开始编译了。

按照caffe官网的编译文档进行,我用的是cmake的编译方式。http://caffe.berkeleyvision.org/installation.html#prerequisites

1. 在Quantization-caffe-master下执行以下操作

我的路径如下:

root@b6cfae995923:/home/Quantization-caffe-master# mkdir build
root@b6cfae995923:/home/Quantization-caffe-master# cd build
root@b6cfae995923:/home/Quantization-caffe-master/build# cmake ..

执行完之后开始报错,原因是少依赖包

2. 装编译所需的依赖包

root@b6cfae995923:/home/Quantization-caffe-master/build# apt install libboost-all-dev libprotobuf-dev protobuf-compiler libhdf5-serial-dev libgflags-dev libgoogle-glog-dev
root@b6cfae995923:/home/Quantization-caffe-master/build# apt install libatlas-base-dev liblmdb-dev  libleveldb-dev libsnappy-dev
root@b6cfae995923:/home/Quantization-caffe-master/build# cmake ..

提示Cmake Error at cmake/Dependencies.cmake:99 cmake找不到OpenCV库所在的路径

root@b6cfae995923:/home/Quantization-caffe-master/build# apt install libopencv-dev libopencv-library-dev
root@b6cfae995923:/home/Quantization-caffe-master/build# apt install python-pip doxygen git
root@b6cfae995923:/home/Quantization-caffe-master/build# pip install numpy

装完以上依赖包之后提示GIT : unknown,卸载该包重新装过还是没有用,就搁置了,除了这项,其他的都显示正常。

没有报错之后继续执行以下的命令等待编译成功就行了。

root@b6cfae995923:/home/Quantization-caffe-master/build# make all
root@b6cfae995923:/home/Quantization-caffe-master/build# make install
root@b6cfae995923:/home/Quantization-caffe-master/build# make runtest

编译成功后会提示

【100%】Built target runtest

3. 测试

该开源项目支持配置量化,如果未在模型中配置任何量化参数,则默认情况下将执行全精度的网络模型。

  1. Configure quantization

    如果上述安装执行完成后,可以将指定的压缩参数(如下所示)添加到每个层,以示该层需要执行的压缩操作。

    weights_compress:"ULQ" 
      weights_compress_param{
        maxbits:8
      }
    

    其中 weights_compress: 量化方式

    weights_compress_param: 量化参数

  2. 运行demo.py

    caffe模型支持 LevelDB,LMDB,和HDF5三种格式的输入,所以在运行demo.py前可以先执行以下命令

    # Download data
    ./data/mnist/get_mnist.sh
    # Prepare data
    ./examles/mnist/create_mnist.sh
    

    如果提示没有 convert_mnist_data.bin文件,从build文件夹下把上述文件拷贝到./example/mnist下,执行./convert_mnsit.sh便会生成caffe模型需要的LMDB文件。

    然后运行demo.py

    No module named pylab : pip install matplotlib
    No module named _tkinter: apt install python-tk
    No module named skimage.io:  pip install scikit-image
    No module named google.protobuf.internal: pip install protobuf
    Check failed: error == cudaSuccess (10 vs. 0)  invalid device ordinal:demo.py 设置caffe.set_device(0)
    
  3. 测试通过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值