CUDNN 오류 : 회선 알고리즘을 가져 오지 못했습니다.


4

소스 컴파일 된 Tensorflow 빌드로 Keras에서 컨볼 루션 네트워크를 실행하는 데 문제가 있습니다. CUDA 10.0과 CuDNN 7.4를 사용하고 있으며 makefile 예제에서 확인한대로 모두 올바르게 컴파일되었습니다. conv net을 실행하지만 밀도가 높은 네트워크를 실행하지 않으면 이러한 오류가 발생합니다.

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.
 [[{{node conv2d_1/convolution}}]]
 [[metrics/acc/Mean/_169]]

CUDA 및 CuDNN에 경로를 내 경로에 직접 추가하려고 시도했지만 결과없이 TensorFlow를 다시 설치하고 다시 컴파일하려고했습니다. 이 시스템에 새로 설치되므로 충돌하는 버전에 문제가 없어야합니다.

import keras
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Flatten, Conv2D, MaxPooling2D, Dropout
from keras.datasets import mnist
import sys

def one_hot(data, num_categories):
    oh = np.zeros((len(data),num_categories))
    for i,entry in enumerate(data):
        oh[i, entry] = 1
    return oh


# import data
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# preprocess data
x_train = x_train.reshape( (60000,28,28,1) ) / 256
x_test = x_test.reshape( (10000,28,28,1) ) / 256
y_train = one_hot(y_train, 10)
y_test = one_hot(y_test, 10)

# build the model
model = Sequential()
input_shape=(28,28,1)
model.add(Conv2D(filters=32,
                 kernel_size=(3,3),
                 activation='relu',
                 input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2,2),
                       strides=(2,2)))
model.add(Conv2D(filters=32,
                 kernel_size=(3,3),
                 activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2),
                       strides=(2,2)))
model.add(Flatten())
model.add(Dropout(0.5))
model.add(Dense(units=256,
                activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(units=10,
                activation='softmax'))

# load model weight

# compile model
model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
model.summary()

# train
num_epochs = 20
if num_epochs != 0:
    # train the model
    model.fit(x_train, y_train,
              batch_size=32,
              epochs=num_epochs)

# evaluate model
score = model.evaluate(x_test, y_test)
print('\nScore: ', score)

내가 실행중인 코드는 전용 GPU가없는 랩톱에서 완벽하게 작동하지만 CUDA / CuDNN을 시작 하여이 데스크탑에서 실행하려고합니다. 이 문제를 진단하는 데 도움이 될 것입니다.

업데이트 : 소스에서 TF를 빌드 할 때 최신 버전이 아닌 기본 NCCL 사용과 관련된 오류가있는 것 같습니다. 최신 NCCL의 OS 독립적 버전을 설치하려고합니다. ldconfig는 NCCL을 나열하지만 라이브러리를 찾을 수 없습니다. 이로 인해 최신 NCCL로 소스를 빌드 할 수 없으므로 이것이 근본 원인인지 확인할 수 없습니다.


이 오류를 수정 했습니까?
user260826

고쳤어? @spicyramen, @BranchedOut?
enjal

그래, 내 옆에 2 문제, 잘못된 드라이버의 버전도 내 TF는 GPU의 모든 메모리를 사용하고 있었고, 난이 TF 구성의 GPU 활용을 제한하기 위해 필요한 따라서 실행이 동시 TF가 있었다
user260826는

답변:


1

다른 해결책으로 세 가지 이유로이 오류 메시지를 보았습니다.

1. 캐시 문제가 있습니다

나는 파이썬 프로세스를 종료하고 ~/.nv(linux 에서 디렉토리를 제거하고 rm -rf ~/.nv) 파이썬 프로세스를 다시 시작 하여이 오류를 정기적으로 해결 합니다. 왜 이것이 작동하는지 모르겠습니다. 아마도 두 번째 옵션과 적어도 부분적으로 관련이 있습니다.

3. 당신은 메모리 부족

그래픽 카드 RAM이 부족한 경우에도 오류가 표시 될 수 있습니다. nvidia GPU를 사용하면로 그래픽 카드 메모리 사용량을 확인할 수 있습니다 nvidia-smi. 이를 통해 사용중인 GPU RAM의 양 ( 6025MiB / 6086MiB거의 한계에 가까운 경우)과 GPU RAM을 사용하는 프로세스 목록을 읽을 수 있습니다 .

RAM이 부족한 경우 프로세스를 다시 시작하여 (RAM을 비워야 함) 메모리를 덜 사용하는 접근 방식을 취해야합니다. 몇 가지 옵션은 다음과 같습니다.

  • 배치 크기 줄이기
  • 더 간단한 모델 사용
  • 적은 데이터 사용
  • TensorFlow GPU 메모리 비율 제한 : 예를 들어, 다음은 TensorFlow가 RAM의 90 % 미만을 사용하도록합니다.
import keras
import tensorflow as tf

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.9
keras.backend.tensorflow_backend.set_session(tf.Session(config=config))

위의 항목과 함께 사용하지 않으면 모델 평가 속도가 느려질 수 있습니다.

3. CUDA, TensorFlow, NVIDIA 드라이버 등의 호환되지 않는 버전이 있습니다.

비슷한 모델 작업을 한 적이 없다면, 당신은 VRAM이 부족하지 않는 캐시가 깨끗한 지, 내가 다시 가서 가장 적합한 설치 가이드를 사용하여 CUDA + TensorFlow을 설정할 것 - 나는 다음으로 가장 성공을 거두었습니다 NVIDIA / CUDA 사이트 의 지침이 아닌 https://www.tensorflow.org/install/gpu 의 지침 .


그것은 분명히 내 문제를 해결했습니다. 나를 위해 문제는 # 3이었고, 모든 CUDA 관련 소프트웨어 재설치는
BranchedOut
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.