最近接到公司的一个任务,需要配置c++版本的tensorflow-gpu,刚开始的时候一脸懵逼,只会python的我对C++感到很惧怕,但是为了完成任务还得干…….下面就是编译tensorflow的各种坑,其实都是版本问题。
Tensorflow-gpu源码linux-gcc编译
安装bazel
首先,要安去官网github上下载对应编译tensorflow版本的bazel。
download the Bazel binary installer named bazel-
-installer-linux-x86_64.sh from the Bazel releases page on GitHub.在linux环境下修改.sh权限,一般下载下来需要修改:
1
chmod u+x bazel-<version>-installer-linux-x86_64.sh
然后执行sh就可以了,别忘记加‘–user’参数,否则安装失败:
1
2./bazel-<version>-installer-linux-x86_64.sh --user
sh ./bazel-<version>-installer-linux-x86_64.sh --user
编译tensorflow-gpu
原来用tensorflow只是用于python语言,直接pip install tensorflow==X.X命令就搞定,太方便了,这猛地来个gcc编译tensorflow还不适应,那也得弄啊。
使用 Git 克隆 TensorFlow 代码库:
1
git clone https://github.com/tensorflow/tensorflow.git
代码库默认为
master
开发分支。您也可以检出要编译的版本分支:1
2cd tensorflow
git checkout branch_name # r1.9, r1.10, etc.这里注意一下,必须选择与bazel对应版本的tensorflow,不管是GPU还是CPU,我就是没注意,踩了很多坑,具体版本对应请参考tensorflow官网,我列出了目前官网的GPU版本对应,如下。还要注意一下自己环境gpu驱动cuda、cudnn的版本。
通过在 TensorFlow 源代码树的根目录下运行以下命令来配置编译系统:
1
./configure
这一步如果想安装gpu版本,在cuda选项选择yes,其他要不是默认,要不是no,很简单,配错了重新配,这个没事。
开始编译,两种方式cpu、gpu,需要等待好长时间,因为下载东西太多:
1
2bazel build --config=opt //tensorflow:libtensorflow_cc.so
bazel build --config=opt --config=cuda //tensorflow:libtensorflow_cc.so编译正常完成后,会在
bazel-bin/tensorflow/
文件夹下生产libtensorflow_cc.so
和libtensorflow_framework.so
这两个动态库文件。注:如果这一步报错,肯定你的tensorflow、bazel、cuda、cudnn版本不对应,所以编译之前的工作很重要,一不小心就掉进了坑。
如果到这一步编译顺利完成,那就基本大功告成,还需要运行一个脚本build_all_xxx.sh(哪个操作环境运行哪个),我的是linux,安装依赖包:
1
2cd tensorflow/contrib/makefile
sh build_all_linux.sh完成后会生成一个gen文件夹,里面都是依赖库。
注:如果网快的话,很快,我的公司网就超级慢,等了好久。
- 至此,大功告成,是不是很简单。如果编译成功请给个赞,谢谢。