LoginSignup
0
1

More than 3 years have passed since last update.

TensorFlow(GPU版) Installとお試しRNN 備忘録

Last updated at Posted at 2020-03-29

概要

GPU対応TensorFlow(以下TF)のインストール手順を備忘録として残す。
- 実施期間: 2020年2月
- 環境:Ubuntu18.04LTS
- Python2.7, 3.6.9インストール済み
- GPU: GeForce GTX 1070

背景

4年ほど昔、Ubuntuの使い方も見様見真似だったころに挑戦したのだが、うまくいかず諦めた経験があり今回再挑戦してみた。
今はGoogle ColaboratoryのVM環境で、CUDA環境整備に悩まされることなくTF+Kerasを使った深層学習モデルで遊んでいる。使い勝手はほぼJupyter notebookと同じ。

notebook.png
[Colaboratoryのnotebook]

ことモデリングについていえば自前PCのGPUを必ずしも使用する必要はない。
ただ、折角手元のデスクトップPCにはGPUが刺さっているので、これでモデルの教育させたいと思うのが人情(VMにはGPU無料使用時間に制限があるし)。
そこで安直にオフィシャルが下記に推奨するよう、TF Dockerイメージで横着して環境を作ろうかと考えた。

「GPU サポートを含む TensorFlow の Docker イメージ(Linux 用のみ)を使用することをおすすめします。その場合セットアップに必要なのは NVIDIA® GPU ドライバだけです。」

楽チンできそうだが手順を読むと直感的に鵜呑みにできない。
他の選択肢も調べているなかで、素晴らしすぎるサイトを見つけた。ここによると、TFオフィシャル通りにするとUbuntu18.04対応状況の遅れから、はまる可能性が高いらしい。
これに従い以下手順を残す。

Nvidia GPUドライバ更新

GPUドライバ396以降が必要らしい。
幸い430が入っていたので何もしなかったが、バージョンが古ければ下記の手順でUpdateする。

sudo apt purge nvidia*
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt install --no-install-recommends nvidia-driver-430
reboot
nvidia-smi  #reboot後、チェック

3行目の "nvidia-driver-430" は2020年2月時点の最新版が430だから。
最新版は下記のPPAで都度確認できる。
https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa

Anacondaのインストール

オフィシャルサイトから、最新インストール用shファイル(Anaconda3-2019.10-Linux-x86_64.sh)をダウンロードする。
Minicondaの時と同じようにDownloadsフォルダでbash実行しインストール

$ cd Downloads
$ bash Anaconda3-2019.10-Linux-x86_64.sh

下記の2行をbashrcに追記する。追記したらsource ~/.bashrcすればcondaをコマンドとして認識する。

export PATH=/home/imo/anaconda3/bin:$PATH
source /home/imo/anaconda3/etc/profile.d/conda.sh

AnacondaをUpdateする。

$ conda update conda
$ conda update anaconda
$ conda update --all

"conda update python"を実行すると、標準のPythonが3.9になるため行わないこと。
TensorflowはPython 3.9をサポートしていないため。

conda仮想環境にTFインストール

前述の会心下記サイトを参考にインストールする。

conda仮想環境(環境名はtf-gpu、表示名はTensorFlow-GPUとする)を作成する。

$ conda create --name tf-gpu
$ conda activate tf-gpu

conda仮想環境内でTFと関連ツールをインストールする。

(tf-gpu) conda install tensorflow-gpu
(tf-gpu) conda install ipykernel jupyter
(tf-gpu) python -m ipykernel install --user --name tf-gpu --display-name "TensorFlow-GPU"
(tf-gpu) python -c 'import tensorflow as tf; print(tf.__version__)' #チェック 2.1.0がインストールされた
(tf-gpu) conda install keras-gpu
(tf-gpu) conda install pandas
(tf-gpu) conda install scikit-learn
(tf-gpu) conda install pillow

Jupyter notebookの起動する。

(tf-gpu) jupyter notebook

Jupyter.png
[Jupyter notebook]

たったこれだけ。

GPU認識確認

TensorflowがGPUを認識しているか確認する。

$ conda activate tf-gpu
$ python
>>> import tensorflow as tf
>>> print(tf.__version__)
>>> gpu_num = len(tf.config.list_physical_devices('GPU'))
>>> print(gpu_num)

Jeff先生の教材を参考

RNNで動作確認

TFオフィシャルのチュートリアルのセルをコピペしRNNを実際に動作させてみた。
これはマックス・プランク研究所が提供する気象時系列データ(気温、湿度など14種類のデータ)でLSTM modelを学習させ、将来の気温を予測するチュートリアルである。
Part1が過去10分刻みの気温データで学習したモデルの予測で、Part2は気温、気圧、空気密度の3データで学習・予測させるもの。
Part2の方が予測精度が向上することが実体験できる。

参考までにPart1の結果だけ張り付ける。
チュートリアルの学習epoch数が10と控えめだったので、30まで伸ばしてみた。accuracyではなくlossで評価している。

loss.png

TrainingもValidationもlossはともに収束しており、過学習の兆候はともに見られない。
なぜValidationの方がTrainingよりもlossが小さくなっているかはわからないので勉強が必要。
epoch=28でtrainingのlossが0.0140と最小値になってる。本来ならcallbackを組み込んでそこで学習が終わるようにすべき。

epoch28.png

epoch=10の時のtraining loss=0.0228だったのでepoch=30の0.0169は明らかに改善しており、その結果が下図の予測結果に表れている。
赤Xが実際の温度で、緑○が予測気温。

predictions.png

ひと通り楽しんだらJupyter notebookが起動しているブラウザを閉じ、実行中のターミナルは[Ctrl]+[c]で終了させ、仮想環境を抜ける。

(tf-gpu) conda deactivate

おまけ1 ~ Dockerのインストール ~

Docker版のTFもうまくいっていたので手順を残す。
参考にしたのは、本編で怪しいといった下記サイトで、実はDockerでも問題なかった。
https://www.tensorflow.org/install/docker

sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
docker version  #チェック
sudo docker pull tensorflow/tensorflow:latest-gpu-jupyter
sudo docker image
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1