Help us understand the problem. What is going on with this article?

TensorFlow 各環境でのCPU / GPUベンチマーク結果 (ラズパイ4追加)

Raspberry Pi4 追加 7/7/2019
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回の計測値の平均を四捨五入してます。

ラズベリーパイ4 ($35) vs. MacBook Pro ($2,500)

Machine CPU Memory GPU Environment TensorFlow version time (sec)
Mac Book Pro i5 2.4GHz 2Core 8GB 1600MHz DDR3 無し Mac OSX 1.13.1 705
Mac Book Pro i7 2.8GHz 4Core 16GB 1600MHz DDR3 無し Mac OSX 1.13.1 326
Raspberry Pi4 A72 1.5GHz 4Core 2GB 2400MHz LPDDR4 無し Raspbian 1.13.1 3,380
Raspberry Pi4 with cooling fan A72 1.5GHz 4Core 2GB 2400MHz LPDDR4 無し Raspbian 1.13.1 2,863
  • 性能 (1/326 vs 1/2,863) 対 価格 (2,500 vs 35)比 で考えるとラズパイは約8倍お得?

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
Mac Book Pro i7 2.8GHz 4Core 16GB 1600MHz DDR3 無し Mac OSX 1.13.1 326
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 Book Pro i7 2.8GHz 4Core 16GB 1600MHz DDR3 無し Mac OSX 1.14.0 353
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以上のモデルを考えた方が良いと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away