技術は使ってなんぼ

自分が得たものを誰かの役に立てたい

【ディープラーニング】学習中に途中でフリーズしてしまう(GPUが止まる)時の対処法

こんなことが起こったら

ある日、いつものようにディープラーニングで学習を回していると、途中でフリーズしました。

f:id:yonesuke0716:20200624111027p:plain
なんか途中で止まった。。

GPU1の稼働状況を見てみると・・

f:id:yonesuke0716:20200624111101p:plain
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%です。

その結果がこちら。

f:id:yonesuke0716:20200624112441p:plain
専用GPUメモリ削減

4.1→2.9GBに削減できてます。

GPUのメモリ不足が原因の時はお試しください。

NVIDIA Driverの更新

自分のPC環境に合ったドライバーに更新したら、GPUが止まることはなくなりました。。

ドライバーのダウンロードサイトは以下です。
www.nvidia.co.jp

ちなみに、ドライバを更新すると、なぜか処理速度もあがりました!

1epochあたり32sec程度かかっていたのが、24secに!(25%アップ!)

f:id:yonesuke0716:20200624113952p:plain
なんか速くなった

思わぬ副産物で高速化も実現できました。。

どういう理屈で改善したのかが知りたい。。もう少し調べてみます。

NVIDIA GPUに詳しい方いましたらコメントいただけると幸いです。

また、普段ディープラーニングで学習使ってる方も、これを機にドライバーのversionアップをご検討されてはいかがでしょうか?

思わぬ高速化で時短できるかもしれません。