SRGAN을 활용하여 고해상도 이미지를 생성하는 프로젝트를 진행하다가 GPU 메모리 오류를 마주했다.
( 해당 프로젝트 노트북 파일 :
https://github.com/YOOHYOJEONG/AIFFEL_LMS_project/blob/master/ex16/ex16_SRGAN.ipynb
)
아이펠 클라우드 환경에서 모델을 돌리면 GPU 메모리 걱정은 할 필요 없다고 생각했는데, 종종 메모리 오류를 마주한 적이 있었다. 그럴 때 마다 배치 사이즈를 줄이거나 동시에 가동 중인 파일을 모두 중단시키거나, 아니면 아예 새로운 노트북 파일을 만들면 해결이 됐었다.
하지만 이번에 마주한 GPU 메모리 에러는 이때까지 해 본 방법이 모두 통하지 않았다.
메모리 오류가 난 부분은
기존에 학습이 된 srgan 모델을 불러와서 이미지를 넣고 srgan을 이용해 고해상도 이미지를 생성하는 부분이었다.
위의 코드에서 apply_srgan에서 오류가 난 것을 볼 수 있다.
오류 메세지는 아래와 같다.
ResourceExhaustedError : OOM when allocating tensor with shape[1,3024,4032,64] and type float on /job:localhost/replica:0/task:0/device:gpu:0 by allocator gpu_0_bfc %09 [[{{node model_3/p_re_lu_26/relu_1-0-0-transposenchwtonhwc-layoutoptimizer}}]]
기존에 해 봤던 시도들로 해결이 되지 않아 주변에 도움을 요쳥했고
이미지의 사이즈가 너무 큰 경우에도 GPU 메모리 오류가 날 수도 있다는 말을 들었다.
그 말을 듣고 생각 해 보니 프로젝트를 진행하기 전, 실습을 할 땐 오류가 나지 않고 제대로 작동했었는데
프로젝트를 진행할 때 실습 환경과 달라진 거라곤 초고화질 사진(3024, 4032)을 인풋으로 넣은 것이었다.
이미지의 사이즈가 너무 크지 않은 사진(1866, 2449)으로 변경하여 모델에 적용했더니 GPU 메모리 오류없이 잘 작동했다!!!
앞으로 tensorflow GPU 메모리 오류가 나는 경우에는
1. 배치 사이즈를 줄이거나
2. 입력 데이터의 사이즈를 줄이는
방법 이 두가지로 기억하고 있어야겠다.
혹시나 또 다른 이유로 GPU 메모리 오류가 발생한다면 해당 게시물에 내용을 추가 해 놓을 것이다.