まんぼう日記

takataka's diary

GPGPUマシンの更新(4) TensorFlow を使えるようにする

GPGPU用のマシンを手に入れました - まんぼう日記 のマシンで TensorFlow を動かせるようにしました.その結果,こういう環境になりました.

  • Ubuntu 16.04 LTS
  • CUDA 8.0 & cuDNN v5.1
  • TensorFlow 1.2 TensorFlow 1.3

というわけで,作業メモです.

 

 

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” というエラーを吐いて止まってしまうようです.調べてみたら,

Python's requests "Missing dependencies for SOCKS support" when using SOCKS5 from Terminal - Stack Overflow

という記事がありました.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'

やれやれ (^^)