概要
どういうわけか、CPUが多いサーバーだと学習に時間がかかるんじゃないかという話があった。そんなことないやろと思いつつ、公平にAWSでベンチマークを撮ってみたが、やはりCPU数が多ければ多いほど遅くなってしまう。。
検証環境
nvidia-dockerを使ってCUDAの環境を構築し、その中でkeras公式レポジトリ内のexampleコードを実行して掛かった時間を計測する。
ちなみにgithubのレポジトリを使うとそれらがスクリプト化されている。
git clone https://github.com/thr3a/gpu.git cd gpu make build make benchmark1 CPUS=0-1 # 使用するコアをCPUSで渡す デフォルト0のみ
babi_rnn.pyを実行したときのベンチマーク結果
FacebookのbAbIデータセットを用いた学習 自然言語処理系のはず
CPU数1個の場合
- かかった時間 8分44秒
- 1エポックあたりの平均 25秒
CPU数2個の場合
- かかった時間 7分23秒
- 1エポックあたりの平均 21〜22秒
CPU数4個の場合
- かかった時間 7分37秒
- 1エポックあたりの平均 22秒
CPU数8個の場合
- かかった時間 8分06秒
- 1エポックあたりの平均 24秒
結果2コアが1番速く終わることになる
cifar10_cnn.pyを実行したときのベンチマーク結果
いわゆる画像分類
CPU数1個の場合
- かかった時間 5分18秒
- 1エポックあたりの平均 31秒
CPU数2個の場合
- かかった時間 4分14秒
- 1エポックあたりの平均 25秒
CPU数4個の場合
- かかった時間 4分40秒
- 1エポックあたりの平均 27秒
CPU数8個の場合
- かかった時間 5分11秒
- 1エポックあたりの平均 30秒
これも2コアが一番速かった
結果
2つのベンチマークを表にすると以下
babi_rnn.py | cifar10_cnn.py | |
---|---|---|
1コア | 8:44 | 5:18 |
2コア | 7:23 | 4:14 |
4コア | 7:37 | 4:40 |
8コア | 8:06 | 5:11 |
うーんなにかUbuntu側の設定の問題なのか、Tensorflow(or keras)の仕様なのか、、謎