sagantaf

なんでも自分の思ったこと、経験したことを書いて生きます。

TensorflowをGPUで使おうとして「CUBLAS_STATUS_NOT_INITIALIZED」というエラーが出たら

環境:

  • Docker上でubuntu16.04のコンテナを起動
  • GPU:TITAN V
  • nvidia-driver: 390
  • cuda: 9.1

という感じ

tensorflow-gpuをインストールした時に、下記のエラーが発生。

E tensorflow/stream_executor/cuda/cuda_blas.cc:366] failed to create cublas handle: CUBLAS_STATUS_NOT_INITIALIZED

W tensorflow/stream_executor/stream.cc:1901] attempting to perform BLAS operation using StreamExecutor without BLAS support

ググると「GPUのメモリが不足しているとか解放されていないからプロセスを落としたり再起動せよ」って書いてあるけど、解決しない時がある。

そんな時はメモリが原因ではなく、キャッシュやtensorflowの設定に問題がある。

以下を実施することでエラーは発生しなくなり問題なくインストールできた。

キャッシュファイルの削除

$ sudo rm -rf ~/.nv/

tensorflowの設定変更

$ python
>>> import tensorflow as tf  
>>> from keras.backend.tensorflow_backend import set_session  
>>> config = tf.ConfigProto()  
>>> config.gpu_options.allow_growth = True  
>>> config.log_device_placement = True
>>> sess = tf.Session(config=config)  
>>> set_session(sess) 

「config.gpu_options.allow_growth = True」の設定で、GPUのメモリを状況に応じて変更してくれるようになる。

「set_session(sess) 」で修正を反映できる。