GPU
DeepLearning
深層学習
TensorFlow

TensorFlow 各環境でのCPU / GPUベンチマーク結果 (EC2 GPU環境追加)

TensorFlow1.5 最適化済みバイナリ効果検証, Mac Pro追加 2/6/2018

GeForce GTX1080 Ti の検証 10/3/2017

MacBook Pro Core i7 の検証 10/1/2017

Amazon EC2 / Microsoft Azure 環境の検証 9/17/2017

TensorFlow 1.0/XLA での導入効果 仮検証 2/24/2017

CPU / GPU 性能やOSによる違い検証 1/19/2017

Windows環境下 (正式版 / docker / bash on Ubuntu) での違い検証 1/19/2017


TensorFlowのmnistでの CPU / GPU 計算速度について自分の実測値を載せておきます。5000回のトレーニングにかかった時間です。3回の計測値の平均を四捨五入してます。

本当はわざわざ記事にするほどではないのですが、初記事が画像のアップロード制限に引っかかってしまったようなので記事にしました。


TensorFlow1.5 最適化済みバイナリ

1.5以前の配布バイナリでは最適化が含まれていませんでしたが、1.5よりSSE4.1を使用し最適化つきでビルドされたバイナリが配布版となりました。(但しSSE4.2 AVX AVX2 FMAは含まれず)

これにより自前でビルドしなくても多少の高速化が望めることとなります。大抵の方はGPUを使っているでしょうが、CPUで手軽に利用するケースも増えて来たみたいです。特にMacユーザーはCPUメインとなるのでMacで検証しておきます。

Machine
CPU
Memory
GPU
Environment
TensorFlow version
time (sec)

Mac Book Pro (Late 2013)
i5 2.4GHz 2Core
8GB 1600MHz DDR3
無し
Mac OSX
1.5.0配布版 (SSE4.1最適化)
849

Mac Book Pro (Mid 2014)
i7 2.8GHz 4Core
16GB 1600MHz DDR3
無し
Mac OSX
1.5.0配布版 (SSE4.1最適化)
392

Mac Pro (Late 2013)
XEON 3.5GHz 6Core
32GB 1866MHz DDR3
無し
Mac OSX
1.5.0配布版 (SSE4.1最適化)
342

Mac Pro (Late 2013)
XEON 3.5GHz 6Core
32GB 1866MHz DDR3
無し
Mac OSX
1.5.0自家版 (SSE4.1/4.2/AVX最適化)
288


Amazon EC2 / Microsoft Azure 環境の検証

Machine
vCPU
vMemory
vGPU
Environment
TensorFlow version
time (sec)

EC2 g2.2xlarge
8Core
15GB
1 x K520?
Ubuntu 16
0.9.0
83.86

EC2 g2.2xlarge
8Core
15GB
1 x K520?
Ubuntu 16
1.0.0
81.93

EC2 g2.8xlarge
32Core
60GB
2 x K520?
Ubuntu 16
1.0.0
82.05

EC2 p2.xlarge
4Core
61GB
1 x K80?
Ubuntu 16
1.0.0
48.34

EC2 p2.8xlarge
32Core
488GB
8 x K80?
Ubuntu 16
1.0.0
57.91

Azure DS11_V2
2Core
14GB
無し
Ubuntu 16
1.1.0
958

AzureではGPUインスタンスがメニューから利用できず、問い合わせが必要だったので残念ながら試していません。結果については2017年5-6月頃に試したものです。

試しているのがMNISTの単純なモデルなので、もっと複雑なモデルでないとメモリやGPU性能の向上による恩恵は見えないのかもしれません。また、それぞれのGPUの上位モデル(GPU複数搭載モデル)を試した結果ではそのままでは速度向上効果がありませんでした。

分散環境を使うか、うまくタスクの振り分けを行わないといけないようです。


TensorFlow 1.0以降 での最適化効果 検証

