본문 바로가기

IT

에러 해결 : Failed to get convolution algorithm. This is probably because cuDNN failed to initialize

딥러닝 모델을 만들고 훈련시키는 과정에서 컴퓨팅 자원으로 CPU를 활용하는것보다 GPU를 활용하는것이 훨씬 속도가 빠르다. 

 

하지만 gpu를 이용하다보면 이따금씩 만나는 에러메세지가 있다.

 

Failed to get convolution algorithm. This is probably because cuDNN failed to initialize~

 

이 메세지를 구글링해보면 여러 커뮤니티에서 질문과 답을 주고 받은 내용들이있다.

tensoflow 버젼을 바꿔라, conda 에서 CUDA 버젼을 어떻게해라.. 등등 

 

이런 다양한 메세지들을 시도해봣지만 결과는 달라지지 않았다.

 

결론적으로는 GPU memory와 연관이 있다. 

 

나는 멀티GPU를 사용하고있다.

기본적으로 keras는 멀티 GPU사용시 모든 물리적 GPU를 다 잡고 첫번째 GPU부터 사용하는데 이것이 다른 작업이랑 중복이 되면 아무리 2번 GPU 3번 GPU가 놀고 있다고 해도 에러가 뜬다.

 

이를 해결하기 위해 아래 tensorflow 공식 홈페이지의 GPU파트를 자세히 살펴보니 해결법이 있었다.

import tensorflow as tf 
 
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
    # 텐서플로가 세 번째 GPU만 사용하도록 제한
    try:
        tf.config.experimental.set_visible_devices(gpus[2], 'GPU')
    except RuntimeError as e:
        # 프로그램 시작시에 접근 가능한 장치가 설정되어야만 합니다
        print(e)

위의 코드는 GPU를 지정해주어 작업들이 겹치지않게 지정해주는 코드이다.

만약 싱글 GPU를 쓰는데 저 에러메세지가 나왔다면 

 

아래의 코드를 시도해 볼 수 있겠다.

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
    try:
        # Currently, memory growth needs to be the same across GPUs
        for gpu in gpus:
            tf.config.experimental.set_memory_growth(gpu, True)
        logical_gpus = tf.config.experimental.list_logical_devices('GPU')
        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
    except RuntimeError as e:
        # Memory growth must be set before GPUs have been initialized
        print(e)

 

https://www.tensorflow.org/guide/gpu?hl=ko

 

GPU 사용하기  |  TensorFlow Core

Note: 이 문서는 텐서플로 커뮤니티에서 번역했습니다. 커뮤니티 번역 활동의 특성상 정확한 번역과 최신 내용을 반영하기 위해 노력함에도 불구하고 공식 영문 문서의 내용과 일치하지 않을 수

www.tensorflow.org