AWS
DeepLearning
深層学習
CNN
TensorFlow

学習時間評価 その2 [TensorFlowでDeep Learning 13]

(目次はこちら)

はじめに

以前の記事で、

  • c4.2xlarge
  • g2.2xlarge
  • g2.8xlarge

の3つのインスタンスタイプで、cifar10の学習時間の評価を行った。

今回、AWSのEC2でp2インスタンスが利用可能になったので、また同じように学習時間の評価を。

P2インスタンス?

Name GPUs vCPUs RAM (GiB) Price/Hour
p2.xlarge 1 4 61 $0.900
p2.8xlarge 8 32 488 $7.200
p2.16xlarge 16 64 732 $14.400

GPUは、NVIDIA Tesla K80!!
個人で所有するには敷居が高いスペック。

評価環境

インスタンスタイプ

いろいろ環境構築とか面倒なので、g2.2xlargeとp2.xlargeで。

学習対象

LeNet-5-like convolutional MNIST model

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/models/image/mnist/convolutional.py

Inception v3 model on Imagenet

https://github.com/tensorflow/models/blob/master/inception/inception/inception_train.py

こちらは、
tensorflow/models/inceptionにあるように、

NOTE Before doing anything, we first need to build TensorFlow from source, and installed as a PIP package. Please follow the instructions at Installing From Source.

なので、ビルドが必要。
さらに、ImagenetのデータのダウンロードとTFRecord formatへの変換が必要で、それだけで丸一日かかる・・・

学習時間計測

LeNet-5-like convolutional MNIST model

g2.2xlarge

GRID K520がCompute Capability 3.0であることを失念していました。この結果はCPUになります。。

Step 0 (epoch 0.00), 10.6 ms
Minibatch loss: 8.334, learning rate: 0.010000
Minibatch error: 85.9%
Validation error: 84.6%
Step 100 (epoch 0.12), 119.7 ms
Minibatch loss: 3.250, learning rate: 0.010000
Minibatch error: 6.2%
Validation error: 7.6%
Step 200 (epoch 0.23), 117.6 ms
Minibatch loss: 3.377, learning rate: 0.010000
Minibatch error: 12.5%
Validation error: 4.2%
...
Step 8500 (epoch 9.89), 119.8 ms
Minibatch loss: 1.618, learning rate: 0.006302
Minibatch error: 0.0%
Validation error: 0.8%
Test error: 0.8%

p2.xlarge

Step 0 (epoch 0.00), 44.4 ms
Minibatch loss: 8.334, learning rate: 0.010000
Minibatch error: 85.9%
Validation error: 84.6%
Step 100 (epoch 0.12), 11.8 ms
Minibatch loss: 3.259, learning rate: 0.010000
Minibatch error: 6.2%
Validation error: 7.4%
Step 200 (epoch 0.23), 10.9 ms
Minibatch loss: 3.362, learning rate: 0.010000
Minibatch error: 9.4%
Validation error: 4.4%
...
Step 8500 (epoch 9.89), 10.9 ms
Minibatch loss: 1.612, learning rate: 0.006302
Minibatch error: 1.6%
Validation error: 0.9%
Test error: 0.7%

評価

いうまでもないが、p2.xlargeはg2.2xlargeの10倍速い。
g2インスタンスでリザーブドインスタンス買った人も多いだろうに。たぶん、粋なはからいでp2インスタンスに乗り換えるんでしょうけど。

こんなに差が出るなら、Inception v3 modelのほうは評価不要に思えるが、モデルやデータの質が全然異なるので、さらに差が広がると容易に想像できるので、やる。

Inception v3 model on Imagenet

g2.2xlarge

GRID K520がCompute Capability 3.0であることを失念していました。この結果はCPUになります。。

2016-11-27 11:17:37.914060: step 0, loss = 13.05 (0.7 examples/sec; 45.648 sec/batch)
2016-11-27 11:22:09.663319: step 10, loss = 13.99 (1.5 examples/sec; 21.561 sec/batch)
2016-11-27 11:25:43.922104: step 20, loss = 14.60 (1.5 examples/sec; 21.275 sec/batch)
2016-11-27 11:29:19.665863: step 30, loss = 14.95 (1.5 examples/sec; 21.557 sec/batch)
2016-11-27 11:33:00.637729: step 40, loss = 14.24 (1.4 examples/sec; 22.077 sec/batch)
2016-11-27 11:36:42.248699: step 50, loss = 14.00 (1.5 examples/sec; 21.922 sec/batch)
2016-11-27 11:40:25.607910: step 60, loss = 13.31 (1.4 examples/sec; 22.319 sec/batch)
2016-11-27 11:44:07.525535: step 70, loss = 13.11 (1.5 examples/sec; 21.972 sec/batch)
2016-11-27 11:47:48.913615: step 80, loss = 13.21 (1.4 examples/sec; 22.079 sec/batch)
2016-11-27 11:51:29.875606: step 90, loss = 13.14 (1.5 examples/sec; 21.937 sec/batch)
2016-11-27 11:55:08.308093: step 100, loss = 13.13 (1.5 examples/sec; 21.951 sec/batch)
...

p2.xlarge

2016-11-27 11:03:30.950642: step 0, loss = 13.07 (0.7 examples/sec; 43.646 sec/batch)
2016-11-27 11:04:17.764336: step 10, loss = 13.76 (21.6 examples/sec; 1.484 sec/batch)
2016-11-27 11:04:32.590020: step 20, loss = 14.28 (21.4 examples/sec; 1.497 sec/batch)
2016-11-27 11:04:47.657033: step 30, loss = 14.63 (21.2 examples/sec; 1.511 sec/batch)
2016-11-27 11:05:02.499948: step 40, loss = 14.06 (21.6 examples/sec; 1.480 sec/batch)
2016-11-27 11:05:17.538775: step 50, loss = 13.49 (21.3 examples/sec; 1.504 sec/batch)
2016-11-27 11:05:32.363192: step 60, loss = 13.07 (22.1 examples/sec; 1.449 sec/batch)
2016-11-27 11:05:47.280413: step 70, loss = 13.21 (21.7 examples/sec; 1.472 sec/batch)
2016-11-27 11:06:02.230082: step 80, loss = 13.34 (22.3 examples/sec; 1.434 sec/batch)
2016-11-27 11:06:17.052023: step 90, loss = 13.01 (21.5 examples/sec; 1.491 sec/batch)
2016-11-27 11:06:32.107453: step 100, loss = 13.12 (20.4 examples/sec; 1.567 sec/batch)
...

評価

15倍程度の速度差。。
こんな重いjobを投げてすみませんでした、g2.2xlargeさん。
今後、g2インスタンスを使うことはないでしょう。

GRID K520がCompute Capability 3.0であることでも、今後、g2インスタンスを使うことはないでしょう。

あとがき

現時点では、p2だと、p2.xlargeしかスポットインスタンスが使えないので、しばらくはp2.xlargeでいこうかと。(p2.8xlarge, p2.16.xlargeもちょっと試してみようかなぁ)
Inception v3 model on Imagenetが学習できそうなので、数日以上回して、Inception v3 pre-trained modelと比較してうまくいってそうだったら、Imagenetに頼らずに、手持ちのデータだけで学習してみようかと。でも、データ作るの大変そう・・。