一、用二进制安装程序安装安装Bazel

二进制安装程序位于Bazel的GitHub发行页面上。

安装程序包含Bazel二进制文件1。还必须安装一些其他库才能使Bazel工作。

第1步:安装所需的包

首先,安装先决条件:pkg-config,zip,g++,zlib1g-dev,unzip,和python。

sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python

第2步:下载Bazel

接下来,bazel--installer-linux-x86_64.sh 从GitHub上的Bazel发布页面下载Bazel二进制安装程序。我安装的是bazel-3.1.0-installer-linux-x86_64.sh(2020.5.13最新版本)

第3步:运行安装程序

按如下方式运行Bazel安装程序:

// 以下是统一写法
chmod +x bazel-<version>-installer-linux-x86_64.sh
./bazel-<version>-installer-linux-x86_64.sh --user

//   以下是对应版本的写法
chmod +x bazel-3.1.0-installer-linux-x86_64.sh
./bazel-3.1.0-installer-linux-x86_64.sh --user

该–user标志将Bazel安装到 H O M E / b i n 系 统 上 的 目 录 并 设 置 . b a z e l r c 路 径 HOME/bin系统上的目录并设置.bazelrc路径 HOME/bin.bazelrcHOME/.bazelrc。使用该–help命令可以查看其他安装选项。

第4步:设置您的环境

如果您使用–user上面的标志运行Bazel安装程序,则Bazel可执行文件将安装在您的$HOME/bin目录中。将此目录添加到默认路径是个好主意,如下所示:

export PATH="$PATH:$HOME/bin"

您也可以将此命令添加到您的~/.bashrc文件中。

sudo gedit ~/.bashrc,最后一行加上

export PATH="$PATH:$HOME/bin"

然后使之生效:source ~/.bashrc

二、下载TensorFlow

git clone https://github.com/tensorflow/tensorflow.git

解压

unzip tensorflow-master.zip

进入tensorflow-master文件夹执行

bazel build tensorflow/tools/graph_transforms:transform_graph

此步可能会报一些模块找不到的错误,依次安装相应模块后重新编译即可。

bazel-bin/tensorflow/tools/graph_transforms/transform_graph \
--in_graph=/home/cynthia/Chen/Code/Downloads/model_regression/pb_model/model.pb \
--out_graph=/home/cynthia/Chen/Code/Downloads/model_regression/pb_model/model_optimized.pb \
--inputs='ImgInput' \
--outputs='ImgOutput' \
--transforms='fold_constants(ignore_errors=true) fold_batch_norms quantize_weights strip_unused_nodes sort_by_execution_order'

转换成功模型减小为原来的1/4.

上述转换操作的各个意思为:

  1. remove_node : 该参数表示删除节点,后面的参数表示删除的节点类型,注意该操作有可能删除一些必须节点

  2. fold_constans: 查找模型中始终为常量的表达式,并用常量替换他们。

  3. fold_batch_norms: 训练过程中使用批量标准化时可以优化在Conv2D或者MatMul之后引入的Mul。需要在fold_cnstans之后使用。(fold_old_batch_norms和他的功能一样,主要是为了兼容老版本)

  4. quantize_weights:将float型数据改为8位计算方式(默认对小于1024的张量不会使用),该方法是压缩模型的主要手段。

  5. strip_unused_nodes:除去输入和输出之间不使用的节点,对于解决移动端内核溢出存在很大的作用。

  6. merge_duplicate_nodes: 合并一些重复的节点

  7. sort_by_execution_order: 对节点进行排序,保证给定点的节点输入始终在该节点之前。

更多模型加速及量化细节请参考:
TensorFlow C++ CPU 模型预测优化加速
TensorFlow Mobile模型压缩
tensorflow之模型压缩
基于OpenGL ES的深度学习框架编写
阿里开源!轻量级深度学习端侧推理引擎 MNN

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