GPGPU用のマシンを手に入れました - まんぼう日記 のマシンで TensorFlow を動かせるようにしました.その結果,こういう環境になりました.
- Ubuntu 16.04 LTS
- CUDA 8.0 & cuDNN v5.1
- TensorFlow 1.2 TensorFlow 1.3
というわけで,作業メモです.
- Ubuntu 16.04 LTS の再インストール
- CUDA 8 と cuDNN v5.1 のインストール
- TensorFlow 1.2 のインストール
- (2017-08-17追記)TensorFlow 1.3 & cuDNN v6 へのアップグレード
Ubuntu 16.04 LTS の再インストール
この辺,実は3ヶ月以上前に作業したものの,ちゃんと記録残さんと放置してました.以下の記述は怪しいとこが多いかもです.
17.04 LTS を入れようとして(なぜかは忘れた (^^;),うまくいかなかった(なぜかは忘れた (^^;)ので,16.04 LTS を再インストール.最初に 16.04 を入れた時のメモが GPGPUマシンの更新(3) 〜 Theano と Caffe のインストール - まんぼう日記 にあります.
まずは,Mac で ISO イメージを焼いた DVD メディアを作成.USBフラッシュメモリ経由でもやろうとしたけど,いろいろあって(忘れた)結局 DVD で.ちなみに,最近の Mac OS / macOS で ISO イメージを DVD-R に焼くには,Finder で ISO ファイルを右クリックして「ディスクを作成」です(とメモってあった...もっと大事なことメモっとけよ).
インストール DVD をマシンに入れて起動,ブートの際は,BIOS から UEFI じゃない方の DVD-RAM ドライブを選択してブートしました(とメモってあったが,そうしないとどうなるのかは覚えてない...).
無事インストールが終わって再起動したら,ネットワーク周りの設定.このマシンは大学のファイアウォール内にあるので,プロキシ設定が必要.「システム設定」=>「ネットワーク」=>「ネットワークプロキシ」.うちの環境では,apt update等がちゃんと動くようにするためには Socks の設定も必要でした.
ネットワークの設定ができたので,ソフトウェアをアップデートしていくつか追加でインストール.
$ sudo apt update $ sudo apt upgrade $ sudo apt install openssh-server $ sudo apt install emacs
その後は,こまごまあれこれ.詳細は以下のリンク先(「おまけ」のセクション)参照: GPGPUマシンの更新(1) 〜 Ubuntu 16.04 をインストールして NVIDIA ドライバを入れる 〜 - まんぼう日記
CUDA 8 と cuDNN v5.1 のインストール
CUDA 8
インストールと設定
CUDA Toolkit | NVIDIA Developer から
Linux x86_64 Ubuntu 16.04 deb (local)
を選択して,cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb をダウンロード.
Installation Instructions:
`sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb`
`sudo apt-get update`
`sudo apt-get install cuda`
と言われたとおりに作業.インストール場所は
/usr/local/cuda -> cuda-8.0
となってました.また,依存関係で NVIDIA のドライバ nvidia-375 もインストールされました.
後は,環境変数の設定です.~/.bashrcに次のように書いときました.
export CUDA_HOME=/usr/local/cuda export PATH=${CUDA_HOME}/bin:$PATH export LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${LD_LIBRARY_PATH}
Patch のインストールと CUDA の動作確認
上記は3ヶ月前の作業だったので,すでに新しいバージョン出てるかも…と CUDA Toolkit のページ行ってみましたが,まだでした(9の Release Candidate は出てましたが ).しかし,
Patch 2 (Released Jun 26, 2017)
というのが出てたので,ダウンロードしてインストールしときました.
$ sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-cublas-performance-update_8.0.61-1_amd64.deb $ sudo apt-get update $ sudo apt-get upgrade cuda
ついでに,CUDA の動作確認もしときました.
$ cp -r /usr/local/cuda/samples ~/cuda_samples $ cd ~/cuda_samples/1_Utilities/deviceQuery $ make $ cd ../../bin/x86_64/linux/release $ ./deviceQuery
make は問題なく通り,deviceQuery の実行結果はこんなんなりました.
$ ./deviceQuery ./deviceQuery Starting... Detected 3 CUDA Capable device(s) Device 0: "GeForce GTX 1080" : Device 1: "Tesla K20c" : Device 2: "Quadro K620" : deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 8.0, NumDevs = 3, Device0 = GeForce GTX 1080, Device1 = Tesla K20c, Device2 = Quadro K620 Result = PASS
cuDNN v5.1
CUDA の次は cuDNN です.https://developer.nvidia.com/rdp/cudnn-download に行ったら
Download cuDNN v7.0 (August 3, 2017), for CUDA 8.0
っちうのがあったのでまずはこっちをインストールしたんですが,後で TensorFlow 動かしたら, libcudnn.so.5 が見つからんとエラーを出しました.どうやら TensorFlow 1.2 は cuDNN v5 に依存してるみたい.そういうわけで,
Download cuDNN v5.1 (Jan 20, 2017), for CUDA 8.0
の方をインストールし直しました.``cuDNN v5.1 Library for Linux'' から cudnn-8.0-linux-x64-v5.1.tgz をダウンロードして展開,中身を CUDA_HOME 以下の適切な場所に置きます.たかたかの場合はこうなりました.
$ ls -l $CUDA_HOME/include/cudnn.h -rw-r--r-- 1 root root 99658 8月 16 14:47 /usr/local/cuda/include/cudnn.h $ ls -l $CUDA_HOME/lib64/libcudnn* lrwxrwxrwx 1 root root 13 8月 16 14:49 /usr/local/cuda/lib64/libcudnn.so -> libcudnn.so.5 lrwxrwxrwx 1 root root 18 8月 16 14:49 /usr/local/cuda/lib64/libcudnn.so.5 -> libcudnn.so.5.1.10 -rwxr-xr-x 1 root root 84163560 8月 16 14:48 /usr/local/cuda/lib64/libcudnn.so.5.1.10 -rw-r--r-- 1 root root 70364814 8月 16 16:02 /usr/local/cuda/lib64/libcudnn_static.a
TensorFlow 1.2 のインストール
さて, TensorFlow 1.2 のインストールです.
https://www.tensorflow.org/install/install_linux にしたがい,virtualenv を使って``TensorFlow with GPU support'' を入れることにします.
まずは libcupti-dev のインストール.
$ sudo apt-get install libcupti-dev
次は virtualenv のインストールと仮想環境の作成.仮想環境に関係するファイルの置き場所は ~/tf とすることにしました.
$ sudo apt-get install python3-pip python3-dev python-virtualenv $ virtualenv --system-site-packages -p python3 ~/tf
仮想環境に入って TensorFlow をインストールします.
$ source ~/tf/bin/activate (tf) $ pip3 install --upgrade tensorflow-gpu
必要に応じて,NumPy 等もインストールされます.TensorFlow 1.2 のインストールはこんだけでok.ただし,後で使うのでついでに OpenCV も入れときました.
(tf) $ pip3 install opencv-python
って,仮想環境の方じゃなくて全体の方に入れたらよかったか.
ここでちょっと余談.ネットワークプロキシを使う環境の場合,条件によっては pip によるインストールが “Missing dependencies for SOCKS support” というエラーを吐いて止まってしまうようです.調べてみたら,
という記事がありました.all_proxy という環境変数が Socks サーバを指してるのを修正して,HTTP のプロキシサーバを指すようにすればよいそうな.たかたかの環境では実際に all_proxy が socks://... のようになってたので,
$ export all_proxy="http://..."
としてインストールやり直してみたら,ほんまにちゃんといけました.
で,さらに余談ですが,この all_proxy という環境変数(あともうひとつ,no_proxyってのも?)は GNOME デスクトップ環境でログインした時のみセットされるみたい( proxy - What is the all_proxy environment variable used for? - Ask Ubuntu )で,リモートから ssh でログインしたりするとありません.おかげで問題を再現して同定するのに苦労しました.
ともあれ,これで TensorFlow で GPU 使う準備が整いました.とりあえず CNN で colorization - まんぼう日記 のプログラムにちょこっと手を入れて実行してみたら,あっさり激速.どの GPU 使うか指定する方法とか,もう少し調べてからいずれまた.
(2017-08-17追記)TensorFlow 1.3 & cuDNN v6 へのアップグレード
上記の記事を書いた翌日に https://www.tensorflow.org/ を見たら,TensorFlow 1.3 が出てました.あいかわらずタイミング悪いやつです…(^^; ちうわけで,早速アップグレードしました.
cuDNN v6 のインストール
1.3 は cuDNN v6 対応ということで,まずは cuDNN を v6 に. https://developer.nvidia.com/rdp/cudnn-download の
Download cuDNN v6.0 (April 27, 2017), for CUDA 8.0
をクリックして,``cuDNN v6.0 Library for Linux'' から cudnn-8.0-linux-x64-v6.0.tgz をダウンロードして展開,中身を CUDA_HOME 以下の適切な場所に置きます.たかたかの場合はこうなりました.一応 v5.1 のも残してあります.
$ ls -l $CUDA_HOME/include/cudnn.h -rw-r--r-- 1 root root 98782 8月 17 16:44 /usr/local/cuda/include/cudnn.h $ ls -l $CUDA_HOME/lib64/libcudnn* lrwxrwxrwx 1 root root 13 8月 17 16:46 /usr/local/cuda/lib64/libcudnn.so -> libcudnn.so.6 lrwxrwxrwx 1 root root 18 8月 16 14:49 /usr/local/cuda/lib64/libcudnn.so.5 -> libcudnn.so.5.1.10 -rwxr-xr-x 1 root root 84163560 8月 16 14:48 /usr/local/cuda/lib64/libcudnn.so.5.1.10 lrwxrwxrwx 1 root root 18 8月 17 16:45 /usr/local/cuda/lib64/libcudnn.so.6 -> libcudnn.so.6.0.21 -rwxr-xr-x 1 root root 154322864 8月 17 16:45 /usr/local/cuda/lib64/libcudnn.so.6.0.21 -rw-r--r-- 1 root root 143843808 8月 17 16:46 /usr/local/cuda/lib64/libcudnn_static.a
TensorFlow 1.3 へのアップグレード
こちらは
$ pip3 install --upgrade tensorflow-gpu
するだけ.念のためバージョンを確認.
(tf) $ python Python 3.5.2 (default, Nov 17 2016, 17:05:23) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import tensorflow as tf >>> tf.__version__ '1.3.0'
やれやれ (^^)