컴퓨터공학/Machine Learning

Batch Size와 학습 시간, 메모리 사용량의 관계

jimmy_AI 2022. 11. 6. 17:12
반응형

배치 크기가 커지면 학습 시간 및 GPU 메모리 사용량은 어떻게 될까요?

배치 크기가 커지면 학습 시간은 계속 줄어들까요?

GPU 메모리 사용량과는 어떤 관계가 있을까요?

 

우선, 제가 가진 학습 코드를 통해 간단하게 실험해본 결과는 다음과 같습니다.

 

Batch Size = 1

데이터가 약 89000개 정도이므로, 1 epoch 당 89000 스텝이 진행되고,

예상 학습 시간은 1시간 45분 정도였습니다.

 

모델 파라미터 + 데이터 1개 텐서 = 2207MB 정도의 메모리가 사용되는 것을 보았습니다.

 

 

Batch Size = 2

89000개의 절반인 약 45000 스텝 정도가 1 epch에 진행됩니다.

학습 예상 시간은 1시간 24분 정도로 약간 줄었으나,

Batch Size = 1인 경우에 비하여 절반으로 줄지는 않는 것으로 보입니다.

 

모델 파라미터 + 데이터 2개 텐서 = 2987MB 정도의 메모리가 사용되는 것을 보면

모델 파라미터에 1427MB, 데이터 1개 당 780MB 정도가 할당됨을 추측할 수 있습니다.

 

 

Batch Size = 4

1 epoch 당 89000 / 4 정도의 22300 스텝 정도가 진행되며,

예상 학습 시간은 약간 더 감소한 1시간 12분 정도로 측정되었습니다.

 

모델 파라미터 + 데이터 4개 텐서 = 4455MB 정도로 측정되었는데,

위에서 추측했던 식에 따른 결과는 4547MB로 약 100MB 정도의 오차가 있습니다.

 

반응형

 

Batch Size = 8

1 epoch 당 step 수는 11200 스텝 정도,

학습 소요 예상 시간은 약간 더 줄어든 1시간 4분 정도로 나타났습니다.

 

모델 파라미터 + 데이터 8개 텐서 = 7543MB 정도로 측정되었는데,

위에서 추측했던 식에 따른 결과는 7667MB로 역시 약 100MB 정도의 오차가 있습니다.

 

 

Batch Size = 12

step 수는 7500 스텝 정도까지 줄어들었지만,

예상 학습 소요 시간은 1시간 2분 정도로 아주 약간만 줄었습니다.

 

모델 파라미터 + 데이터 8개 텐서 = 11367MB 정도로 측정되었는데,

위에서 추측했던 식에 따른 결과는 10787MB로 여기서는 600MB 정도의 오차가 있습니다.

 

(참고 : 하드웨어 구조 상 8, 16, 32, 64 등의 2의 제곱으로 배치 사이즈를 설정하는 것이

효율적인 것과 관련이 있어보입니다. 여기서는 2의 제곱이 아니기에 낭비되는 메모리가

큰 편일 수 있다고 생각됩니다. 참고용으로 관련 글의 링크를 첨부합니다.)

 

What is the advantage of keeping batch size a power of 2?

While training models in machine learning, why is it sometimes advantageous to keep the batch size to a power of 2? I thought it would be best to use a size that is the largest fit in your GPU memo...

datascience.stackexchange.com

 

 

이러한 현상의 이유는 무엇일까요?

배치 크기가 커지면 행렬 연산의 병렬화의 이점을 통하여 그래디언트 계산 및 

가중치 업데이트 과정 등에서 효율적이라 전체 학습 시간을 줄일 수 있습니다.

그러나, 배치 크기가 2배라고 시간에서 2배의 이득이 생기기는 어려운데 대략적인 이유는

일정 수준 이상의 데이터 양에 대해서는 GPU core의 capacity 한계, CPU-GPU 간 병목 등의

현상때문인 것으로 추측됩니다.

 

이에 대한 참고용 토론 글의 링크는 아래와 같습니다.

 

Why training speed does not scale with the batch size?

I am surprised that increasing batch size does not increase the total processing speed on a GPU. My measurements: batch_size=1: 0.33 sec/step batch_size=2: 0.6 sec/step batch_size=3: 0.8 ...

stackoverflow.com

 

 

Batch Size가 큰 것이 무조건 좋을까요?

Batch Size가 너무 작으면 메모리를 효율적으로 사용하기 힘들고 시간이 많이 소요되는 등

단점이 있어 충분한 미니 배치 크기를 채택하는 것이 필요합니다.

 

그러나, Batch Size가 너무 크면 배치 간 데이터들의 분산이 작아져 local optimum에서

빠져나오기 힘든 등의 단점이 있어 항상 최적의 성능을 보장하지는 않는 듯합니다.