以下で解説しているのは、
- Fedora 23 ワークステーションをインストールしたPC上で
- GTX1060を使って
- TensorFlowを動かしたい
という場合におこなう作業です(2016年8月31日現在)。
1. CUDAのインストール
下記を参考にしました。
Install NVIDIA CUDA on Fedora 22 with gcc 5.1
準備
必要なものをインストールしておきます。
dnf -y install kernel-devel dkms
dnf -y groupinstall "C Development Tools and Libraries"
CUDAのインストール
下記の場所からCUDA 8 RCのrpmファイルを取ってきます。
CUDA Toolkit | NVIDIA Developer
私が使ったのは cuda-repo-rhel7-8-0-rc-8.0.27-1.x86_64.rpm です。
dnf -y install cuda-repo-rhel7-8-0-rc-8.0.27-1.x86_64.rpm
dnf -y install cuda
設定ファイルを作成
以下の2つのファイルを作成します。
/etc/profile.d/cuda.sh を下記の内容で。
export PATH=$PATH:/usr/local/cuda/bin
/etc/ld.so.conf.d/cuda.conf を下記の内容で。
/usr/local/cuda/lib64
作成できたら、下記のコマンドを実行。
ldconfig
そしてrebootします。
reboot
NVIDIA driverの.runファイルを実行
下記の場所からGTX1060用のドライバファイルを取ってきます。
http://www.nvidia.com/Download/index.aspx
私が使ったのは NVIDIA-Linux-x86_64-367.44.run です。
chmod 755 NVIDIA-Linux-x86_64-367.44.run
./NVIDIA-Linux-x86_64-367.44.run
最初のほうのDKMS関係と32-bitライブラリ関係の質問にはYesと、
最後のほうのnvidia-xconfig関係の質問にはNoと答えましょう。
チェックは(例によって)以下のようにおこないます。
cd /usr/local/cuda/samples/1_Utilities/deviceQuery
make
./deviceQuery
2. JDK 8のインストール
よく分からなかったので、下記の場所にあるjdk-8u101-nb-8_1-linux-x64.shを使用しました。
http://www.oracle.com/technetwork/articles/javase/jdk-netbeans-jsp-142931.html
この.shファイルを実行後、インストール先のパスをJAVA_HOMEに設定します。
export JAVA_HOME=/usr/local/jdk1.8.0_101/
このパスの設定は、Bazelのインストールだけでなく、TensorFlowのインストールにも必要です。
3. Bazelをソースからインストール
BazelのサイトのCompiling from sourceにある指示通りに作業します。
Installing Bazel - Bazel
作業前に、gccにパスが通っているかどうかチェックしておきましょう。通っていなければ
export CC=/usr/bin/gcc
等としておきます。そして、以下を実行します。
git clone https://github.com/bazelbuild/bazel.git
cd bazel
./compile.sh
作成されたバイナリを適当な場所にコピーするのをお忘れなく。
4. TensorFlowをソースからインストール
TensorFlowのサイトのInstalling from sourcesにある指示通りに作業します。
TensorFlow -- Download and Setup
準備
必要なものをインストールしておきます。
dnf -y install python-wheel python-devel swig zlib-devel
pip install --upgrade pip
pip install --upgrade numpy
zlib-develは、TensorFlowのサイトの上記の場所には書かれていないですが、必要です。
cuDNNのダウンロードとインストール
CUDA 8.0 RC 向けのcuDNNをダウンロードしましょう。
私が使ったのは cudnn-8.0-linux-x64-v5.1.tgz です。
tar xvzf cudnn-8.0-linux-x64-v5.1.tgz
cp cuda/include/cudnn.h /usr/local/cuda/include
cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
インストールのためのコンフィギュレーション
GPU supportのところでyと答えるのを忘れないようにしましょう。
git clone https://github.com/tensorflow/tensorflow
cd tensorflow
./configure
インストール
bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
pip install /tmp/tensorflow_pkg/tensorflow-0.10.0rc0-cp27-none-linux_x86_64.whl
ビルドはそれなりに時間がかかると思います。
うまくいかなければ、インストールのためのコンフィギュレーションのところで、
gccのパスを明示的に設定してからやり直すなどしてみてください。
インポートしてみる
インストール中に居たtensorflowディレクトリから抜けます。その後にチェックしましょう。
(そうしないと ImportError: cannot import name pywrap_tensorflow みたいなエラーが出ます。)
以下に私の環境での様子をそのまま示しておきます。
[root@ribbon tensorflow]# cd
[root@ribbon ~]# python
Python 2.7.11 (default, Aug 9 2016, 15:45:42)
[GCC 5.3.1 20160406 (Red Hat 5.3.1-6)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:105] Couldn't open CUDA library libcudnn.so. LD_LIBRARY_PATH:
I tensorflow/stream_executor/cuda/cuda_dnn.cc:3304] Unable to load cuDNN DSO
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcurand.so locally
>>>
あ、パスを通すのを忘れていました。.bash_profileに以下のように書いておきましょう。
export CUDA_HOME=/usr/local/cuda
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$CUDA_HOME/lib64"
export PATH="$CUDA_HOME/bin:$PATH"
これでOKなはずです。
[root@ribbon ~]# . .bash_profile
[root@ribbon ~]# python
Python 2.7.11 (default, Aug 9 2016, 15:45:42)
[GCC 5.3.1 20160406 (Red Hat 5.3.1-6)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcurand.so locally
>>>