KerasをGPUで動かしたくなったので
(作成2020.10.13 / 更新2020.10.16)
Ubuntuにcudaを入れる
普段使っているのは仕事上はWindowsで個人的にはWindowsたまにmacだが、仕事のプロジェクト上でディープラーニングを使ってみたいと思い準備をしていたところ、オペレーション時間が結構かかるので、GPUを動かしてみたいなと思い立った。
AWSという手もあるが、とりあえず試してみるにあたりいきなりコストをかけて試すほど勝算があるわけでもないので、とりあえずNVIDAグラボを積んでるMyPCにcudaを入れて試してみることにした。
でも、WindowsにNVIDAツールをインストールするとメッセージが頻繁に出てきてうるさいことは経験済だったので、Ubuntuをデュアルブートにしてそこにcudaを入れることにした。
これは、そのときの苦労話を記したものである(笑
いやー、ネット検索で情報を集めるんだけども、古くて適切な現時点バージョンでなかったり、インストールしたい環境がイメージと違ったり、記述がハイレベルすぎて理解できなかったりでつらかったので、これから同じことを考えている人にとってこういうメモを残しておけば、あと半年くらいは役に立つのではないかと。あと、自分も忘れるので自分向けにも。
Ubuntu20.04にcudaをいれてtensorflowをgpuで動かすまでのインストールの手順
- pythonのインストール
常に時代を先取りしていきたいと意気込む(?)私はUbuntuは最新版の20.04をインストールした。そこにすでにpython3.8.5が入っていたので、現時点で最新版は3.9.0だけれども、このまま使うことにした。ただし、pythonを実行するときにはpython3と「3」をつけてあげる必要がある。tensorflowのインストールのときに、pip3を使うので次の文を実行して入れておこう。
$ sudo apt install python3-pip -y
最後に-yをつけておくと、途中でいちいち「y」と打つ必要がなくなる。
-
GPUドライバのインストール
ウィンドウズキーを押して「so」と入力すると、「ソフトウェアと...」というのが出てくるのでそれをクリックして起動する。タブに「追加ドライバー」というのがあるのでそこを選択して、「nvidia-driver-450から使用します」を選択して、変更の適用を押して、閉じる。
-
cudaのインストール
terminalから、次の文を実行。
$ sudo apt install nvidia-cuda-toolkit
$ nvcc --version
最新版のcudaは11.0だが、tensorflow-gpuは10.1までしか現時点で対応していない。aptでインストールすると都合よく10.1がインストールされるのでラッキー(ラッキーじゃなくてこういうものなのかもしれないがその辺の事情はよく知りません)。
- cuDNNのインストール
インストールというか、ただNVIDIAのホームページからダウンロードしてきたファイルにパスを通すだけなのだが、そういうふうに書いてあるところがないもんだから混乱した。cuDNNをダウンロードするには登録が必要なのだが、昔してあったので(パスワードを思い出しながら)ログインして入手。ただし、ここでも最新版はtensorflow-gpuが対応していないので、ver7.6.5 for cuda 10.1を入手した。tgzファイルなので、
$ tar -xzvf ファイル名
を使って解凍。そして出てきたファイルたちをそれっぽいところにコピー(PATHを通せばよいのでどこでもよいっぽい)。あと、権限も付ける。
$ sudo cp cuda/include/cudnn.h /usr/lib/cuda/include/
$ sudo cp cuda/lib64/libcudnn* /usr/lib/cuda/lib64/
$ sudo chmod a+r /usr/lib/cuda/include/cudnn.h /usr/lib/cuda/lib64/libcudnn*
- tensorflow gpu版 をインストール
少し前までは、tensorflow-gpuとしてインストールしなければならなかったが、公式ホームページを読んでみるとノーマルcpu版と統合されたっぽい。ので、次の文でインストールが完了。(もしすでに入っているのであれば、一旦アンインストールして入れ直す必要があるっぽい。)
pip3 install tensorflow
- 実行環境にパスを通す
実は、ここが一番大ハマリをした。出来上がって振り返ってみれば至極当たり前のことなんだが、ゴールが見えていないうちははっきり言って「これ無理ゲー」くらいの勢いで迷いまくった。例えばterminal(.bash)で実行するのであれば、
$ cd
$ nano .bashrc
とやって、次の文を文末にでも挿入する。
export LD_LIBRARY_PATH="/usr/lib/cuda/lib64:/usr/lib/cuda/include:$LD_LIBRARY_PATH"
そしてterminalで
$ .bashrc
とやって、パスを通しておけばよい。
私は(生意気にも)Pycharmを使っているので、Pycharmから実行するには、Run ConfigurationのEnvironment variablesに上記のパスを通しておけばよい。
- GPUでtensorflowが動くかtestする
import tensorflow as tf
print(tf.config.list_physical_devices('GPU'))
これを実行して、
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
と出てくればOK。ここで[ ]だと残念ながら失敗で、エラー文をよく読んで原因究明する。私の場合はPATHがちゃんと通ってなかった。(というか、Pycharmで実行するときにはterminalにではなくてPycharmに設定が必要ということを知らなかった。かしこさが1あがった。)
あ、kerasを入れてなかった。
pip3 install keras
とりあえず、ここまで。
Discussion