最近研究模型速度问题,查了一些文献,有的文献说tensorflow本身的性能比其他的深度学习框架要低,但是tensorflow的开发团队加入了许多优化的设置,如果打开这些设置tensorflow的性能能够达到甚至超越现有的深度学习框架。但是现有的安装包为了平台的通用性往往在生成对应的wheel文件时会关掉一些配置,因此需要从源码编译安装包并且在编译的过程中自己打开一些需要的配置。
基于上述原因,我采用了源码编译的方式,但是速度并没有明显提升,现在把源码编译的过程介绍如下:
系统: centos7
1. 安装bazel
1. 安装bazel时可以参考https://docs.bazel.build/versions/master/install-redhat.html, 但是该操作安装的bazel版本较高,具体是哪个版本我忘记了。在编译的过程中会报出bazel相关的错误。此时主要是由于bazel版本过高导致
2. 采用下载安装包的方式安装bazel0.10.0,主要是该方式是tensorflow1.8编译时所支持的bazel版本。具体安装https://docs.bazel.build/versions/master/install-ubuntu.html 。
注意:安装的bazel版本一定要对,不然会报一大堆bazel相关的错误。
2. 安装python依赖包
numpy, dev, pip, wheel这些软件包建议都使用yum或者sudo安装,另外这些包安装的地点也就是tensorflow编译的地点,这个要一致。具体安装过程比较简单不再说明,主要注意一点:路径一定要一致。
我开始使用pip安装的numpy结果不能使用总是报numpy的错误,后来使用yum安装到/usr/lib64下面,结果路径选的是/usr/lib。最后也是一直报numpy 的问题。所以路径和方式一定要对
至于dev有的平台有可能是devel所以如果安装dev找不到对应安装包的话可以尝试改一下名字。
3. 安装git
必须要在linux平台下安装git并且下载代码,切记不可在windows下面下载完代码在放到linux系统下,此时运行会报一个版本找不到的问题。这主要是git的一些链接没有。
4. git 代码
git 代码时要注意使用:
git clone --recurse https://github.com/tensorflow/tesnorflow
git checkout r1.8
git submodules
git submodules init
此时一定要注意把源码的相关模块也git下来,不然编译的过程会出现各种莫名其妙的bug。主要是缺少各种组件
5. 一些插件
这些主要是java, gcc这些一般都会在安装上面那些东西的时候带上,如果没有就自己安装。
5. 配置configure
完成上述前提之后就可以开始配置文件并编译了。具体为:
./configure选择需要打开的配置,其中有clang,MPT,ANDROID。有些设置我不知道是什么意思,所以设置的为N,其他的openCL以及CUDA也设的是N。因为这些需要别的插件。
6. 编译
上面配置完了采用下述指令就可以进行编译了
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
7. 安装
最后到采用pip install 执行tmp/tensorflow_pkg下面的whl文件就完成了安装。
8. 验证
可以根据以前的文章进行验证。
9. 总结
总结起来,源码编译的过程并不复杂,主要是插件版本,以及git的时候一定要在linux下git并且要把所有的模块都git下来。
最后如果大家在编译过程中遇到别的问题欢迎一起探讨。