参考官方指南
https://www.tensorflow.org/install/source?hl=zh-cn#configure_the_installation
基本要求
官网测试过的源代码配置如下:
也就是说,按照这个版本安装的话不应该再产生版本的问题了。
我的配置
ubuntu 16
python 2.7
nccl 2.3
gcc 4.8.5
cuda 7.1.4
cudnn 9.0 (具体是9.0.176但是在./configure
的那里不用输这么仔细,具体原因下面会说)
安装bazel 0.10
从源码编译安装
官方的【安装步骤】,我试了没用,查到【这个博客】才发现缺乏如下步骤。
- 应该要使用,
./compile.sh
编译,要等待几分钟。
image
- 编译后,最终生成的二进制文件
bazel
在当前目录的output/bazel
下面
由于image
把这个文件移动到venv/bin/bazel
下面.
note:
安装version10的时候用这个方法没问题,我卸载干净之后用apt-get安装version21使用的是apt-get
,官网有教程,行得通。
bazel版本问题
尝试bazel 0.21
版本,产生如下报错:
ERROR: Config value cuda is not defined in any .rc file
。
最后发现tf1.8
的构建版本时使用了bazel 0.10
,所以果断换成了bazel 0.10
bazel路径问题
如果没有进入虚拟环境之前可以使用bazel
命令但是进入虚拟环境之后不行,提示没有这个文件,则:(把外部环境的bazel加入路径)
export PATH=/root/bin/:$PATH
此时再输入bazel
就可以找到啦。
卸载bazel,重新安装
卸载参考:https://github.com/bazelbuild/bazel/issues/962
卸载完毕还是没法删除bazel.0.10,是因为虚拟环境下venv/bin/bazel存在。删除这个文件之后,终于显示删除成功。
安装nccl 2.3
因为无法登陆英伟达官方网站,所有采用giuthub的方式下载,按照build,install执行命令。
NCCL-SLA.txt不存在的问题
https://github.com/tensorflow/tensorflow/issues/19679
确实没有这个文件,把license文件改名之后就没有报错了
编译Tensorflow
按照官网的说明,我需要的是r1.8
版本的,切换分支就可以了。
./configure 文件的配置
这一步也有挺多的坑
-
除了cuda,剩下的都选择
n
. -
gpu的
compute capability
查询方法:nvidia-smi
查看最上面显示的是什么型号的gpu.
image
可以看到,我的四块gpu都是GeForce GTX 108...
,然后在【英伟达给出的官网】上查询得知计算能力是6.1
-
nccl
路径
安装完之后命令行会提示你路径。 -
gcc版本,我修改为
gcc-4.8
-
cuda,cudnn
版本
都不用输那么仔细的版本,因为可以看到./configure
的输出如下:exec env -
CUDA_TOOLKIT_PATH=/usr/local/cuda
CUDNN_INSTALL_PATH=/usr/lib/x86_64-linux-gnu
GCC_HOST_COMPILER_PATH=/usr/bin/gcc-4.8
LD_LIBRARY_PATH=:/usr/local/cuda/extras/CUPTI/lib64
NCCL_INSTALL_PATH=/data/lirong/py2/nccl/nccl/build
PATH=/root/bin/:/data/lirong/py2/venv_python2.7/bin/:/data/lirong/py2/venv_python2.7/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:
/sbin:/bin:/usr/games:/usr/local/games:/usr/local/cuda/bin
PYTHON_BIN_PATH=/data/lirong/py2/venv_python2.7/bin//python
PYTHON_LIB_PATH=/data/lirong/py2/venv_python2.7/lib/python2.7/site-packages
TF_CUDA_CLANG=0
TF_CUDA_COMPUTE_CAPABILITIES=6.1
TF_CUDA_VERSION=9.0
TF_CUDNN_VERSION=7
TF_NCCL_VERSION=2
TF_NEED_CUDA=1
TF_NEED_OPENCL_SYCL=0 \
bazel build
这一步踩了很多的坑,成功之后。
然后按照官网的步骤没出错。
最后需要重新打开一次命令行窗口,再次import tensorflow
。
安装成功
踩过的坑
bazel build
编译的时候,如果遇到各种问题。command会提示Use --verbose_failures to see the command lines of failed build steps.
,我之前一直没有注意,直到加了--verbose_failures
这个条命令:
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package --verbose_failures
试过,才发现完整的报错,然后很快google一下就解决了。
issue 1
报错
AttributeError: 'int' object attribute '__doc__' is read-only
Target //tensorflow/tools/pip_package:build_pip_package failed to build
...
ERROR: /data/lirong/py2/tensorflow/tensorflow/tools/api/generator/BUILD:27:1: Executing genrule //tensorflow/tools/api/generator:python_api_gen
failed (Exit 1)
解决
pip uninstall enum
apt-get install python-enum34
重新编译之后还会会报错,但是报的是issue 2
了
issue 2
错误提示
ImportError: No module named enum
Target //tensorflow/tools/pip_package:build_pip_package failed to build
解决方法
pip uninstall enum
pip install enum34
网友评论