Win10 KerasでGPU使用時のCUBLAS_STATUS_ALLOC_FAILEDエラー

Win10 でkerasを導入したところ,
[failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED]
というエラーが発生して学習が実行できませんでした. どうやら使用中のGPUのメモリ使用率が高すぎることが原因のようでした.

qiita.com

引用記事ではtotalMemoryとfreeMemoryの値を参考にメモリ使用率を指定せよとのことでしたが,うちの環境ではさらにメモリ使用率を下げないと同じエラーが発生してしまいました. 原因がわかっていないのですが,とりあえず状況をメモしておきます.

環境

エラーの内容

↓のコードを実行した際に,
totalMemory: 2.00GiB freeMemory: 1.64GiB
だったので8割くらい行けるだろうと思って
config.gpu_options.per_process_gpu_memory_fractionを0.8としたのですが
successfully opened CUDA library cublas64_90.dll locally
というメッセージの後,
failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
が発生しました.

メモリ使用率を0.3程度に下げると一応実行できるようになりました.

コード

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from keras.layers.recurrent import LSTM
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import Adam

# GPUを使用している場合,メモリ使用率を制限する
import tensorflow as tf
from keras.backend.tensorflow_backend import set_session
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.3
set_session(tf.Session(config=config))

# データの読み込み
(略)

# モデルの作成
model = Sequential()
num_in_units = 1
num_hidden_units = 20
model.add(LSTM(units=num_hidden_units, input_shape=(input_length, num_in_units), kernel_initializer="random_normal",  stateful=False, return_sequences=False))
num_out_units = 1
model.add(Dense(units=num_out_units, kernel_initializer="random_normal"))
model.add(Activation('linear'))
model.compile(loss="mean_squared_error", optimizer=Adam(lr=0.01, beta_1=0.9, beta_2=0.999))

# モデルの学習
model.fit(train_x, train_y, epochs=20, batch_size=10, validation_data=(val_x, val_y))
# ここでエラー

GPUを使用しない

ちなみにkeras-gpu,tensorflow-gpuがインストールされている環境でも
上記のエラー等があってGPUを使用したくない場合,kerasのimport前に 環境変数 "CUDA_VISIBLE_DEVICES"を"-1"とすればCPUで実行できるようです.

# GPUを使わない場合
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
import keras