TensorFlowで Blas GEMM launch failed
のエラーが出てしまう。
しかし原因がわからない。
一体どうすれば回避できるのか。
今回は Blas GEMM launch failed
エラーの原因と、その対処法について紹介する。
TensorFlowとは?
TensorFlowとはGoogle製の超有名な機械学習ライブラリ。
機械学習エンジニアならばまずTensorFlowを知らない人間はいないと思われる。
ニューラルネットワークの処理だけでなく、内部の隠れ層の処理や活性化関数など調整ができる便利なライブラリ。
TensorFlow(テンサーフロー)とは、Googleが開発しオープンソースで公開している、機械学習に用いるためのソフトウェアライブラリである。
TensorFlow - Wikipedia
"Blas GEMM launch failed" の原因
PythonからTensorFlowの処理を実行した際に以下のエラーが発生することがある。
InternalError: Blas GEMM launch failed
原因はGPUメモリのオーバーフロー。
GPUメモリの限界以上のメモリを使おうとしたためエラーが起こっている。
確認方法としてはGPUメモリの使用率を確認するのが簡単。
Windows10であれば taskmgr
コマンドでタスクマネージャを起動して、 GPU0
や GPU1
からGPUメモリ使用率を確認できる。
その際、タスクマネージャを見ながらTensorFlowの処理を実行して、エラー発生直前にメモリ使用率が100%近くなっていればオーバーフローである。
GPUメモリの使用状況を見てみましょう。Windows10であればタスクマネージャから確認できます。
Tensorflow InternalError: Blas SGEMM launch failed が発生する場合 | CodeLab技術ブログ
https://www.codelab.jp/blog/?p=2044
共有GPUメモリは使えないのか
タスクマネージャ上には 専用GPUメモリ と 共有GPUメモリ が表示されているので、共有GPUメモリを使いたくなると思う。
しかし 共有GPUメモリ をTensorFlowから使う事はできない。
何故なら共有GPUメモリはGPU上のメモリではなく、PCのメモリをGPU用に貸し出してるものだから。
CUDAはGPUに搭載されたメモリしか使えないので、GPU上のメモリではない 共有GPUメモリ は使えないのである。
共有メモリは、グラフィック用に予約されているメインシステムRAMの領域です。
これはあなたのNVIDIA GPUにはありません、そしてCUDAはそれを使うことができません。TensorFlowで共有GPUメモリを使用しますか? - コードログ
https://codeday.me/jp/qa/20190416/638545.html
"Blas GEMM launch failed" の回避方法
回避方法はいくつかある。
- 大きいGPUメモリを搭載したGPUを購入する
- TensorFlowプログラムのメモリ使用量を下げるようにコードを修正する
- GPUを2つ搭載している場合は、GPU1を使ってみる
この中で2枚目のGPU(GPU1)を使う方法を紹介する。
2枚目のGPU(GPU1)を使う方法
GPUを2つ搭載している場合は、2枚目のGPU(GPU1)がメモリを多く搭載していれば、2枚目のGPU(GPU1)を使ってエラーを回避できる。
PythonからGPUを指定するには、TensorFlowを実行する際に config
を設定して利用GPUを指定する。
import keras import tensorflow as tf tf.Session(config=tf.ConfigProto(device_count = {'GPU': 1}))
参考:Jupyter上で使用するGPUを指定する最適解 - Qiita
まとめ
Blas GEMM launch failed
の原因はGPUメモリのオーバーフロー- 共有GPUメモリはGPU上のメモリではないので使えない
- エラーを回避する方法の1つは
config
から別のGPUを指定する