12-23 00:00
Notice
Recent Posts
Recent Comments
관리 메뉴

Scientific Computing & Data Science

[Artificial Intelligence / MXNet] MXNet 소개 본문

Artificial Intelligence/MXNet

[Artificial Intelligence / MXNet] MXNet 소개

cinema4dr12 2017. 6. 21. 22:01

by Geol Choi | 

MXNetCaffe, CNTK, TensorFlow, Theano, Torch, H2O 등과 같은 딥러닝 프레임워크 중 하나이다.

눈 여결 볼 것 중 하나는, AWS(Amazon Web Services)이 MXNet을 지원하게 되었는데 그 이유가 이 들 딥러닝 프레임워크 중 가장 확장 가능한(Scalable) 프레임워크라는 이유에서이다. 확장 가능하다는 것은, 계산 속도나 메모리 용량을 늘리기 위해 다중의 CPU 또는 GPU 활용하거나 컴퓨팅 머신을 자유자재로 늘릴 수 있다는 뜻이다. 또한 MXNet은 다양한 플랫폼을 지원하는데, 지원하는 플랫폼 종류에 대해서는 아래에 정리하여 살펴보도록 하겠다.

딥러닝 프레임워크를 선택하는 기준?

위에 언급한 딥러닝 프레임워크에도 알게 모르게 각 언어를 지원하는 프레임워크들이 다수 존재한다. 언제나 그렇듯이 새로운 언어이든 프레임워크이든 선택하게 될 때 우리는 어떤 기준으로 선택해야 할 지 고민이다.

많은 이유 중, 가장 중요하게 고려해봐야 할 요소는 다음 네 가지가 될 것이다:

(1) 확장 가능성

일반적으로 딥러닝에서 학습해야 할 데이터는 며칠 또는 몇 주가 걸리정도로 방대한 대용량 데이터이다. 이를 빠르게 처리하려면 다중의 GPU를 활용할 수 있는 기능이 필수적이며, 딥러닝 프레임워크에서는 없어서는 안 될 기능이다.

(2) 개발 속도

개발 속도는 아무래도 개발자의 익숙함에서 나온다고 생각된다. 개발자의 익숙함이라는 것은, 개발자가 평소 사용하는 언어를 이용하여 개발할 수 있느냐인데, 개발자가 많이 사용하는 언어를 지원하느냐가 딥러닝 프레임워크를 선택하는 기준이 될 수 있겠다. 그래서 많은 딥러닝 프레임워크들이 사용자를 확보하기 위해 개발자들이 많은 언어인 Python, C++, R 등을 지원한다. 아무리 성능이 좋거나 기능이 좋은 딥러닝 프레임워크라도 자신이 익숙한 언어를 지원하지 않는다면 아무래도 선택에 부담이 될 수 밖에 없을 것이다.

(3) 이식성

딥러닝 프레임워크는 모바일, 서버, 노트북 등 다양한 플랫폼에서 구동될 수 있다. 자신이 보유한 컴퓨터가 다소 성능이 좋지 않더라도 요즘에는 AWS, Google Cloud Platform, MS Azure 등 다양한 클라우드 컴퓨팅 환경이 있어 사용하는만큼의 비용을 지불하고 고성능의 컴퓨팅을 할 수 있게 되었다. 그래서, 다양한 플랫폼을 지원하느냐가 딥러닝 프레임워크를 선택하는 또하나의 기준이 될 것으로 생각된다.

(4) 다양한 모델지원

지도 학습(Supervised Learning), 비지도 학습(Unsupervised Learning), 강화학습(Reinforcement Learning) 등 다양한 머신러닝 알고리즘 모델이 존재한다. 또한 NLP, 이미지 인식 풀고자 하는 문제에 다양한 모델이 존재하는데, 최근에는 GANs(Generative Adversarial Networks)도 등장했으며, 필자가 주로 사용하는 모델인 회선신경망(Convolutional Neural Networks; CNN)도 있는데 아무튼 딥러닝 프레임워크가 자신이 사용하고자 하는 또는 풀고자 하는 문제에 대한 가장 적절한 모델을 지원하느냐도 선택의 중요한 기준일 것이다.

