動かざることバグの如し

近づきたいよ 君の理想に

Tensorflow+kerasで機械学習する時にCPUが多いと遅い件

概要

どういうわけか、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)の仕様なのか、、謎