ディープラーニングの研究において、学習時間の短縮は非常に大きな問題です。
特に前回の例のように1回40時間とか要すると、簡単に試行錯誤できません・・・
現在shimizuの実行活環境は、i7-4770T+GTX1060(6GB)です。
通常の使用ではほぼ無音でとても快適な自作PCなのですが、GPUを変更すると学習時間短縮の効果が出るのでしょうか?
ということで、まずはGPUの有無で計測してみました。
CNTKの時ははGPUを検出すればそのままGPUを使用してくれました。
しかしmxnetのGPU仕様は少し特殊(?)で、実装時にGPUを意識する必要があります。
変数毎に「これはcpu上、これはgpu(0)上・・・」と配置場所を指定してやるのです。
また、cpu上とgpu上の変数同士は直接計算に使用できません。(慣れるまではよくエラーになりますw)
(この方式の方が細かく制御できて性能上よいのかもしれません)
そこで3パターンで計測してみました。(ネットワークはLSTM1層)
- 実行もデータもすべてGPU上(1番早いハズ)
- 実行はGPU上で、データはCPUからGPUにミニバッチの都度コピー(2番目に早いハズ)
- 実行もデータもすべてCPU上(1番遅いハズ)
結果は以下の通りです。(表示順が逆ですが)
予想に反して、1と2が(数秒ですが)逆転しています。
hybrid(Symbolic)を試していた時にもよく発生していたのですが、予想では早いハズが、実際には少し遅いのです。(実行時間自体が短めなので誤差の範囲と考えています)
GPU無し:4,316秒、GPU有り:480秒で、GPUの有無で約9倍の差がでています。
これはもうGPU無しでディープラーニングは考えられませんね( ̄▽ ̄)
それでは、GPUを変更したらどれだけ早くなるのでしょうか?
残念ながら、いくら検索してもGTX1060の入った学習時間比較などありません(まぁ当然ですが)
ただ、1世代前のGTX1080と3世代前のK80、2世代前のM40を比較した記事がありました。
GTX1080でも、結構な速度アップにになりそうな感じです。(1060との単純性能比で)
では最新の2080tiとかどうでしょうか?
tensorコアも備えていてteslaV100の8割程度の性能が出るようです \(^_^)/
物欲が止まりません・・・(約15万円か、悩むなぁw)