概要
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と同じ。
ことモデリングについていえば自前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
たったこれだけ。
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で評価している。
TrainingもValidationもlossはともに収束しており、過学習の兆候はともに見られない。
なぜValidationの方がTrainingよりもlossが小さくなっているかはわからないので勉強が必要。
epoch=28でtrainingのlossが0.0140と最小値になってる。本来ならcallbackを組み込んでそこで学習が終わるようにすべき。
epoch=10の時のtraining loss=0.0228だったのでepoch=30の0.0169は明らかに改善しており、その結果が下図の予測結果に表れている。
赤Xが実際の温度で、緑○が予測気温。
ひと通り楽しんだら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