少し前、GPUでTensorflow動かしたくて、Ubuntu 16.04に環境整えてたらドライバ入れるときに困ってたりしてたので簡単なメモとしてまとめ
インストールの流れとして、Nvidiaドライバ -> CUDA -> Tensorflow の順番
Nvidiaドライバを入れる
Ubuntuは"システム設定 > ソフトウェアとアップデート"の追加のドライバからNvidiaドライバを入れてみる。(今回はnvidia-367)
ここで再起動したら、ログイン画面まで到達できなくなった。
到達できない状態からCtrl+Alt+F1を入力するとコンソールでログインして操作できたので、Nvidiaドライバを削除。
$ sudo apt-get purge nvidia-*
そしたらGUIのログイン画面が立ち上がった。
どうやら、標準で使われているNouveauを無効にしないといけないらしいので、/etc/modprobe.d/blacklist-nouveau.confに以下の内容を追加。
blacklist nouveau options nouveau modeset=0
この状態で再起動すると、代わりのドライバとしてxserver-xorg-video-nouveauが使われていた。
あとはGUIのドライバ一覧からインストール。再起動しても正常にログインできた。
コマンド上でnvidia-smiが動くことで動作確認した。
$ nvidia-smi Fri Oct 28 00:34:06 2016 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 367.44 Driver Version: 367.44 | |-------------------------------+----------------------+----------------------+ ...
CUDAを入れる
CUDA ToolkitとcuDNNを入れる。今回入ったCUDAのバージョンは7.5
まず、CUDA Toolkitは以下でインストールした
$ sudo apt-get install nvidia-cuda-toolkit
この時入ったバージョンが4007だったので、それに対応したcuDNNを以下から持ってくる。バージョンが違うと、TensorflowをGPUで動かす時にエラーになる。
(4007に対応するファイルは"cudnn-7.0-linux-x64-v4.0-prod.tgz")
developer.nvidia.com
持ってきたcuDNNを以下で入れる。
$ tar xzf cudnn-7.0-linux-x64-v4.0-prod.tgz $ sudo cp -a cuda/lib64/* /usr/local/lib/ $ sudo cp -a cuda/include/* /usr/local/include/ $ sudo ldconfig
Tensorflowを入れる
公式の方に導入が書いてあるので、これに合わせて入れるとうまくいった。
https://www.tensorflow.org/versions/r0.9/get_started/os_setup.html
pipはすでに入れてあり、Pythonのバージョンは2.7
ここで入れたTensorflowは0.9.0
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl $ sudo pip install --upgrade $TF_BINARY_URL
これでPythonでtensorflowが使えるようになった。
$ python Python 2.7.12 (default, Sep 21 2016, 02:48:31) [GCC 5.3.1 20160413] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import tensorflow I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcublas.so locally I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcudnn.so locally I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcufft.so locally I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcuda.so locally I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcurand.so locally >>>