KerasでGPUを使う際に「could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR Segmentation fault (core dumped)」が発生

GPUが割り当てられない

import cv2
import numpy as np
import glob
import os

:

import keras.callbacks
import keras.backend.tensorflow_backend as KTF
import tensorflow as tf

old_session = KTF.get_session()

session = tf.Session('')
KTF.set_session(session)
KTF.set_learning_phase(1)

os.environ["CUDA_VISIBLE_DEVICES"]="0"

以下のようなエラーが発生

2018-08-13 13:55:36.505571: E tensorflow/stream_executor/cuda/cuda_dnn.cc:332] could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
Segmentation fault (core dumped)

GPUが使えていないようなのでos.environ["CUDA_VISIBLE_DEVICES"]="1"に変更してみてもエラーが出てしまう。

原因・解決策

os.environ["CUDA_VISIBLE_DEVICES"]="1"  # 前に移動

# Add for TensorBoard
import keras.callbacks
import keras.backend.tensorflow_backend as KTF
import tensorflow as tf

old_session = KTF.get_session()

session = tf.Session('')
KTF.set_session(session) # これより前にGPUを指定
KTF.set_learning_phase(1)

どうやらKTF.set_session(session)の時点で使うGPUを決めているそうなので、その前にos.environで使用するGPUを決めてあげることで解決出来た。

参考