딥러닝 모델을 만들고 훈련시키는 과정에서 컴퓨팅 자원으로 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
'IT' 카테고리의 다른 글
리눅스 서버 아이디 만들기 (0) | 2020.12.06 |
---|---|
리눅스 htop -swap파일 꽉찼을때(스왑 늘리기) (0) | 2020.12.05 |
(autokeras)AttributeError: 'google.protobuf.pyext._message.RepeatedCompositeCo' object has no attribute 'append' (0) | 2020.06.11 |
주피터 노트북(ipynb)파일 파이썬 파일(.py)로 변환 (0) | 2020.06.03 |
뇌 MRI preprocessing Tools 간단 소개 (뇌 MRI 전처리) (0) | 2020.05.12 |