よっしーの私的空間

機械学習を中心に興味のあることについて更新します

"Blas GEMM launch failed"の対処法

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)