본문 바로가기

딥러닝

CNN Computational Considerations

공부 목적으로 아래 링크 글을 번역해보았다. 발번역이니 아래 링크 참조 바랍니다.

http://cs231n.github.io/convolutional-networks/#computational-considerations

 

CS231n Convolutional Neural Networks for Visual Recognition

Table of Contents: Convolutional Neural Networks (CNNs / ConvNets) Convolutional Neural Networks are very similar to ordinary Neural Networks from the previous chapter: they are made up of neurons that have learnable weights and biases. Each neuron receive

cs231n.github.io

 

 

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→MBGB 단위로 변환한다. 이때 네트워크가 돌아가지 않는다면 batch size를 줄인다. (대부분의 메모리는 activations에 의해 소비되기 때문)