오토튜너 연구

매니코어OS
이동: 둘러보기, 검색

연구목표

인공지능을 구현하는데 가장 많이 쓰이고 있는 신경망회로를 이용한 기계학습은 1960년대에 주목받는 기술이었으나 당시 컴퓨터 연산능력의 한계로 잠시 답보상태에 빠졌다가 최근 매니코어 시스템에 의해 얻어지는 연산 능력의 증가로 비약적인 발전을 이루었다. 

증가된 연산 능력을 바탕으로 여러 층을 가진 신경망인 Deep Learning 기법을 활용하여 복잡한 기능을 구현할 수 있는 신경망들이 개발되는 한 편, TensorFlow, Caffe, Torch, Theano, IBM DL platform, Neon, Intel DL Framework 등 신경망을 표현하기 위한 Tensor 연산을 구현하는 도구들이 많이 공개되었는데 주로 사용자들이 신경망을 쉽게 모델링해서 사용할 수 있는 인터페이스를 제공하고 있으며 대부분의 경우 신경망의 훈련속도를 가속화하는 방법으로는 GPU를 위한 가속라이브러리를 사용하고 있다.

본 연구에서는 매니코어 시스템에 일반 병렬 프로그래밍 모델을 적용하여 신경망의 연산들을 구현하고, 신경망의 구조과 매니코어 시스템의 특성에 맞는 효과적인 병렬화 방안을 제안하며 이를 구현하는 오토튜너를 제작한다.

신경망 학습 알고리즘의 병렬화 연구

신경망을 구현하는데 있어서 가장 핵심이 되는 보편적인 알고리즘은 Gradient Descent 알고리즘이다. 이 때 Gradient 를 계산하는 backpropagation 연산은 신경망의 레이어 간에는 종속성이 있지만 같은 레이어에서의 연산은 서로 독립적인 연산으로 병렬성을 많이 가지고 있다. 이러한 병렬성을 구현하는 방법으로는 크게 data parallelism 과 model parallelism 을 활용하는 방법이 있다. 

Data Parallelization in backpropagation 

data parallelization 에서는 다음 그림과 같이 각각의 코어가 서로 다른 트레이닝 데이터에 대하여  backpropagation 을 적용하는데 동시에 연산하는 트레이닝 데이터의 갯수가 코어 갯수만큼 많을 때 코어를 모두 활용할 수 있다.


Autotune-Fig1.png 

Model Parallelization in backpropagation 

model parallelization 에서는 다음 그림과 같이 여러 개의 코어가 하나의 트레이닝 데이터에 대하여  backpropagation 연산을 나누어서 적용한다.

Autotune-fig2.png

다음의 실험은 57-core 1.1 GHz Xeon Phi 에 fully connected neural network를 OpenMP로 구현하고 MNIST 필기체 숫자 인식 데이타셋에 Stochastic Gradient Descent 방식으로 학습시킬 때의 (연산 시간 x 코어갯수) 를 코어갯수를 늘려가며 실험해 본 것이다. 즉 이상적인 linear speedup 일 때 수평선으로 나타나는 그래프이다. 


Autotune-fig3.png

신경망 연산의 병렬화를 위하여 다음과 같은 방안들을 연구한다.

  • Layer pipelining
  • Data partitioning
  • Prefetching
  • Vectorization 
  • Synchronization Elimination 

신경망의 연산 병렬화는 신경망의 구조와 병렬 프로세서의 구조에 따라 최적화될 수 있으나 대부분의 머신 러닝 도구들에서는 이와 같은 상세 설계는 사용자가 조절할 수가 없다. 본 연구에서는 딥 러닝 신경망 학습의 병렬화 방안들을 일반 병렬 프로그래밍 모델로 제안/구현하고 매니코어 프로세서 상에서의 성능 분석 모델을 개발한다. 

신경망 병렬화 오토튜너

신경망의 학습 알고리즘은 같은 연산을 반복적으로 수행하기 때문에, 연산 수행의 프로파일 결과물을 활용하여 연산을 최적화해두는 것이 효과적이다.  다음의 왼쪽 그림은 컴파일러에 의한 성능 최적화를,  오른쪽 그림은 프로파일 기반의 오토튜너에 의한 성능 최적화 코드 생성을 보이고 있다.

본 연구에서는 전 단계 연구 결과인 성능 모델과 수행할 코드의 프로파일 정보를 결합하여, 사용하는 신경망의 특정한 구조과 매니코어 프로세서 구조에 적합한 학습 알고리즘의 병렬화 방안을 선택하는 오토튜너를 구현한다. 

Autotune-fig5.png      Autotune-fig6.png

연구 결과물 

MNIST 필기체인식 Neural Network 구현 on Xeon Phi  

- Fully Connected NN : https://github.com/lunahc/Machine_learning

- Convolutional NN : https://github.com/lch01387/Convolutional_Neural_network