1.0ではXLAの導入により大幅な高速化が期待できます。この効果を検証してみました

Machine
CPU
Memory
GPU
Environment
TensorFlow version
time (sec)

Mac Book Pro
i5 2.4GHz 2Core
8GB 1600MHz DDR3
無し
Mac OSX
0.12.1
983

Mac Book Pro
i5 2.4GHz 2Core
8GB 1600MHz DDR3
無し
Mac OSX
1.0.0
946

Mac Book Pro
i5 2.4GHz 2Core
8GB 1600MHz DDR3
無し
Mac OSX
1.0.0 自環境最適化
652

Mac Book Pro
i7 2.8GHz 4Core
16GB 1600MHz DDR3
無し
Mac OSX
1.0.1
441

Mac Book Pro
i7 2.8GHz 4Core
16GB 1600MHz DDR3
無し
Mac OSX
1.3.0
419

Mac Book Pro
i7 2.8GHz 4Core
16GB 1600MHz DDR3
無し
Mac OSX
1.3.0 自環境最適化
267

Lenovo P910
Xeon Dual 2.1GHz 8Core
16GB 2400MHz
無し
Ubuntu
0.11.0
261

Lenovo P910
Xeon Dual 2.1GHz 8Core
16GB 2400MHz
無し
Ubuntu
1.0.0
423

Lenovo P910
Xeon Dual 2.1GHz 8Core
16GB 2400MHz
無し
Ubuntu
1.0.0 自環境最適化
281

Lenovo P910
Xeon Dual 2.1GHz 8Core
16GB 2400MHz
M6000
Ubuntu
0.11.0
28.7

Lenovo P910
Xeon Dual 2.1GHz 8Core
16GB 2400MHz
M6000
Ubuntu
1.0.0
28.3

Lenovo P910
Xeon Dual 2.1GHz 8Core
16GB 2400MHz
M6000
Ubuntu
1.0.0 自環境最適化
31.5

ここで 自環境最適化とついているものは、TensorFlowのバイナリビルド時に -march=native として、SSEなどハードで使用できる高速化オプションを自分のマシン用に最適化してコンパイルしたものです。それ以外では普通にpipでインストールしたものを使っています。


  • MacBook Pro CPU版では各種高速化のオプションをつけてビルドすることでi5で946ms->652ms、i7で419ms->261ms と大幅(30%以上)に速度が上がりました。

  • Ubuntu CPU版では 1.0.0では逆に大幅に遅くなってしまいました。

  • ただし Ubuntu CPU版でも最適化してコンパイルし直せばやはり同様に30%以上の高速化にはなります。ただし前バージョンと比べってやっと同程度ですが。

  • Ubuntu GPU版(1.0.0)では今度は自前でコンパイルした方が遅くなってしまいました。コミュニティの話では標準のGPU版では既に最適化オプションはついている状態らしいので、GPU版の場合は速度面では自前でコンパイルするメリットはあまりなさそうです。


XLA検証 (TensorFlow 1.0.0)


  • MBPでXLA (JITコンパイラ)を有効にしてビルドしても効果は変わらず。

  • UbuntuでXLA (JITコンパイラ)を有効にしてビルドしようとしたらエラーでうまくコンパイルできず。

結論としては速度面ではまだあまり安定していない印象がありますが、CPU利用の場合は大幅に速度が上がる可能性は高いです。公式のサイトにコンパイルの仕方は書いてありますしそれほど難しくはないので是非挑戦してみて下さい。


GPU 有り / 無し

Machine
CPU
Memory
GPU
Environment
TensorFlow version
time (sec)

自作 ASUS P6T
i7 2.67GHz 4(8)Core
10GB 1600MHz
無し
Ubuntu
0.9.0
639

自作 ASUS P6T
i7 2.67GHz 4(8)Core
10GB 1600MHz
Geforce 1060
Ubuntu
0.9.0
34

