Ubuntu 16.04にTensorFlow GPU付をインストールする手順
ちょっとしたお遊びは別として真面目にTensorFlowなどの機械学習フレームワークを利用するとなるとGPUの支援は不可欠ですね。
TensorFlowの最新版は1.7ですが、GPUを入れるとコアダンプして動かないパターンが多いのでここでは1.5を入れます。
基本的な入れ方は https://www.tensorflow.org/install/ に従ったものです。このリンク先では自動的に最新版を入れるやり方が記載されていますが、基本は共通です。まずは1.7、1.6を入れてみてコアダンプしてしまうようなら1.5を入れるやり方で構いません。
またCUDA® Toolkitの最新版は9.1ですが上記リンクでは9.0を指定しているのでここでも9.0をインストールしています。(トラブル発生時に問題点の切り分けが難しくなるので「プロ」の皆さんは推奨のものを入れておく方がいいでしょう。)
最初に確認すべき事
1 グラボの種類
NVIDIAのものでなくてはいけません。GTX~という名称のものがほとんどです。まずは確認してみましょう。
System SettingsのSystemでDetailsアイコンをクリックすればどんなボードが入っているかわかります。
2 グラボの能力(Compute Capability)
https://developer.nvidia.com/cuda-gpus
で確認できます。3.0以上必要ですが3.0ギリギリだとソースからビルドする必要があります。用意されたバイナリを使うには3.5以上が必要です。
3.0の例として以下のようなものがあります。
まずはデスクトップ
GeForce GTX 770 3.0
GeForce GTX 760 3.0
GeForce GTX 690 3.0
GeForce GTX 680 3.0
GeForce GTX 670 3.0
GeForce GTX 660 Ti 3.0
GeForce GTX 660 3.0
GeForce GTX 650 Ti BOOST 3.0
GeForce GTX 650 Ti 3.0
GeForce GTX 650 3.0
次はモバイル
GeForce GTX 780M 3.0
GeForce GTX 770M 3.0
GeForce GTX 765M 3.0
GeForce GTX 760M 3.0
GeForce GTX 680MX 3.0
GeForce GTX 680M 3.0
GeForce GTX 675MX 3.0
GeForce GTX 670MX 3.0
概ね2世代前のものが中心ですね。GTX 1050Tiなど2万円前後ですが6.1です。必ずしもグラボの「描画性能」と対応する訳ではなく、新しい命令を実行できるか等が基準となっているようです。詳細は次のリンク
https://en.wikipedia.org/wiki/CUDA#GPUs_supported
を参照して下さい。
ソースからビルドするのも手ですが、それで上手くいくとも限らないのでこの際、グラボを更新する方が早いのではないでしょうか?
3 Pythonの種類(2.xか3.xか)
他のフレームワークとの兼ね合いや好みの問題かも知れませんが、まずは3.6でやってみます。
手順
大まかな流れは次のようになります。
1 CUDA® Toolkit 9.0のインストール
2 GPUドライバの更新
3 cuDNN v7.0のインストール
4 TensorFlowのインストール
ここで注意して頂きたいのはToolkitなどのバージョンです。これらすべてが整合していないと失敗します。
今回の場合
CUDA® Toolkit = 9.0
GPUドライバ = 390.25 or 390.48
cuDNN = 7.0
TensorFlow = 1.5
のようになります。
また使用したグラボはGTX 1050Tiと1060ですので
Compute Capability = 6.1
のようになります。
そして1から3までの手順はGPUサポートを入れるための手順で4がTensorFlowを入れるための手順である事に注意して下さい。
つまりどのPythonのバージョンを使うかなどPythonの動作環境は4で決まります。また構築したGPU環境は他のDeep Learningフレームワークでもそのまま利用できます。
手順1:CUDA® Toolkit 9.0のインストールーの詳細
まずアクセス前に開発者登録を済ませて下さい。
普通にDownloadへアクセスしますと最新版(記述時には9.1)に誘導されますのでご注意下さい。
9.0へのリンクは https://developer.nvidia.com/cuda-90-download-archive になります。
Ubuntu 16.04の場合、添付キャプチャ画像のような構成でやります。
上記ページの指示に従ってインストールしていきます。
ダウンロードしたcuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.debのあるディレクトリに移動して
sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb
sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda
を実行します。ここで2番めにあるversionは今の場合9-0-localです。本稿作成時には2つのアップデートがありました。それらも併せてダウンロード、実行します。
最後にインストール後の環境変数設定をします。
bashの環境設定ファイル.profileに
export CUDA_HOME=/usr/local/cuda-9.0
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:{LD_LIBRARY_PATH}
を追加します。そして
source ~/.profile
手順2:GPUドライバの更新ーの詳細
公式ページ
http://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html
によると
NVIDIA graphics driver R384 or newer for CUDA 9
NVIDIA graphics driver R390 or newer for CUDA 9.1
とあるので必要になるドライバはR384以降です。
現在入っているものの確認にはSystem SettingsからSoftware & Updatesを選択、Additional Driversタブを押すと現在入っているドライバと選択されているものがわかります。古ければ次の手順で更新します。
一番簡単なインストール方法はapt方式でしょう。
- 最新版の確認
https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa
を調べると最新のものは390.25とあります。 -
古いNVIDIAのドライバを削除
sudo apt-get purge nvidia* -
PPAの導入とupdate
sudo add-apt-repository ppa:graphics-drivers
sudo apt-get update - 1.で調べたドライバのインストール
sudo apt-get install nvidia-390 - nvidia-smiで動作確認
nvidia-smi
これを実行してエラーらしき物が出なければOK.要件は満たされているはずなのにエラーが出る場合は再起動して再確認してください。
手順3:cuDNN v7.0のインストールーの詳細
http://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html
に記載されているやり方に従ってインストールします。
ここでも事前に開発者登録が必要です。ダウンロードボタンをクリックすると複数のオプションが選べます。
特に理由がなければ最新版でなおかつCUDA 9に適合した物を選びます。今はTensorFlowに適合するv7.0を入れます。
ダウンロード対象はランタイムライブラリ、デベロッパーライブラリ、サンプルコードとユーザーガイドの3つです。
ダウンロードしたディレクトリに移動して例えば以下のようにインストールします。
sudo dpkg -i libcudnn7_7.0.5.15-1+cuda9.0_amd64.deb
sudo dpkg -i libcudnn7-dev_7.0.5.15-1+cuda9.0_amd64.deb
sudo dpkg -i libcudnn7-doc_7.0.5.15-1+cuda9.0_amd64.deb
確認方法は上記ページに記載がありますが日本語で書きますと
- サンプルソースコードを書き込み権限のある場所にコピーする
$cp -r /usr/src/cudnn_samples_v7/ $HOME - コピーしたディレクトリへ移動する。
$ cd $HOME/cudnn_samples_v7/mnistCUDNN - mnistCUDNNサンプルをコンパイルする。
$make clean && make - mnistCUDNNサンプルを実行する。
$ ./mnistCUDNN - cuDNNが正しくインストールされて正常動作していれば次のような表示が出てくる:
Test passed!
手順4:TensorFlowのインストールーの詳細
やり方には何通りかありますが、ここではTensorFlow元サイトで推奨しているVirtualenvを用いたやり方を記載します。
https://www.tensorflow.org/install/install_linux
に従ってやります。
- pipとVirtualenvのインストール
$ sudo apt-get install python-pip python-dev python-virtualenv # for Python 2.7
$ sudo apt-get install python3-pip python3-dev python-virtualenv # for Python 3.n - Virtualenvの作成
$ virtualenv –system-site-packages tensorflow # for Python 2.7
$ virtualenv –system-site-packages -p python3.n tensorflow # for Python 3.n
これをhomeディレクトリで実行すると~/tensorflowにPython環境が作成されます。 -
Virtualenvのアクティベート
$ source ~/tensorflow/bin/activate # bash, sh, ksh, or zsh
$ source ~/tensorflow/bin/activate.csh # csh or tcsh
targetDirectoryにtensorflowを設定するとアクティベート後には
(tensorflow)$
のような表示に変わります。この状態でpipのバージョンが8.1以上であることを確認してください。(pip -V or pip3 -V)
古ければ
(tensorflow)$ easy_install -U pip
でアップグレードしてください。
(tensorflow)$ pip install –upgrade tensorflow # for Python 2.7
(tensorflow)$ pip3 install –upgrade tensorflow # for Python 3.n
(tensorflow)$ pip install –upgrade tensorflow-gpu # for Python 2.7 and GPU
(tensorflow)$ pip3 install –upgrade tensorflow-gpu # for Python 3.n and GPU
このまま実行すると最新版がインストールされます。GPU入の場合、最新版だとうまく行かないことが多いようです。(import tensorflow as tfでcore dumpします。)
うまく行かなかった環境は削除rm -rで削除して新たなVirtualenvを作成します。
そして
(tensorflow)$ pip3 install –upgrade tensorflow-gpu==1.5
のようにしてバージョン指定でインストールします。うちの環境では1.6, 1.7ではダメでした。
うまく行けば
(tensorflow)$ python
でPythonを起動後、
import tensorflow as tf
hello = tf.constant(‘Hello, TensorFlow!’)
sess = tf.Session()
print(sess.run(hello))
を実行すると
(中略)
tensorflow/core/common_runtime/gpu/gpu_device.cc:1195] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce GTX 1060 6GB, pci bus id: 0000:05:00.0, compute capability: 6.1)
b’Hello, TensorFlow!’
のように表示されGPU版のTensorFlowが動いていることがわかります。
Virtualenv以前のCUDA周りのインストールについては他のフレームワークにも使えます。