Deep Learning AMIをGPUインスタンスで使ってみた

こんにちは。hacknoteのr.katoです。

前々回は、そもそも環境構築ができず、
前回は、CPUインスタンスを使ってCNNによるmnistの分類をしました。

でもまあ、機械学習、CNNと言ったらGPUインスタンスでしょっ!

ということで、今回はGPUインスタンスでCNNによるmnistの分類をしていきます。

そもそもなぜGPU?

CNNというニューラルネットワークは畳み込みやpoolingといった行列計算をエゲツない数を同時にこなす必要のあるものです。 しかし、よくパソコンの頭脳と言われるCPUは行列計算が不得意です。 そこで、行列計算が得意で高速な学習と識別が可能なGPUが使われるようになりました。

やったこと

推奨環境(GPU)でDeep Learning AMI(DLAMI)を使ってkerasサンプルコードのmnistを実行する。

インスタンス情報

  • g3s.xlarge
  • Deep Learning AMI (Ubuntu 18.04) Version 26.0 ami-07729b5941107618c
  • Driver 418.87.01
  • CUDA 10.1
  • cuDNN 7.5.1
  • NVIDIA Tesla M60
  • python 3.6.5 anaconda
  • tensorflow 2.0.0
  • keras 2.3.0
  • ボリュームタイプ standard 100GB

実際に実行したサンプルコード

下記のkerasが提供しているサンプルコードに実行時間を出力するコードを加えました。
また、何も指定しないとプログラム実行時にtensorflowとkerasでGPUのメモリを最初に専有してしまい、速度低下が発生してしまうため、必要になったらGPUのメモリを使用するようにするコードを加えて実行しました。

ちなみに、CPUインスタンスの時と同じコードを実行したら、515secかかりました。

https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py

実際の様子

login

同じAMIを使っているので、sshでログインしたときの様子は前々回前回と完全に同じです。

Anacondaの仮想環境をactivateする

今回は前回と同じく、tensorflow2がバックエンドで動くkeras2の環境を使いたかったので、

source activate tensorflow2_p36 を実行しました。

一瞬でactivateされました。

CPUインスタンスの際はライブラリの入れ替えがあったため、3分ほど待つ必要がありましたが、今回は最初から入っているライブラリをそのまま使えるため、一瞬でactivateされたようです。

その時の出力は次のようになっていました。

ubuntu@ip-xxx-xx-xx-xxx:~$ source activate tensorflow2_p36
WARNING: First activation might take some time (1+ min).
Installing TensorFlow optimized for your Amazon EC2 instance......
Env where framework will be re-installed: tensorflow2_p36
Instance g3s.xlarge is identified as a GPU instance, removing tensorflow-serving-cpu
Installation complete.

サンプルコード mnist_cnn.pyの実行

コードをこちらのページからダウンロードしてきて冒頭で述べたように変更し、実行しました。

このサンプルコードはmnistデータベースという分類問題によく使われる手書き文字を、CNNという畳込み計算とpooling計算とニューラルネットワークを組み合わせたもので分類するものです。

実行結果を折りたたんで貼っておきます。

Gets to 99.25% test accuracy after 12 epochs とサンプルコードにあるとおり、だいたい同じ結果がでました。

また、実行時間は

Maschinerun time[sec]
iMac (21.5-inch, Late 2015)712.4355142116547
c4.large1102.43935227394
g3s.xlaege79.74062728881836

となっており、案の定、GPUインスタンスでの実行がダントツTopでした。

おわりに

前回、CPUインスタンスを使った際はインスタンス作成後に環境構築で少々待ち時間が発生していましたが、今回はほぼありませんでした。

GPUを使った機械学習は環境構築で時間がかかってしまったり、躓いたりと、機械学習をしてるんだか、GPUの設定をしているんだかわからなくなってくることが多かったのですが、DeepLearningAMIの登場でこの問題は解消されそうです。