自作 ASUS P6T
i7 2.67GHz 4(8)Core
10GB 1600MHz
Geforce 1080 Ti
Ubuntu
1.3.0
22

自作 ASUS P6T
i7 2.67GHz 4(8)Core
10GB 1600MHz
無し
Windows
0.12.1
937

自作 ASUS P6T
i7 2.67GHz 4(8)Core
10GB 1600MHz
Geforce 1060
Windows
0.12.1
35

Lenovo P910
Xeon Dual 2.1GHz 8Core
16GB 2400MHz
無し
Ubuntu
0.11.0
261

Lenovo P910
Xeon Dual 2.1GHz 8Core
16GB 2400MHz
M6000
Ubuntu
0.11.0
28


  • GPUにより 8倍 - 20倍くらいの差が出る

  • デスクトップ最高峰性能のマシンならギリギリ実用できる速度は出るかも

  • それでも3万円程度のGPUにさえ全ったく敵わない (Xeon Dualの8倍高速)


各種 CPU/RAM 性能の影響、Mac OSX/Ubuntu/Winの違い

Machine
CPU
Memory
GPU
Environment
TensorFlow version
time (sec)

Mac Book Pro
i5 2.4GHz 2Core
8GB 1600MHz DDR3
無し
Mac OSX
0.8.0
1148

Mac Book Pro
i5 2.4GHz 2Core
8GB 1600MHz DDR3
無し
Mac OSX
0.9.0
999

Mac Book Pro
i5 2.4GHz 2Core
8GB 1600MHz DDR3
無し
Mac OSX
0.12.1
983

Mac Book Pro
i7 2.8GHz 4Core
16GB 1600MHz DDR3
無し
Mac OSX
1.0.1
441

Mac Pro
XEON 3.5GHz 6Core
32GB 1866MHz DDR3
無し
Mac OSX
1.5.0
342

自作 ASUS P6T
i7 2.67GHz 4(8)Core
2GB 1600MHz
無し
Ubuntu
0.8.0
828

自作 ASUS P6T
i7 2.67GHz 4(8)Core
2GB 1600MHz
無し
Ubuntu
0.9.0
639

自作 ASUS P6T
i7 2.67GHz 4(8)Core
8GB 1600MHz Single Channel
無し
Ubuntu
0.9.0
836

自作 ASUS P6T
i7 2.67GHz 4(8)Core
10GB 1600MHz
無し
Windows
0.12.1
937


  • CPUメインならCPU性能やメモリ速度は順当に影響が出る

  • OSが違うことで利用している周辺ライブラリの差が出るせいか、思ったよりもOSや環境による速度差はある

  • TensorFlow 0.8.0 -> 0.9.0 で1割ほど高速化したっぽい


Windows環境下の 0.12.0 / docker / bash on Ubuntu

Machine
CPU
Memory
GPU
Environment
TensorFlow version
time (sec)

自作 ASUS P6T
i7 2.67GHz 4(8)Core
10GB 1600MHz
無し
Windows (docker) VirtualBox + Jupytor Notebook
0.8.0
2539

自作 ASUS P6T
i7 2.67GHz 4(8)Core
10GB 1600MHz
無し
Windows
0.12.1
937

ASUS K73SM (Laptop)
Core i7 2670QM (Mobile) 4(8)Core 2.2GHz
8GB 800MHz
無し
Windows (Bash on Ubuntu)
0.11.0
1437


  • Windows Docker環境はかなり遅い。本気でやるならせめて Bash on Ubuntu on Windowsで

  • と、思っていたけど0.12.0でWindowsに対応しました。速度的にもかなりメリットがあるのでこれを使いましょう


また上記の表には出していませんが、ある程度複雑なモデルを動かそうとした場合に3GBのGPUではメモリ不足で止まってしまうケースが幾つかありました。3GBのうち1GBをビデオに取られてしまうので実質2GBです。DLで使う予定の場合は6GB以上のモデルを考えた方が良いと思います。