読者です 読者をやめる 読者になる 読者になる

電子計算記

個人的な検証を

gpu.7XLM40でChainer

IDCF Cloud Advent Calendar 2016 の12/11が中々埋まらないので個人的に責任(ぇ)をとって埋めておきますね。

IDCFクラウドGPUインスタンスgpu.7XLM40が搭載しているTesla M40はディープラーニング用とのことなので、前回のエントリに続き、手元にあるJetson TK1と比較してみます。
今回は国産のフレームワークであるChainerを試してみましょう。

前回のエントリの通り、CUDAまで入っている前提で進めます。

まずは、NVIDIA謹製のDeepLearning高速化ライブラリ cuDNN を入れます。
以下からダウンロードします。

developer.nvidia.com

以下のようにダウンロードしたファイルをCUDAインストールディレクトリに展開します。

# tar zxf cudnn-8.0-linux-x64-v5.1.tgz -C /usr/local/

次にChainerをpipでインストールします。

# apt install python-dev python-pip -y
# pip install chainer

以下のようにMNISTサンプルを動かして時間を比較しましょう。

# wget https://github.com/pfnet/chainer/archive/v1.19.0.tar.gz
# tar xzf v1.19.0.tar.gz
# python chainer-1.19.0/examples/mnist/train_mnist.py

Jetson TK1の場合、

# python train_mnist.py -g 0
GPU: 0
# unit: 1000
# Minibatch-size: 100
# epoch: 20

epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           0.191052    0.0946279             0.942567       0.9685                    15.3752       
2           0.0759313   0.079524              0.975899       0.974                     27.6975       
3           0.0477192   0.0753355             0.984999       0.9782                    39.9687       
4           0.036118    0.0776683             0.988181       0.98                      52.2688       
5           0.0288793   0.0803554             0.990682       0.9784                    64.564        
6           0.0237394   0.0802068             0.992365       0.9808                    76.8615       
7           0.0206044   0.0778168             0.993249       0.9809                    89.1331       
8           0.0188643   0.0854813             0.993732       0.9793                    101.466       
9           0.0161048   0.0746344             0.994749       0.9832                    113.725       
10          0.0121589   0.0872302             0.996382       0.9827                    125.995       
11          0.0171261   0.0819404             0.994816       0.9819                    138.278       
12          0.012826    0.109307              0.996232       0.9796                    150.613       
13          0.00925115  0.107072              0.997199       0.9793                    162.971       
14          0.0152739   0.0923335             0.995265       0.9823                    175.281       
15          0.013186    0.106915              0.995599       0.9815                    187.636       
16          0.00774953  0.0932978             0.997649       0.9833                    199.973       
17          0.00556501  0.095636              0.998332       0.983                     212.293       
18          0.0136293   0.102989              0.996166       0.9824                    224.661       
19          0.0108599   0.0967607             0.997266       0.9819                    236.958       
20          0.00808728  0.108585              0.997465       0.9811                    249.314

gpu.7XLM40の場合、

# python train_mnist.py -g 0
GPU: 0
# unit: 1000
# Minibatch-size: 100
# epoch: 20

epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           0.192398    0.103778              0.941517       0.9661                    3.31695       
2           0.0745933   0.0841857             0.977366       0.9727                    6.05998       
3           0.0486797   0.074385              0.983998       0.9786                    8.80333       
4           0.0367712   0.0739067             0.987615       0.978                     11.5473       
5           0.027089    0.0893926             0.991115       0.9742                    14.2486       
6           0.0233483   0.0714004             0.992715       0.9805                    16.9643       
7           0.0221298   0.0675429             0.993066       0.9814                    19.6585       
8           0.0181648   0.0812684             0.994115       0.9812                    22.3716       
9           0.0163283   0.108464              0.994815       0.9746                    25.0874       
10          0.0138237   0.0710016             0.995482       0.9848                    27.7974       
11          0.0133834   0.0990396             0.995915       0.9791                    30.5191       
12          0.013658    0.0909462             0.995599       0.9812                    33.2338       
13          0.0133063   0.0876385             0.995949       0.9827                    35.9592       
14          0.0093469   0.0917807             0.997065       0.9817                    38.6743       
15          0.0119297   0.0796671             0.996416       0.9853                    41.3877       
16          0.0118582   0.10504               0.996482       0.9808                    44.1021       
17          0.00992382  0.0811633             0.997066       0.9837                    46.817        
18          0.00825741  0.102598              0.997582       0.9821                    49.5329       
19          0.00609279  0.0972261             0.998366       0.9819                    52.2437       
20          0.0118044   0.105861              0.996865       0.9804                    54.9529

20epoch回すのに、
Jetson TK1は、249.314sec、
gpu.7XLM40は、54.9529sec、
5倍くらいの差がでました。さすがM40速いといいたいところですが
もっと差が出ても良さそうですが、層が浅いせいかな。

次回は別のDeepLearningのフレームワークで試してみる。