tensorflow-gpu 1.13.1動作環境設定

プログラムを回すために普段つけっぱなしのパソコンの電源を落とさざるを得ない状況になってしまい、再起動後nvidia-smiコマンドが動作しなくなってしまった。

これを機に石器時代の環境を新しいものにとっかえてtensorflow-gpuの1.13.1が動作できるCUDA 10.0 cudnn 7.4環境に作り直すことにしたので、作業内容をメモ。ついでにUbuntuも16.04から18.04にします。

Ubuntu 16.04
GeForce GTX 1080 Ti

1. GPUが読み込まれているかチェック

pythonをインタラクティブモードにして下の2行を実行

>>>from tensorflow.python.client import device_lib
>>>device_lib.list_local_devices()

はじめにロードメッセージらしきものがでてくる

"Successfully"や"successful"でなく"Could not"のような記述の行があればおそらく問題アリ

その下に"device_type"がつらつらとでてくる

ここに"GPU"がなければ確実に問題アリ

2. CUDAとNVIDIA driverをremove

新しいものを入れる前にCUDAとNVIDIAに関するものはremoveしておく

まずはどんなものがすでに入っているかを確認するコマンド

dpkg -l|grep nvidia
dpkg -l|grep cuda

でてきたものは下コマンドなどでremoveする

sudo apt --purge remove nvidia-*
sudo apt --purge remove cuda-*
sudo apt automove

"dpkg -l | grep nvidia or cuda"で出てきたものがきれいさっぱりになるように正規表現をいろいろ変えたりして数回removeする

3. Ubuntuをアップデート

コマンド1つでやってくれる

do-release-upgrade

アップデート中 "設定ファイルが作成されています (中略) どうしますか?" という選択が表示されたが、よくわからずとりあえずデフォルトの「自分のバージョンを残す」を選択、現状問題は特になし

4. CUDA(cuda toolkit)のダウンロード・インストール

Ubuntuが生まれ変わったら次はいよいよ必須アイテムのCUDAを入れる

tensorflow-gpuの1.13.1に対応しているCUDAのバージョンをtensorflowのサイトで確認する

画像2

tensorflow_gpu-1.13.1にはCUDA10.0を入れる必要があるらしい

対象のバージョンがわかったらNVIDIAのCUDA Archiveサイトからダウンロード

CUDA Toolkit 10.0をクリック

画像1

インストールするパソコンの環境を選択

今回は linux > x86_64 > Ubuntu > 18.04

画像3

一番下のInstaller Typeは今回 "deb(local)" を選択

選択すると下に必要なファイルのダウンロードとインストール方法が表示される

画像4

ダウンロードした後はインストール方法に従ってコマンドを打つ

(1)

sudo dpkg -i cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb

(2)

sudo apt-key add /var/cuda-repo-<version>/7fa2af80.pub

<version>はdpkgした(1)の名前、lsで確認するのが一番手っ取り早い

今回の場合はこんな感じになる

ls /var/ |grep cuda
cuda-repo-10-0-local-10.0.130-410.48
sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pub

(3)

sudo apt-get update

(4)

sudo apt-get install cuda

インストールが終わったら必要かはわからないが取り合えずreboot

sudo reboot

P.S.

運がよければこの手順で成功しますが実際はkernelやその他の必要条件があるため公式のDocumentationに従ってしっかりやりましょう

ArchiveサイトのCUDA Toolkit <version>の右側にOnline Documentationと書かれたリンクがあります。下は10.0のDocumentation

左側メニューにインストール方法が載っています 「 install guide ~ 」

5. cudnnのダウンロード・インストール

1. の2行コマンドを打ち "libcudnn" が含まれるエラーの類のメッセージが表示されたらそれはcudnnが入っていない(or パスが通っていない)のでインストールをする

まず 4. の表を再度眺め、tensorflow-1.13.1に対応するcudnnのバージョンが7.4であることを確認

次にNVIDIAサイトのcudnnページからダウンロードする

https://developer.nvidia.com/cudnn​

画像5

