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) 」で修正を反映しています。