원문 : Battle of the Deep Learning frameworks — Part I: 2017, even more frameworks and interfaces


딥러닝 프레임워크 관련 2017년의 변화들을 정리한 글이 있어 번역해 본다.

딥러닝 지형은 계속 변화하고 있다. Yoshua Bengio가 이끄는 MILA의 Theano는 처음으로 가장 광범위하게 적용된 딥러닝 프레임워크였지만 상황이 변화했다. 2017년 9월 MILA는 마지막 릴리즈 후 2018년에는 새로운 개발을 하지 않겠다고 선언했다. 이 뉴스는 놀랍지 않았다. 과거 수년간, 주로 대형 테크회사들에 의해 개발되고 지원되는, 파이썬기반 오픈소스 딥러닝 프레임워크들이 소개되었고 몇몇은 큰 인기를 끌었다.

State of open source deep learning frameworks in 2017

오픈소스 딥러닝 프레임워크 2017



현재, 깃헙의 스타, 포크수 스택 오버플로우의 활동들을 기반으로 볼 때 구글의 텐서플로우가 가장 많이 사용되는 딥러닝 프레임워크로 보인다. 하지만 다른 프레임워크들도 여전히 많은 사용자들을 보유하고 있다. 이 중 가장 중요하게 언급해야 할 내용은 PyTorch의 성장일 것이다. PyTorch는 페이스북에 의해서 2017년 1월에 소개되었다. PyTorch는 Torch 프레임워크(C로 개발되고 Lua로 감싸진)의 한 부분으로 Torch 바이너리를 GPU가속이 가능한 파이썬코드로 감싼 모습이다.

PyTorch의 인기비결은 GPU 가속, 효율적인 메모리사용과 함께 동적 컴퓨팅 그래프를 사용한다는 점이다. 동적 컴퓨팅 그래프는 Chainer와 같은 다른 딥러닝 프레임워크에서도 이미 사용되었지만 잘 알려지지는 않았다. 동적 그래프를 사용할 때 그래프는 전통적인 방식(define and run)과 달리 실행 단계에서 정의된다. (defined by run) 이는 특히 텍스트와 같은 비구조화된 형식의 데이터가 다양한 형태로 입력되는 환경에서 효율적이다.

PyTorch dynamic computational graph - source: http://pytorch.org/about/



다른 테크 자이언트들 또한 그저 앉아만 있지는 않았다. 마이크로소프트는 딥러닝 프레임워크 CNTK를 내부적으로 개발했고 2.0 버전을 2017년에 출시했다. (이름을 Microsoft Cognitive Toolkit이라는 이름으로 바꾸었다.) 또 2017년에 페이스북은 잘 알려진 Caffe 프리임워크의 뒤를 잇는 Caffe2를 출시했다. Caffe 프레임워크는 Berkely Vision and Learning Center에 의해 개발되어 커뮤니티, 컴퓨터 비전에의 적용, 모델 Zoo (여러 Pre-trained 모델) 등에서 여전히 매우 있기있는 프레임워크이다. 단, Caffe2는 아직 Caffe의 자취를 쫓아가지는 못한 것으로 보인다.

MS와 아마존의 지지를 받고 있는 MXNet의 경우, 처음 딥러닝 프레임워크로 소개되었을 때 사람들은 “R용 딥러닝 프레임워크 아닌가?”라는 반응을 하곤 했다. 맞는 말이지만 실제로 MXNet은 R과 함께 C++, Python, Javascript, Go 까지 많은 언어를 지원한다. 그리고 MXNet은 그 확장성과 성능에서 특히 눈에 띈다. (파트2 - 속도 등 관점에서 딥러닝 프레임워크 비교글에서 다시 다루어질 것이다.)

지금까지 언급한 것들은 여러 프레임워크들 중에서 일부이다. 다른 오픈소스 딥러닝 프레임워크는 Deeplearning4j, Dlib (C++기반) 등이 있다. 2017년에는 구글의 딥마인드에서 Sonnet (Tensorflow를 기반으로 한 OOP library-Tensorflow 블로그 참조 )을 릴리즈했고 H2O.ai, Spark 등도 또한 언급할 만 하다.

이들 프레임워크들 다음으로, 상이한 여러 프레임워크를 다시 감싸는 인터페이스들도 있다. 이 중 가장 잘 알려졌고 널리 사용되는 인터페이스는 의심의 여지없이 Keras 이다. Keras는 구글의 딥러닝 연구원인 Francois Chollet에 의해 파이썬으로 쓰여진 하이레벨 딥러닝 API이다. 2017년에 구글은 텐서플로우를 위한 하이레벨 API로 Keras가 선정되었다고 발표하였다. 이는 다음 텐서플로우 릴리즈에는 Keras가 포함될 것이라는 것을 의미한다. Keras는 텐서플로우와 함께 Theano나 CNTK를 백엔드로 사용할 수 있다.

