2019년 7월 22일 월요일

[Keras]OOM (Overflow Of Memory) 문제, Keras model 메모리 사용량 계산

* Keras 및 GPU 를 활용하여 머신러닝을 할 때 GPU의 메모리 크기 한계로 인해 학습을 제대로 할 수 없는 문제가 발생함

* Resource exhausted: OOM when allocating tensor with shape[ ]
과 같은 에러메시지가 나오면서 프로그램이 돌지 않음

* 우선은 Batch size를 줄여서 학습을 시키면 메모리 문제가 어느정도 해결 됨

* 하지만 Resnet50, 101 등과 같이 인공지능 신경망이 깊어지면 model의 크기가 커지게 되어 batch size를 극단적으로 줄여야 하는 문제가 발생함

* Keras의 model 생성을 위한 메모리 필요량 계산 방법

한 layer에 필요한 메모리 양: (image_width x image_height x feature_maps) * batch_size
이므로 모든 layer에 대해 위와 같이 계산해주고 더해주면 됨

*example (모델의 일부분만 가져옴)


input_1: 384*200*1 = 76800
batch_normalization_1: 384*200*1 = 76800
activation_1: 384*200*1 = 76800 (activation도 계산을 해줘야하는지는 확실하지 않음)
conv2d_1: 384*200*16 = 1228800

다 합치면 76800 + 76800 + 76800 + 1228800 = 1459200
한 파라미터당 4 byte 이므로
1459200 * 4 (byte) = 5836800 (byte)

batch_size가 64일 때: 5836800 (byte) * 64 (batch_size) = 373555200 (byte) ≒ 356.25 MB
forward 및 backward 계산을 해주므로 총 메모리 양: 356.25 MB * 2 = 712.5 MB

참조: http://cs231n.github.io/convolutional-networks/#case


댓글 없음:

댓글 쓰기