구글 브레인 팀에서 2019년 7월에 아카이브에 업로드한 논문으로서, 데이터 전처리 파이프라인이 뉴럴넷의 학습 속도의 버틀넥이 되는 경우에 학습 성능의 저하 없이 전처리의 연산량을 줄이는 방법을 제안하였다.
Introduction
Motivation
일반적인 뉴럴넷 학습을 위한 파이프라인은 상기 그림과 같은 과정을 거친다. 위의 과정 중 처음부터 Batch 까지의 과정이 데이터 파이프라인으로 일반적으로서 CPU에서 여러개의 병렬 프로세스(=worker)와 버퍼를 통해 구현되고, 그 이후의 과정은 GPU 상에서 구현된다. 기존에는 GPU에서 inference를 하고 backward computation을 하는 과정이 전체 학습 루프에서 대부분의 차지하였으나, 최신 GPU에서의 뉴럴넷 관련 연산 최적화 및 전용 하드웨어 개발 등으로 그 비중이 점점 줄어드는 추세이다. 이에 따라, 데이터 파이프라인이 전체 학습 속도의 버틀넥이 되는 경우가 발생하고 있다. (Figure 2(a))
상기 그림에서 Upstream은 데이터 전처리 파이프라인을 의미하고, Downstream은 inference 및 backpropagation 관련 연산을 의미한다. Figure 2(a)의 경우와 같이 데이터 전처리 파이프라인에 걸리는 시간이 GPU 연산에 걸리는 시간에 비해 훨씬 긴 문제를 해결하기 위해서는 데이터 전처리를 더 빠른 속도로 처리하거나, 동일을 성능을 달성하기 위해 필요한 데이터 전처리 파이프라인 연산량을 줄이는 방법이 있다.
본 논문에서는 데이터 전처리 파이프라인의 총 연산량을 줄이는 방법에 대해 제안한다. 구체적으로, 데이터 파이프라인의 출력 값을 여러번 재사용하는 방식으로, 한번의 데이터 처리로 여러 번의 downstream 연산을 수행한다. 이에 따라, 한번의 iteration에서 데이터 파이프라인에 의해 idle 되는 시간을 줄이게 되어 전체 학습 시간을 단축 시킬 수 있다. 제안 방법에서는 데이터를 여러번 재사용하는 알고리즘을 data echoing이라 명명하고, 재사용하는 횟수를 echoing facter라고 한다.
Contribution
- Data echoing 알고리즘으로 다양한 모델 및 데이터셋에서 경쟁력 있는 error rate를 달성하는데 드는 upstream 연산량을 효과적으로 줄일 수 있음을 보여주었다.
- data echoing의 효과는 학습 파이프라인에 repeat stage를 삽입하는 위치에 큰 영향을 받는다는 것을 보여주었다.
- data echoing은 echoing 후 추가적인 shuffling을 통해 이득을 볼수 있지만, 반드시 필요한 것은 아니다.
- Date echoing에 대한 일반적인 예측과는 달리, 이 알고리즘을 적용한 경우, echoing을 사용하지 않고 학습한 베이스라인과 동등한 성능을 달성하였다.
Proposed Method
Data Echoing
Data echoing은 학습 파이프라인에 이전 단계의 출력을 반복하는 repeat stage를 삽입하는 방식으로 구현된다. 만일, echoing stage의 출력을 shuffling 하는 경우, 추가적인 메모리가 필요하다.
만약, repeating 연산량의 매우 작고, 이를 병렬화 할 수 있다고 가정하면, 한번의 학습 파이프라인 처리에 걸리는 평균 시간은 다음과 같다.
위 수식에서 t_upstream은 업스트림에 걸린 시간, t_downstream은 다운스트림에 걸리는 시간, e는 echoing factor이다. 여기에 이 연구의 동기였던 가정인 t_upstream ≥ t_downstream을 가정한다. 이 때, upstream-to-downstream 시간 비율을 R = t_upstream / t_downstream 라고 하면, 학습의 1 iteration에 드는 시간은 e가 1에서 R이 될때 까지 증가해도 t_upstream로 contant하게 유지된다. 따라서, e가 R 이하 인 경우에는 추가되는 학습 시간이 없다. 참고로, 정수가 아닌 e는 echoing을 하는 데이터 아이템을 확률적으로 랜덤하게 선택함으로서 달성할 수 있다.
Data echoing을 하는 위치는 파이프라인의 다양한 위치에 삽입될 수 있다. 이 때 다음과 같은 요소를 고려해야 한다.
- Echoing before or after batching
Batching 이전에 echoing을 한다는 것은 각 데이터 아이템 레벨에서 반복과 셔플링을 하는 것으로, 이 방식은 근처의 배치들 간이 다를 확률은 늘어나지만 하나의 배치안에 동일한 데이터 샘플이 들어갈 확률이 존재한다. 본 논문에서는 Batching 이전 echoing을 example echoing, batching 이후 echoing을 batch echoing이라 한다.
- Echoing before or after augmentation
data augmentation 이전 단계에서 echoing을 하는 것은 반복된 데이터에 서로 다른 변환이 이뤄져 fresh data를 사용하는 것과 유사한 효과를 얻을 수 있다. dropout은 반복된 데이터가 서로 다른 형태를 가지게 하는 유사한 효과를 낼 수 있다.(data augmentation을 사용하지 않거나, echoing after data augmentation의 경우에도 효과를 얻을 수 있다)
Data echoing은 echoing 이후 적용되는 shuffling 버퍼의 크기에도 영향을 받는다. 버퍼의 크기가 클 수록 반복된 데이터가 더 많이 섞이게 되고, 데이터를 랜덤하게 뽑는 효과가 커진다.
Experiment
Data echoing 알고리즘에 대한 실험은 아래 표의 세가지 종류의 태스크들에 대해 수행 되었다. 각 태스크 마다 대표적인 모델들을 정해진 학습 iteration 동안 최적의 하이퍼 파라미터를 찾아서 그 성능을 Target으로 삼았다. 모든 경우에 Upstream 연산시간이 Downstream 연산시간보다 오래 걸리는 것은 아니고, 또한, 이 시간은 학습 코드의 구현에 따라 크게 달라진다. 따라서, 본 실험에서는 연산 시간이 아닌 동일한 성능에 도달하는데 필요한 fresh example의 수를 measure로 삼았다.
다양한 실험에 의한 결과는 다음과 같다. 각 실험을 위한 하이퍼파라미터는 quasi-random 서치를 통해 목표치에 도달한 모델 중 최소 fresh sample을 사용한 값을 사용하였다.(각 태스크마다 총 5번의 서칭을 통해 얻은 min, max 값의 bar를 그래프에 표시함)
- Data echoing can reduce the number of fresh examples required for training
- Data echoing can reduce training time
- Data echoing can be useful up to a reasonable upper bound on the echoing factor
- Data echoing as batch size increases
- Data echoing performs better with more shuffling
- Data echoing does not harm predictive performance
Conclusions
본 논문은 뉴럴넷을 학습 시킬 때, 데이터파이프 라인이 버틀넥이 되는 경우, 매우 유용한 테크닉을 제안하고, 이에 대한 다양한 실험결과를 제공하였다.
Share article