본문 바로가기
딥러닝\머신러닝/이미지분석

[pytorch] 이미지 분석에 필요한 GPU 메모리 정도를 확인해보기

by 인포메틱스 2022. 7. 5.
반응형

 

이미지 분석을 본격적으로 진행할 때, 혹은 해보고 싶을때, 고민되는 부분은 GPU를 어떤것을 구매해야하는가 입니다.

 

어떻게 GPU를 맞춰야할지 주변에 물어볼수도 없는 상황이 발생할수도 있습니다.

 

대부분의 이미지 분석하시는 돈 많은 렙들은 그냥 비싼거 사서 널널하게 쓰는 경우가 많고, 실제로 여쭤보면 자세히 모르시는 경우가 많습니다(알아도 안알려주는 경우겠죠? 아마?).

 

일단 알아두셔야하는 부분은 GPU에서 중요한 부분은 cuda개수가 있습니다. cuda를 예를 들어 설명하자면 많은 양의 계산을 할때 똑똑이 4명보다 덧셈뺄샘 할줄하는 초딩들을 이용하여 하나하나 계산하는것이 편합니다. 이때 초딩들이 cuda라고 생각하시면되고, 똑똑이의 경우 cpu라고 생각하시면 됩니다.

 

그리고 중요한 부분은 GPU메모리 부분입니다. GPU메모리의 경우 모델을 학습시킬때 필요합니다. 이번 포스팅은 public 데이터를 이용하여 모델을 제작할 때 GPU 메모리를 얼마만큼 이용하는지 알아보는 실험을 하도록 하겠습니다.

 

 

1. Data Preprocessing

 Dataset의 경우

https://zenodo.org/record/1214456#.YsJNeXZByUl

 

100,000 histological images of human colorectal cancer and healthy tissue

Data Description "NCT-CRC-HE-100K" This is a set of 100,000 non-overlapping image patches from hematoxylin & eosin (H&E) stained histological images of human colorectal cancer (CRC) and normal tissue. All images are 224x224 pixels (px) at 0.5 microns per p

zenodo.org

여기서 공개한 데이터를 이용하겠습니다(이중에서 10만개의 Normalization된 이미지).

 

데이터들의 용량은 다음과 같습니다.

 

 

13G정도가 됩니다.

 

안에 9가지 class로 나누어진 데이터가 있습니다(ADI, BACK, DEB, LYM, MUC, MUS, NORM, STR, TUM).

 

각 폴더에 데이터들의 분포는 다음과 같습니다.

 

outlier데이터의 경우 조직의 경계선일 가능성이 있습니다. 뭐 데이터들의 전체 평균 값을 계산해보면 141kb로 나옵니다. 

 

2. 실험시작! 공용, 전용 메모리가 얼마만큼 잡아 먹는지

그리고 본격적으로 모델을 돌릴건데, resnet50을 이용할거고, batch size = 32, 64, 128, epochs = 10, 20, 30 으로 진행해보겠습니다(막상 실험해보니 epoch와 메모리의 관계성은 없는것 같습니다.).

 

batch_size, epochs =  32, 10 (0.072)

 

batch_size, epochs = 64, 10 (0.055)

batch_size, epochs = 128, 10 (0.464)

batch_size, epochs = 256, 10 (0.041)

 

여기까지 종합해 보았을 때, 뭔가 수학적으로 계산이 될까 싶어서 정리해보니.

  32 64 128 256
GPU전용/공용 3/0.1 4.0(+1)/0.2 6.1(+2.1)/0.5 10.4(3.9)/0.8

공용 메모리의 경우 약 두배씩 오르는 것처럼 보이고, 전용 메모리도 +1, +2, +4(약) 이런식으로 올라가네요

(원래 juypter에서 restart를 누르지 않고 전용, 공용메모리 데이터를 측정했는데, 혹시나 해서 다시해보니 데이터가 달라져서 다시 측정하였습니다.)

 

여기까지가 모델을 제작할때 사용되는 메모리입니다.  생각보다 메모리를 적게 사용하는것을 알 수가 있습니다. 그러나 모델을 제작하고 확인하는데 까지 

 

여기서 모델만 만들고 끝이 아니라 적용하는데 까지 걸리는 메모리를 확인해봐야하는데요.

 

 메모리가 가장 많이 먹는 방법을 사용해보니 batch = 32일경우 1GB가 더 먹는 것을 볼 수 있었습니다.

 

3.결론 

 실제 모델을 만들기 전에 전용메모리를 600~700M 정도 사용이 되었기 때문에 실제적으로 2.3Gb를 사용한것과 다름이 없습니다.

 

실험이후에 epochs을 40이상정도로 늘렸을 경우 전용메모리가 700정도 올라가는것을 확인했기 때문에 epoch을 많이 늘리실 경우에는 참고 하시면 될 것 같습니다.

 

1. GPU전용메모리는 batch size가 주로 많이 잡아먹는다. 

2. Epoch의 경우 40 이상일 경우 700Mb이상의 전용 메모리를 먹는다. (10 이하일 경우 크게 상관이 없는듯)

3. 모델 제작후에 적용 과정에도 (5000*5000 pixel 기준 patch별 색으로 annotation) 약 1Gb정도 든다.

728x90
반응형

댓글