Keras를 이용한 간편한 모델생성 — source: https://github.com/keras-team/keras



Keras는 여러게의 적층된 레이어로 딥러닝 모델을 간단히 생성할 수 있다는 점에서 매우 강력하다. 사용자는 Keras를 사용할 때 레이어 내부의 수학연산을 하지 않아도 된다. 이는 빠른 프로토타이핑 환경에서 매우 이상적일 것이며 Kaggle 경쟁에서도 또한 매우 인기있다.

그래서 사용자들은, 한편으로 간단한 고성능 딥러닝 모델을 쉽게 만들 수 있는 하이레벨 Keras API를 가지고 있고, 로 레벨에서는 보다 유연한 모델생성을 위한 텐서플로우를 가지고 있다. 예상할 수 있듯이 다른 경쟁자들도 가만히 있지는 않는다. 2017년 10월, 마이크로소프트와 아마존 AWS는 Glouon API를 공동으로 선언했다. Gluon은 파이썬기반으로 MXNet을 감싸는 딥러닝 인터페이스이고 곧 CNTK도 포함할 것이다. AWS는 AI의 민주화를 위해 Gluon이 모든 딥러닝 프레임워크를 강력하게 서포트한다고 선언하지만, Kears와는 직접적인 경쟁관계가 될 것이다.


Gloun으로 convolutional 레이어와 dense 레이어 적층하고 파라미터 초기화하기



놀랍게도, 현재 텐스플로우의 가장 강력한 경쟁자는 PyTorch로 보인다. PyTorch에 대한 커뮤니티의 관심이 증가한 이후에 - 예를 들어 최근 Kaggle competition과 연구논문들에서 사용자들은 그들의 솔루션으로 종종 PyTorch를 선택한다. - 2017년 10월 구글은 텐서플로우에 대한 “define-by-run” 인터페이스인 Eager Execution (텐서플로우 블로그 참조) 을 내놓았다. 구글은 해당 출시를 통해 PyTorch의 동적 그래프에 빠진 사용자들을 되찾아올 것을 희망하고 있다.

이 소식은 유명한 딥러닝 강좌인 fast.ai 개발자들에게는 너무 늦었다. 9월, fast.ai는 Keras와 TensorFlow로부터 PyTorch로 전환한다고 밝혔다. fast.ai의 창립 연구원이자 이전 대표이고 Kaggle의 Chief Scientist인 Jeremy Howard는 PyTorch가 계속 우위를 점할 것이라고 예상하는데, 이는 시간이 답을 해 줄 것이다.

이런 모든 딥러닝 프레임워크들은 프레임워크를 처음 사용하는 사용자들에게는 도전적인 문제가 된다. 솔직히, 경험있는 연구자나 개발자들에게도 최신 개발환경을 유지하는 것은 쉽지않다. 이런 사람들에게 ONNX(Open Neural Network Exchange)의 릴리즈는 반가운 소식이다. 2017년 9월, V1이 12월에 릴리즈되는 것으로 발표된 ONNX는 딥러닝 모델을 표현하는 오픈포맷이다. ONNX는 여러 프레임워크들 사이에서 사용자들이 보다 쉽게 모델을 이동시킬수 있도록 해준다. 예를 들어 PyTorch로 모델을 만들고, 추론을 위한 실행에는 MXNet을 사용하는 식이다.


Open Neural Network Exchange (ONNX) Github 페이지 — source: https://github.com/onnx/onnx



ONNX는 마이크로소프트, 아마존 AWS, 페이스북 등에 의해 출시되었다. 이 리스트에 구글이 없는것이 놀랍지는 않다. ONNX는 Caffe2, 마이크로소프트 Cognitive Toolkit, MXNet, 그리고 태생부터 PyTorch를 지원하지만, 다른 오픈소스 프로젝트들과 마찬가지로 텐서플로우를 위한 컨버터를 이미 추가하였다.

2017년의 많은 개발들은 전체적으로 빠르게 변화하고 있는 딥러닝과 AI분야와 닮았다. 다음해에 무엇이 일어날 지 예상하는 것은 어렵다. 하지만 대형 테크회사들이 자신들의 기술스택을 프로모트할 것이라는 것은 확실히 예상할 수 있고 테크 자이언트들에 의해서 지원받는 상이한 프레임워크들이 보다 빠른 혁신을 서로 촉진시킬 것이라는 점은 보기 좋다. 파트2에서는 상이한 프레임워크들을 속도, 메모리사용, 이식성, 확장성 등 관점에서 보다 상세히 비교할 것이다.