【ディープラーニング】学習中に途中でフリーズしてしまう(GPUが止まる)時の対処法
こんなことが起こったら
ある日、いつものようにディープラーニングで学習を回していると、途中でフリーズしました。
GPU1の稼働状況を見てみると・・
ちょうどフリーズしたタイミングあたりで0%になってますね・・。
予測される原因
・GPUのメモリ不足
・各ソフトウェアのversion不一致
→個人的にメモリ不足だろと思ってましたが、今回はコレでした。
対策
・学習回数(epoch数)を下げる
・バッチサイズ下げる
・GPUのメモリ使用量を制限する
・NVIDIA Driverを更新する
→本記事での解決策
メモリ使用量の制限でいけると思ったんですがねぇ。。ドライバーに問題があったようです。
GPUメモリの使用量の制限方法
参考までに、GPUのメモリ使用量の制限方法も記載しておきます。
以下のコードを、処理前に挿入するだけです。
import tensorflow as tf from keras.backend.tensorflow_backend import set_session config = tf.ConfigProto() config.gpu_options.per_process_gpu_memory_fraction = 0.4 set_session(tf.Session(config=config))
この「0.4」って書いてるところが、何%メモリ使いますか?ってのを指定できます。0.4なので40%です。
その結果がこちら。
4.1→2.9GBに削減できてます。
GPUのメモリ不足が原因の時はお試しください。
NVIDIA Driverの更新
自分のPC環境に合ったドライバーに更新したら、GPUが止まることはなくなりました。。
ドライバーのダウンロードサイトは以下です。
www.nvidia.co.jp
ちなみに、ドライバを更新すると、なぜか処理速度もあがりました!
1epochあたり32sec程度かかっていたのが、24secに!(25%アップ!)
思わぬ副産物で高速化も実現できました。。
どういう理屈で改善したのかが知りたい。。もう少し調べてみます。
NVIDIA GPUに詳しい方いましたらコメントいただけると幸いです。
また、普段ディープラーニングで学習使ってる方も、これを機にドライバーのversionアップをご検討されてはいかがでしょうか?
思わぬ高速化で時短できるかもしれません。