読者です 読者をやめる 読者になる 読者になる
自分のための備忘録的なブログです。

Ubuntu14.04LTS および Win10 を使って、ディープラーニングの勉強をしています。記載されているコードは、他の OS には互換性がない可能性があります。


DNN:
マシン性能別 学習速度の比較, TFチュートリアルをmodifyする

python3:
オブジェクト指向プログラミングとは, モジュールとインポート、パスを通す, システムコマンド(os), ファイル・フォルダ名取得, 画像の前処理,

Ubuntu14 の初期設定:
Ubuntu14初期設定, 初期設定-2, cudaなども,

TensorFlow、マシン性能/OS環境でどのくらいの差が出るか

 2017/5/5 update

CIFAR-10 を追加。

 

目次

 

MNIST

TensorFlow, tutorial, MNIST

http://pmonty.hatenablog.com/entry/2017/02/11/153820

隠れ層一層の、単純な NN

 

 RAM 使用量:ほぼ 0GB

 

laptop (No external GPU)

Panasonic laptop ('12):   2.55 sec *1 Ubuntu14.4 第三世代 core i5

Lenovo laptop ('16):        1.31 sec *2 Win10 第六世代 core i7

Ubuntu14 on VMware:    1.99 sec *3 on Lenovo Win10

Laptop ('16):                    1.28 sec *4 Win7 第六世代 core i7

 

desktop

i3/NO GPU/BTO('17):     1.24 sec *5 Ubuntu14, i3-7100

i3/1070/BTO('17):            1.00 sec *6 Ubuntu14, i3-7100

i5/1080Ti/BTO('17):         0.94 sec *7 Ubuntu14, i5-7600K

 

ハイスペックほど速い、順当な結果。

第三世代 core i5 から第六世代 core i7 にかけて、クロック周波数とコア数は変わってなかったけれど、明らかな速度差が出ました。

Ubuntu 14 on VMware もそれほど遅くなかった。

 

 

 

TensorFlow, tutorial, MNIST, CNN

http://pmonty.hatenablog.com/entry/2017/02/13/103000

 

    RAM使用量:5.4GB

すみませんが、コードに誤りを見つけたので 、再計測中です。

laptop (No external GPU)

Panasonic laptop ('12):    38 min Ubuntu 14, 第3世代 i5

Lenovo laptop ('16):         49 min Win 10, 第6世代 i7

Ubuntu14 on VMware      5 hr  on Win 10, 第6世代i7

Laptop ('16 RAM 4GB):   クラッシュ!

 

desktop

※再計測後!

i3/1070/BTO('17):           120 sec Ubuntu14, i3/1070 発熱60度台。オリファン

i5/1080Ti/BTO('17):         70 sec Ubuntu14, i5/1080ti 発熱80度台。ファウンダーズ

 

メモリ(RAM)が足りないとクラッシュすることを確認。

新しい Lenovo laptop が、古い Pana に負ける。おそらく Win10 のせいでしょう(検証結果は次項)

Win 10 PC では Jupyter Notebook と コマンドプロンプトで時間差はありませんでした。外部ディスプレイの数も、体感できる差はありませんでした。Dropbox の同期を切ると、気持ち速くなります。バックグラウンドプログラムは、なるべく落としておいた方が良さそうです。 

そして Ubuntu14 on VMware はむちゃくちゃ遅い。仮想環境は遅いですね。

 

 
参考:CPU と GPU の組み合わせ比較。

  core i3

i3-7100, NO GPU:                       1380 sec (23 min)

i3-7100, 1070:                                 30 sec

i3-7100, 1080ti :                              16 sec 

  core i5

i5-7600K,  1070:                              27 sec

i5-7600K, 1080ti:                             15 sec

i5-7600K,  1080ti + 1070, No SLI:   15 sec

 

CNN では、CPU差の影響がほとんどないことを確認。また、GPUの存在が重要なことも。

SLI しない GPU 2 枚、しかもモデル違い は何の意味もありませんでした(でもtensorflowに、VRAMはしっかり確保されていました)。

 

GPU は載せ替えただけです。cuda の再インストールなどは行っていません。

 

 

 

Windows のせいで遅いのか

 

Pana ('12) with Win7:        48 min

Pana ('12) with Ubuntu:     38 min

 

Lenovo ('16) with Win10:   49 min

Lenovo ('16) with Ubuntu32 min

 

Windows では、Ubuntu より遅いという結果が得られました。ありがとうございました。

 

CIFAR-10

TensorFlow, tutorial, CIFAR-10

tensorflow/models/tutorials/image/cifar10/cifar10_train.py

without GPU

ノートPC:     100 examples/sec

i3 desktop:   240 examples/sec

 

with GPGPU

i3/1070:      2000 examples/sec

i3/1080ti:    2300 examples/sec 

i5/1070:      2800 examples/sec

i5/1080ti:    3000 examples/sec 

 

※このコードは、cpu の影響が大きいようです。

 

i5/1080Ti のパソコンで 100 万ステップを終了するのに、10 時間程度かかりました。

実際には 10 万ステップ程度でも十分だったようなのですが・・・(要検証)

 

GPU のメモリ確保量を変更(→50%、30%に減少)

i5/1080ti PC

 

pmonty.hatenablog.com

 

させても、クラッシュせず、速度も下がりませんでした。

バッチサイズを自動的に変更させているわけではなさそう。

 

 

2つの cifar-10_train.py のプロセスを、一つのコンピューター上で同時に動かした場合 (i5/1080ti)

 

計算速度は約 40% に遅くなりました。

  0.04 sec / batch → 0.12 sec / batch

 

CPU/GPU の発熱は変化せず。

VRAM 使用量は単純な加算に(4000MB → 8000MB)。

GPU fan や Volatile GPU-Util も変化なし。

 

2 台の GPU を積んで、それぞれの GPU に計算を割り振った場合、

(i5/ 1080ti + 1070)

 

(ディスプレイは 1080ti に接続)

1080ti:  0.040 sec / batch → 0.070 (1080ti), 0.080 (1070) 

1070:    0.045 sec / batch → 0.070 (1080ti), 0.075 (1070) 

 

と、2 台の グラボを挿すメリットなし。

 

 

発熱は CPU, GPU とも 60 度台。

 

 

自作のCNN

64x64 の .jpg 画像を10クラスに分類するという、ありきたりなタスク。

64x64 の画像を読み込んだあと、スクリプト内で 32x32 に resize する。

ので、その部分に時間がかかる(やっぱpickleしておきたい!! cifar-10 は、画像枚数ずっと多かったのに学習は早かった。 Google の tensorflow tutorial, cifar-10 の凄さを時間気づく)。

 

トレインデータ: 2620 枚

テストデータ: 320 枚

validation データ: 320 枚

 

10 step

i3, woGPU:  65 min

i3, 1070:     15 min

i5K, 1080ti: 13 min

 

100 step

i3, 1070:      25min

i5K, 1080ti:  20 min

 

100 step で train accuracy は 0.99 超えるが、test accuracy は0.25-0.30 止まり。

まだミニバッチが実装できてない。繰り返し、すべての画像を使った学習になってしまっていて、過学習になっている。

Data augmentation を入れられればもっと良くなるでしょうが?

 

検討マシン

Panasonic laptop (2012)

    Let's Note SX2

    core i5-3320M  @ 2.60 GHz, 2 core, with hyperthreding (HT)

    RAM 16GB  DDR3L-1600 (8+8GB)

    SSD (SATA3)

    Ubuntu 14.4LTS日本語Remix, Anaconda 4.2.0, Python 3.5, TF 1.0.1

  ※ Win7/Ubuntu14 デュアルブート

 

Lenovo laptop (2016)

    Thinkpad T460

    core i7 6600U  @ 2.60 GHz 2 core, with HT

    RAM 20GB, DDR3L-1600 (4 + 16GB)

    SSD (SATA3)

    Windows 10, Anaconda 4.2.0, Python 3.5, TF 1.0.1

        ※ Win10/Ubuntu14 デュアルブート

 

i3/1070/BTO('17)

    Core i3-7100 @ 3.9GHz, 2 core with HT

    RAM 8 GB, DDR4-2400

    SSD(SATA) 500GB + SSHD 2TB

    GeForce GTX 1070

    Ubuntu 14.4, Anaconda, Python 3.5, TF1.0.1, CUDA 8.1, CuDNN 5.1

 

 

i5/1080Ti/BTO('17)

    core i5-7600K  @ 3.80 GHz, 4  core, no HT

       ※ 10% 程度のクロックアップを行っています。

    RAM 32 GB, DDR4-2400

    SSD(NVMe) 500G + 2T, 3T, 3T HDD (7200rpm)

    GeForce GTX 1080Ti

    Ubuntu 14.4, Anaconda, Python 3.5, TF1.0.1, CUDA 8.1, CuDNN 5.1

*1:2.63, 2.48, 2.53

*2:1.30, 1.31, 1.31

*3:1.95, 2.01, 2.00

*4:1.36, 1.22, 1.26

*5:1.09, 0.96, 0.95

*6:1.09, 0.96, 0.95

*7:0.92, 0.95, 0.95