MXNet의 기원

MXNet은 CNN, LSTM(Long Short Term Memory), GAN 등 최근 핫한 딥러닝 모델을 지원하며, 사전학습된 다양한 CNN 모델 또한 지원한다. MXNet의 출발은 산업계가 아닌 워싱턴 대학교(University of Washington), 카네기 멜론대학교(Carnegie Mellon University) 등 학계의 연구자들로부터 시작되었다.

MXNet이 지원하는 개발 언어들?

MXNet은 두 개의 프로그래밍 스타일을 제공한다:

  • Imperative Programming : 우리가 작성하는 대부분의 코드는 이에 속한다.

  • Declarative(Symbolic) Programming : 이 프로그래밍 모델은 우선 함수를 추상적으로 정의하고 Placeholder라는 개념으로 변수를 정의한 후 실제 계산은 런타임에서 일어나도록(이를 바인딩이라고도 한다) 하게 하는 것이다.

이에 대해 좀 더 자세히 이해하기를 원한다면 여기를 참고하기 바란다. 이들 프로그래밍 모델에 대해 이해하는 것은 MXNet 사용에 많은 도움이 될 것이니 꼭 읽어보기를 권장한다.

그러면 MXNet이 지원하는 개발 언어들에는 어떤 것들이 있을까? 현재까지 지원되는 언어는 C++, R, Python, Scala, Julia, MATLAB, Go 그리고 심지어 JavaScript까지 지원하여 웹에서도 구현이 가능하다.

MXNet의 효율적 모델과 이식성

계산 효율성도 중요하지만 그만큼 중요한 것이 메모리 효율성인데, MXNet은 심층신경망 1000개 정도 사용할 때 메모리 4GB 밖에 차지하지 않는 효율적 메모리 모델을 가지고 있다. 이식성 또한 뛰어나서 다양한 플랫폼을 지원하는데 하나의 C++ 소스 파일에 핵심 라이브러리가 담겨져 있어 Android, iOS에서도 컴파일이 가능하며, JavaScript에서도 사용할 수 있으므로 웹브라우저에서도 돌아간다 (감동 ㅠㅠ).

MXNet의 확장성

주지하다시피 대용량의 고품질 데이터세트를 활용하는 것이 딥러닝의 핵심 성공 열쇠이다. MXNet은 보유한 GPU 만큼 성능을 끌어올릴 수 있는 뛰어난 확장성을 가지고 있어 대용량의 데이터를 다중의 GPU를 활용하여 병렬로 처리할 수 있어 높은 계산 효율성을 제공한다.



AWS는 MXNet의 자동병렬화 기능을 이용하여 Google이 개발한(GoogLeNet) 이미지 인식 모델인 Inception V3를 학습시킨 결과, GPU를 두 배 늘리면 속도가 두 배로 빨라지는 완벽한 효율성과 처리량 또한 GPU의 수와 같은 비율로 증가한 결과를 얻었다고 한다(여기 참고).



만약 간단하게 AWS에서 MXNet을 이용하려면, AWS Marketplace에서 MXNet AMI(Amazon Machine Images) 구입이 가능하다. 또는, EC2에서 직접 MXNet 개발 환경을 구축할 수도 있는데, 여기를 참고하면 된다.

AWS에서는 아직 구축해보지 않았는데, 해보는대로 블로그에 팁을 올리도록 하겠다.

아직까지 Google Cloud Platform에서는 MXNet을 지원하지 않는 것 같은데, 조만간 지원하지 않을까라는 개인적인 생각이 든다. 물론 공식적으로 지원하지 않아도 Google Computing Engine을 통해 직접 다운로드하여 구축할 수 있는 방법이 있지 않을까 생각된다. 이 또한 직접 해보고 조만간 블로그에 게재하도록 하겠다.

Comments