web-dev-qa-db-ja.com

cudnnハンドルを作成できませんでした:CUDNN STATUS INTERNAL ERROR

python 3.でmachinelearingを作成しようとしていますが、コードをコンパイルしようとしています。Cuda10.0/cuDNN 7.5.0でこのエラーが発生しました。誰か助けてくれますか?

RTX 2080

現在:Keras(2.2.4)tf-nightly-gpu(1.14.1.dev20190510)

Cudnnハンドルを作成できませんでした:CUDNN_STATUS_INTERNAL_ERROR

コードエラー:tensorflow.python.framework.errors_impl.UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.

これが私のコードです:

model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(50, 50, 1)))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Flatten())
model.add(Dense(1, activation='softmax'))

model.summary()

model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])
model.fit(x, y, epochs=1, batch_size=n_batch)

Shape [24946,32,48,48]でテンソルを割り当て、アロケータGPU_0_bfcによって/ job:localhost/replica:0/task:0/device:GPU:0にfloatと入力すると、OOM

4
007fred

Tensorflow 2.0、CUDA 10.0、CUDNN 7.5を使用すると、以下が機能しました。

gpus = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(gpus[0], True)

古くなったTensorflow 1.x構文を使用する他のいくつかの回答(ここではvenergiacによる回答など)があります。最新のテンソルフローを使用している場合は、ここで提供したコードを使用する必要があります。

次のエラーが発生した場合:

Physical devices cannot be modified after being initialized

次に、gpus = tf.config ... tensorflowをインポートする直下の行、つまり.

import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(gpus[0], True)
0
Roko Mijic

Tensorflow 2.0を使用している場合は、Rokoの回答が機能するはずです。

メモリの正確な量を制限したい場合(例:1024MBまたは2GBなど)、GPUメモリの使用を制限する別の方法があります。

このコードを使用してください:

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
  try:
    tf.config.experimental.set_virtual_device_configuration(gpus[0], [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=1024)])
  except RuntimeError as e:
    print(e)

このコードは、最初のGPUのメモリ使用を最大1024MBに制限します。必要に応じて、gpusのインデックスとmemory_limitを変更するだけです。

0
starriet