1.下载合适版本的的tensorflow源码(注意tensorflow的版本与CUDA和cuDNN对应)
https://github.com/tensorflow/tensorflow/releases
本文选择的版本是Release 1.10.0
2.选择合适版本的bazel(注意与tensorflow的版本匹配)
https://github.com/bazelbuild/bazel/releases
本文选择的版本是Release 0.15.0,注意源码编译需要选择dist版本不要选择source code,否则安装会出错
编译完添加环境变量:
是
export PATH=$PATH:/home/name/software/bazel-0.15.0/output/
而不是
export PATH=$PATH:/home/name/software/bazel-0.15.0/output/bazel
※使用ipv6校园网可加速访问和下载GitHub
3.安装合适版本的gcc编译器
sudo apt-get install gcc-4.8
※Ubuntu18.04自带gcc-7编译器,如果卸载gcc-7然后再安装gcc-4.8将导致依赖gcc-7的Nvidia-driver-390不可用。因此必须在保留gcc-7的情况下安装gcc-4.8,而且安装完gcc-4.8后不要将默认的gcc编译器从gcc-7修改为gcc-4.8。
4. 默认已安装CUDA和cuDNN
5. 编译准备
(1)
./configure
python路径:/home/jason/env/tf-gpu/bin/python
CUDA和cuDNN路径:默认/usr/local/cuda(已链接至/usr/local/cuda-9.0)
除了Do you wish to build Tensorflow with CUDA support?选择yes其它的都选no
CUDA选默认选9.0,cuDNN默认选7
gcc编译器路径:
默认是/usr/bin/gcc指向gcc-7,因此应选择/usr/bin/gcc-4.8
(2)
使用bazel build --config=opt --config=cuda //tensorflow:libtensorflow_cc.so开始编译,在编译即将完成时,总会遇到libcublas.so.9.0, needed by bazel-out/[…]/libtensorflow_framework.so, not found (try using -rpath or -rpath-link)的error
Stackoverflow上给出了解决方法:
https://stackoverflow.com/questions/47080760/tensorflow-fails-to-compile/47295278
①进入root模式
su
②创建文件
gedit /etc/ld.so.conf.d/cuda.conf
添加一行
/usr/local/cuda/lib64
③ldconfig
6.开始编译
bazel build --config=opt --config=cuda //tensorflow:libtensorflow_cc.so
等待编译完成… …
INFO: Elapsed time: 1618.338s, Critical Path: 137.08s
INFO: 4071 processes: 4071 local.
INFO: Build completed successfully, 4124 total actions
7.注意!
bazel编译后的文件在原来的文件夹里只是产生了软链接,链接指向.cache里的真正的编译文件,如果不将编译文件保存下来,缓存被清空后软链接将无效!