ダウンロードにはNVIDIAのアカウントが必要なので指定事項を入力して作る

ログインしてcuDNN Downloadページへ遷移後、"I Agree ~"にチェックを入れ下部の"Archive cuDNN Releases"をクリック

CUDA10.0用のcuDNN7.4を選択(今回は7.4.2)

画像6

すろとメニューが開く

インストール方法にはtarファイルを使うものと3つのDebianファイルを使うものがあり今回は後者を利用

画像7

ダウンロードが終わったら以下のコマンドを(1)→(3)の順で実行

(1)sudo dpkg -i /home/nakashima/cudnn/libcudnn7_7.4.2.24-1+cuda10.0_amd64.deb
(2)sudo dpkg -i /home/nakashima/cudnn/libcudnn7-dev_7.4.2.24-1+cuda10.0_amd64.deb
(3)sudo dpkg -i /home/nakashima/cudnn/libcudnn7-doc_7.4.2.24-1+cuda10.0_amd64.deb

終わったらとりあえず sudo reboot

最後にしっかり.bashrcにCUDAとcudnnのパス(?)を通す

export PATH=/usr/local/cuda-10.0/bin$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64$LD_LIBRARY_PATH
source .bashrc

P.S.

運が良ければこの手順でうまくいきますが、公式のdocumentationで自分の環境に合わせてしっかりすすめるのが望ましいです


6. 最終確認

例の2行で確認

from tensorflow.python.client import device_lib
device_lib.list_local_devices()

"device_type"に"GPU"と出れば認識されています、成功です

7.あとがき

こんな記事を書いておいた上で何度も言いますが、公式のDocumentationを使って進めるべきだと思います

こういうものはすごく特定の条件・状況の上でしか上手くいきません

ググってきたキータ通りにやって「なんか失敗した!」「Ubuntuのバージョン違った!」「Macだった!」なんてことになったら結局二度手間になりますから、基本的に公式が一番信用のおけるものというのが私の考えです

もっと余談だと公式以外なら日本語以外のものが個人的にはいいと思います。基本的な操作等ならキータにまとめてあるやつで十分ですが、プログラムのErrorの解消やNVIDIA driverのとき日本語のサイトのが決定的になった記憶がありません。

コマンドやプログラムは全世界共通なので雰囲気は伝わってきますし、中国語やフランス語なんてまったくわかりませんがそういった言語のサイトが解決の糸口になったりします。

8. autoinstallの謎(?)

今回はCUDAをインストールするときNVIDIAの410辺りのドライバーをセットで導入してくれたので特に記述しませんでしたが、NVIDIA driverも必須アイテムです

はじめのうちは「最初にNVIDIA driverを入れてからCUDAとcudnnをインストールする」という手順での構築を試みていたのですが、driverを導入する手段としてautoinstallを用いていたためにいろいろ迷走してしまいました。その迷走を繰り返さないためにもここに残しておきます。

autoinstallでの導入は以下の1コマンドでおしまい、とても簡単です

sudo ubuntu-drivers atoinstall

install終了後にrebootして、nvidia-smiを打つと430辺りのdriverに加えてCUDAの10.2が入っていることが伺える表示がでてきます

CUDAもいれてくれている?しかし10.2ではtensorflow_gpu.1.13.1が動きません

例の2行を打っても " ~.so.10.0 " がないというメッセージが表示されてしまい、locateを使っても何も出てこないのでCUDAがPCに入っているわけでもなさそう?

locate libcublas.so.10.0

そこでnvidia-cuda-toolkitでインストールをしますが、このコマンドだと9. のいくつかがはいってしまうみたいです

sudo apt install nvidia-cuda-toolkit
sudo reboot

よくわからなくなってきたので、CUDAからインストールする方向に舵を切ったところなぜかNVIDIA driverも入ってきてめでたしとなりました。

ライブラリを使って簡単に深層学習のプログラムを回せるのがNvidia driver、CUDA、cudnn、3つのバージョンを気にする必要があるので大変ですね。

この記事が気に入ったらサポートをしてみませんか?