공부 목적으로 아래 링크 글을 번역해보았다. 발번역이니 아래 링크 참조 바랍니다.
http://cs231n.github.io/convolutional-networks/#computational-considerations
CNN 모델을 만들 때 가장 주의해야 할 병목현상은 바로 메모리다. 요즘 많은 GPU의 메모리는 3/4/6GB이고, 좋은 GPU는 128GB의 메모리를 가진다. 다음의 세 가지 소스로부터 메모리를 아껴보자.
1. Intermediate volume size
- ConvNet 내 모든 층의 activations 개수와 gradients의 개수
- 주로, 대부분의 activations는 ConvNet의 앞쪽 layer에 있다.
- Activations는 backpropagation에 필요하기 때문에 유지되지만, Test 시에만 ConvNet을 실행하게 구현한다면 원칙적으로 현재 activations만을 저장하고 아래의 layer에서 이전 activations을 버림으로써 많은 메모리를 아낄 수 있다.
2. Parameter size
- 네트워크 파라미터 개수 + 역전파동안의 gradients 개수 (+ step cache)
→ 파라미터를 저장하기 위한 메모리는 적어도 3배는 되어야 한다.
3. 모든 ConvNet 구현은 여러가지 잡다한 메모리까지 갖고 있어야 한다.
- 이미지 데이터 배치, augmented 버전 등
일단 activations, gradients, misc를 위한 값의 대략적인 개수를 추정하였다면, GB 단위로 변환해보자. 그 값에 4를 곱해 raw number of bytes를 구하고 (float: 4B, double: 8B), 1024로 나눠가며 단위를 KB→MB→GB 단위로 변환한다. 이때 네트워크가 돌아가지 않는다면 batch size를 줄인다. (대부분의 메모리는 activations에 의해 소비되기 때문)
'딥러닝' 카테고리의 다른 글
Continual Learning (2) Deep Generative Replay 논문 번역 (0) | 2021.01.07 |
---|---|
적은 데이터로 딥러닝 잘 학습하기 (1) | 2020.11.28 |
[STR] What Is Wrong With Scene Text Recognition Model Comparisons? Dataset and Model Analysis 논문 분석 (0) | 2020.11.04 |