Kerasを使った株価予測を行っているのですが、いつも使っているコードから突然"Blas GEMM launch failed"というエラーが出ました。
色々調べて自己解決できたので、備忘録を兼ねてブログに残します。
1.環境
GPU:GeForce GTX 1070
Python:3.7.3
Keras:2.3.1
tensorflow-gpu:2.0.0
2.状況
いつもはエラーなく実施できていたDNNの学習で"Blas GEMM launch failed"というエラーが出力されました。
3.原因
GPUメモリオーバフロー。GPUメモリの使用量超過が原因とのこと。
(参考:TensorFlowで"Blas GEMM launch failed"が出た場合の対処法)
4.対処法
調べたところtensorflow_backend.pyの"allow_growth"を"True"にすることで解決するとのこと。Tensorflowが確保するGPUメモリを調節する設定らしいです。これを設定しないとTensorflowが勝手に上限までメモリを確保してしまうらしいです。
(参考:python - TensorFlow: Blas GEMM launch failed - Stack Overflow)
調べたところ、以下のコードで"allow_growth"の設定変更ができるようです。
import tensorflow as tf from keras.backend import tensorflow_backend config = tf.ConfigProto(gpu_options=tf.GPUOptions(allow_growth=True)) session = tf.Session(config=config) tensorflow_backend.set_session(session)
(参考:Python: Keras/TensorFlow で GPU のメモリを必要な分だけ確保する - CUBE SUGAR CONTAINER)
上記はTensorflowバージョン1用らしいので、バージョンが2だと上記はそのまま使えません。以下のように修正して使ってみたところ事象が解決しました。
import tensorflow as tf from keras.backend import tensorflow_backend config = tf.compat.v1.ConfigProto(gpu_options=tf.compat.v1.GPUOptions(allow_growth=True)) session = tf.compat.v1.Session(config=config) tf.compat.v1.keras.backend.set_session(session)