TensorFlowをソースコードからコンパイルしたときのメモです。CUDA 8でGPUを使わせるため。
CUDA、cuDNNはインストール済みとします。参考はこちら。
ソースコードを取得
Geforce GTX 1070はCUDA 8を使わなければならないが、TensorFlowのほうで用意されているバイナリはCUDA 7.5が対象のよう。
なので、ソースコードからインストールします。
を参考に、githubから取得してきます。
git clone https://github.com/tensorflow/tensorflow
Bazel環境の構築
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
$ echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
$ curl https://storage.googleapis.com/bazel-apt/doc/apt-key.pub.gpg | sudo apt-key add -
$ sudo apt-get update && sudo apt-get install bazel$ sudo apt-get upgrade bazel
TensorFlowのコンパイル
configureの実行
まずはconfigure。
$ apt- get install libcurl3-dev
$ sudo apt-get install gcc-4.9
$ sudo apt-get install g++-4.9
$ sudo apt-get install libstdc++6-4.9-dbg
ビルドの実行
$ bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
ERROR: /usr/local/src/tensorflow/tensorflow/core/kernels/BUILD:2207:1: no such target '//tensorflow/core:android_proto_lib_no_rtti_lite_runtime': target 'android_proto_lib_no_rtti_lite_runtime' not declared in package 'tensorflow/core' defined by /usr/local/src/tensorflow/tensorflow/core/BUILD and referenced by '//tensorflow/core/kernels:android_tensorflow_kernels_no_rtti_lite_runtime'.
ERROR: /usr/local/src/tensorflow/tensorflow/core/kernels/BUILD:2207:1: no such package 'base': BUILD file not found on package path and referenced by '//tensorflow/core/kernels:android_tensorflow_kernels_no_rtti_lite_runtime'.
ERROR: /usr/local/src/tensorflow/tensorflow/core/kernels/BUILD:2207:1: no such target '//tensorflow/core:android_tensorflow_lib_lite_no_rtti_lite_runtime': target 'android_tensorflow_lib_lite_no_rtti_lite_runtime' not declared in package 'tensorflow/core' defined by /usr/local/src/tensorflow/tensorflow/core/BUILD and referenced by '//tensorflow/core/kernels:android_tensorflow_kernels_no_rtti_lite_runtime'.
ERROR: /usr/local/src/tensorflow/tensorflow/core/kernels/BUILD:2207:1: no such target '//tensorflow/core:android_proto_lib_no_rtti_lite_runtime': target 'android_proto_lib_no_rtti_lite_runtime' not declared in package 'tensorflow/core' defined by /usr/local/src/tensorflow/tensorflow/core/BUILD and referenced by '//tensorflow/core/kernels:android_tensorflow_kernels_no_rtti_lite_runtime'.
ERROR: Evaluation of query "deps((//... union @bazel_tools//tools/jdk:toolchain))" failed: errors were encountered while computing transitive closure.
Configuration finished
Confirmed that if I make these changes to the following three files
configure
runs without error:
- Remove all
if_mobile
andif_android
conditions fromtensorflow/contrib/session_bundle/BUILD
- Remove the
ios_tensorflow_test_lib
target fromtensorflow/core/BUILD
- Remove the
android_tensorflow_kernels_no_rtti_lite_runtime
target fromtensorflow/core/kernels/BUILD
GCCは4.9を使うこと
ERROR: /usr/local/src/tensorflow/tensorflow/core/kernels/BUILD:1584:1: error while parsing .d file: /root/.cache/bazel/_bazel_root/fd8e200c02b3d1983454b39c189f0f13/execroot/tensorflow/bazel-out/local_linux-opt/bin/tensorflow/core/kernels/_objs/batchtospace_op_gpu/tensorflow/core/kernels/batchtospace_op_gpu.cu.pic.d (No such file or directory).nvcc warning : option '--relaxed-constexpr' has been deprecated and replaced by option '--expt-relaxed-constexpr'.In file included from /usr/local/cuda-8.0/include/cuda_runtime.h:78:0,from <command-line>:0:/usr/local/cuda-8.0/include/host_config.h:115:2: error: #error -- unsupported GNU version! gcc versions later than 5.3 are not supported!#error -- unsupported GNU version! gcc versions later than 5.3 are not supported!
パッケージの作成
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
Traceback (most recent call last):File "setup.py", line 26, in <module>from setuptools import find_packages, setup, Command, ExtensionImportError: No module named setuptools
ERROR: /usr/local/src/tensorflow/tensorflow/contrib/rnn/BUILD:65:1: undeclared inclusion(s) in rule '//tensorflow/contrib/rnn:python/ops/_gru_ops_gpu':this rule is missing dependency declarations for the following files included by 'tensorflow/contrib/rnn/kernels/gru_ops_gpu.cu.cc':'/usr/local/cuda-8.0/include/cuda_runtime.h''/usr/local/cuda-8.0/include/host_config.h''/usr/local/cuda-8.0/include/builtin_types.h''/usr/local/cuda-8.0/include/device_types.h''/usr/local/cuda-8.0/include/host_defines.h''/usr/local/cuda-8.0/include/driver_types.h''/usr/local/cuda-8.0/include/surface_types.h''/usr/local/cuda-8.0/include/texture_types.h''/usr/local/cuda-8.0/include/vector_types.h''/usr/local/cuda-8.0/include/library_types.h''/usr/local/cuda-8.0/include/channel_descriptor.h''/usr/local/cuda-8.0/include/cuda_runtime_api.h''/usr/local/cuda-8.0/include/cuda_device_runtime_api.h''/usr/local/cuda-8.0/include/driver_functions.h''/usr/local/cuda-8.0/include/vector_functions.h''/usr/local/cuda-8.0/include/vector_functions.hpp''/usr/local/cuda-8.0/include/common_functions.h''/usr/local/cuda-8.0/include/math_functions.h''/usr/local/cuda-8.0/include/math_functions.hpp''/usr/local/cuda-8.0/include/math_functions_dbl_ptx3.h''/usr/local/cuda-8.0/include/math_functions_dbl_ptx3.hpp''/usr/local/cuda-8.0/include/cuda_surface_types.h''/usr/local/cuda-8.0/include/cuda_texture_types.h''/usr/local/cuda-8.0/include/device_functions.h''/usr/local/cuda-8.0/include/device_functions.hpp''/usr/local/cuda-8.0/include/device_atomic_functions.h''/usr/local/cuda-8.0/include/device_atomic_functions.hpp''/usr/local/cuda-8.0/include/device_double_functions.h''/usr/local/cuda-8.0/include/device_double_functions.hpp''/usr/local/cuda-8.0/include/sm_20_atomic_functions.h''/usr/local/cuda-8.0/include/sm_20_atomic_functions.hpp''/usr/local/cuda-8.0/include/sm_32_atomic_functions.h''/usr/local/cuda-8.0/include/sm_32_atomic_functions.hpp''/usr/local/cuda-8.0/include/sm_35_atomic_functions.h''/usr/local/cuda-8.0/include/sm_60_atomic_functions.h''/usr/local/cuda-8.0/include/sm_60_atomic_functions.hpp''/usr/local/cuda-8.0/include/sm_20_intrinsics.h''/usr/local/cuda-8.0/include/sm_20_intrinsics.hpp''/usr/local/cuda-8.0/include/sm_30_intrinsics.h''/usr/local/cuda-8.0/include/sm_30_intrinsics.hpp''/usr/local/cuda-8.0/include/sm_32_intrinsics.h''/usr/local/cuda-8.0/include/sm_32_intrinsics.hpp''/usr/local/cuda-8.0/include/sm_35_intrinsics.h''/usr/local/cuda-8.0/include/surface_functions.h''/usr/local/cuda-8.0/include/texture_fetch_functions.h''/usr/local/cuda-8.0/include/texture_indirect_functions.h''/usr/local/cuda-8.0/include/surface_indirect_functions.h''/usr/local/cuda-8.0/include/device_launch_parameters.h''/usr/local/cuda-8.0/include/cuda_fp16.h''/usr/local/cuda-8.0/include/math_constants.h''/usr/local/cuda-8.0/include/curand_kernel.h''/usr/local/cuda-8.0/include/curand.h''/usr/local/cuda-8.0/include/curand_discrete.h''/usr/local/cuda-8.0/include/curand_precalc.h''/usr/local/cuda-8.0/include/curand_mrg32k3a.h''/usr/local/cuda-8.0/include/curand_mtgp32_kernel.h''/usr/local/cuda-8.0/include/cuda.h''/usr/local/cuda-8.0/include/curand_mtgp32.h''/usr/local/cuda-8.0/include/curand_philox4x32_x.h''/usr/local/cuda-8.0/include/curand_globals.h''/usr/local/cuda-8.0/include/curand_uniform.h''/usr/local/cuda-8.0/include/curand_normal.h''/usr/local/cuda-8.0/include/curand_normal_static.h''/usr/local/cuda-8.0/include/curand_lognormal.h''/usr/local/cuda-8.0/include/curand_poisson.h''/usr/local/cuda-8.0/include/curand_discrete2.h'.
$ echo 'export CUDA_ROOT=/usr/local/cuda' >> ~/.bash_profile
$ echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bash_profile
$ echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH' >> ~/.bash_profile
$ echo 'export CPATH=/usr/local/cuda/include:$CPATH' >> ~/.bash_profile
Work-around from #1157 seems to work
add
cxx_builtin_include_directory: "/usr/local/cuda-8.0/include"
tothird_party/gpus/crosstool/CROSSTOOL
cxx_builtin_include_directory: "/usr/local/cuda%{cuda_version}/include"
cxx_builtin_include_directory: "/usr/local/cuda-8.0/include"