2016.02.01
기계학습 구현을 쉽게!··· 머신러닝 프레임워크 13종
Serdar Yegulalp | InfoWorld
머신러닝(기계학습)은 이제 새로운 주류로 자리잡았다. 이 트렌드가 최근 1년 동안 급부상한 이유에는 저렴한 클라우드 환경과 강력한 GPU 하드웨어만 있지 않다. 기계학습에 활용할 수 있는 프레임워크의 폭발적인 증가도 한 몫 했다.
모두 오픈소스인 이들 프레임워크들은 기계학습에서 어려운 부분을 추상화함으로써 더욱 많은 개발자들이 이 기술을 사용할 수 있게 해준다. 오늘은 지난 1년 동안 새롭게 개발되거나 개선된 13가지 기계 학습 프레임워크에 대해 알아본다. ciokr@idg.co.kr
아파치 스파크(Apache Spark) MLlib
아파치 스파크는 하둡) 제품군의 하나로 널리 알려져있지만, 이 인메모리(In-memory) 데이터 처리 프레임워크는 하둡 생태계가 아닌 다른 곳에서도 명성을 떨치고 있다. 오늘날 스파크는 빠른 속도의 인메모리 데이터에 적용할 수 있는 알고리즘 라이브러리가 늘어남에 따라 인기 높은 기계 학습 툴이 되었다.
특히 스파크에서 사용할 수 있는 알고리즘이 지속적으로 확장 및 개선되고 있는 점에 주목할 만하다. 지난해 공개된 1.5 버전에는 여러 새로운 알고리즘이 추가됐다. 또 수학 및 통계 사용자들을 위한 주요 플랫폼인 파이썬(Python)에 대해 MLlib 지원이 강화됐다. 새롭게 공개된 스파크 1.6에서는 끊임 없는 파이프라인을 통해 스파크 ML 작업을 유예하고 재개하는 기능이 구현되기도 했다.
1
아파치 싱가(Apache Singa)
'딥러닝(Deep Learning)' 프레임워크는 자연어 처리와 이미지 인식 등의 주요 기계 학습 기능에 활용된다. 최근 아파치 인큐베이터(Apache Incubator)에 수용된 싱가는,대용량 데이터로 딥 러닝 모델을 간편하게 학습할 수 있게 해주는 오픈소스 프레임워크다.
싱가는 머신 클러스터(Cluster) 전반에 걸쳐 딥러닝 네트워크를 학습하기 위한 간단한 프로그래밍 모델을 제공한다. 나선형 신경망(convolutional neural networks), 제한된 볼츠만 머신(restricted Boltzmann machines), 순환형 신경망(recurrent neural networks) 등의 여러 보편적인 학습 작업 유형을 지원한다.
모델은 주어진 문제에 가장 좋은 작업이 무엇이냐에 따라 동기적으로(순차적) 또는 비동기적(병렬적)으로 학습할 수 있다. 또한 싱가는 아파치 주키퍼(Apache Zookeeper)로 클러스터 설정을 간소화시켜준다.
2
카페(Caffe)
딥 러닝 프레임워크인 카페는 표현성, 속도, 모듈성을 염두에 두고 개발됐다. 2013년 머신 비전 프로젝트를 위해 개발된 카페는 그 이후로 언어 능력과 멀티미디어 등 다른 응용 분야도 포함할 수 있도록 확장됐다.
속도가 관건이었기 때문에 카페는 전체가 C++로 작성됐으며, CUDA 가속을 지원하고 필요에 따라 CPU와 GPU 연산이 전환되기도 한다. 배포판에는 보편적인 분류 작업을 위한 일련의 무료 및 오픈소스 레퍼런스 모델이 포함돼 있다. 또 '카페' 사용자 커뮤니티가 개발하고 기분한 다른 모델들도 포함돼 있다
3
마이크로소프트 애저 ML 스튜디오(Microsoft Azure ML Studio)
필요한 데이터와 연산 능력의 수준을 고려할 때 클라우드는 ML 앱에 대한 이상적인 환경이다. 마이크로소프트는 애저에 월, 시간 단위로 과금하거나 무료로 제공하는 기계학습 서비스 애저 ML 스튜디오를 적용했다. 참고로 마이크로소프트의 하우올드로봇(HowOldRobot) 프로젝트가 이 시스템으로 개발된 것이다.
CortanaAnalyticsPerceptualAPIs-Registration.html?ls=AzureCLE
애저 ML 스튜디오를 이용하면 모델을 생성하고 학습한 후 다른 서비스가 사용할 수 있는 API로 바꿀 수 있다. 모델 데이터 저장 위해 계정당 최대 10GB의 저장소를 사용할 수 있으며, 대형 모델의 경우 서비스에 자체 애저 저장소를 연결할 수도 있다.
이 서비스에서는 또 마이크로소프트 및 제 3자가 제공하는 광범위한 알고리즘을 사용할 수 있다.
한편 마이크로소프트는 계정 없이도 이 서비스를 사용해 볼 수 있게 했다. 익명으로 로그인하고 최대 8시간 동안 애저 ML 스튜디오를 시험 사용해볼 수 있다.
4
AML(Amazon Machine Learning)
아마존의 일반적인 클라우드 서비스 접근방식은 일정한 패턴이 있다. 기본을 제공하고 관심이 있는 핵심 청중을 끌어들이며 이를 기초로 개발하도록 한 후에 그들이 정말로 필요한 것을 찾아 제공하는 것이다.
이 패턴은 처음으로 서비스형 기계학습인 AML을 제공할 때도 마찬가지였다. AML은 아마존 S3, 레드시프트(Redshift), RDS 등에 저장되어 있는 데이터에 연결하고 이런 데이터에서 바이너리(Binary) 분류, 다중 클래스 범주화, 회귀 등을 운영해 모델을 구축하도록 한다.
하지만 이 서비스는 매우 아마존 중심적인 특성을 지닌다. 아마존에 저장되어 있는 데이터에 대한 의존성은 차치하더라도 결과 모델을 가져오거나 내보낼 수 없고 모델 학습을 위한 데이터셋트는 100GB로 제한돼 있다. 하지만 아직 시작에 불과하며 기계학습이 실용성을 추구할 수 있는 방법을 잘 보여주고 있다.
5
마이크로소프트 DMLT(Distributed Machine Learning Toolkit)
기계학습 문제에 컴퓨터를 더 많이 투입할수록 좋을 것이다. 그러나 여러 컴퓨터를 모으고 여기에서 ML 애플리케이션이 잘 구동되도록 하기란 쉽지 않은 작업일 수 있다. 마이크로소프트의 DMTK 프레임워크는 시스템 클러스터에서 다양한 기계학습 작업을 배포하는 문제를 해결해준다.
DMTK는 완전한 기성 솔루션보다는 하나의 프레임워크로서 과금된다. 따라 실제로 포함하고 있는 알고리즘의 수가 적다. 하지만 DMTK의 디자인 덕분에 향후 확장이 가능하며 사용자들은 제한된 자원으로 클러스터를 적극 활용할 수 있게 된다. 예를 들어, 클러스터의 각 노드(Node)는 로컬 캐시(Local Cache)를 보유하는데, 이는 해당 작업의 파라미터를 제공하는 중앙 서버 노드의 트래픽량을 줄일 수 있다.
6
구글 텐서플로우(Google TensorFlow)
마이크로소프트의 DMTK와 마찬가지로 구글 텐서플로우는 복수의 노드에서 확장될 수 있도록 개발된 기계학습 프레임워크다. 구글의 퀴베르네시스(Kubernetes)와 마찬가지로 구글의 내부 문제를 해결하기 위해 개발됐는데, 이후 구글은 이를 오픈소스 제품으로 공개했다.
텐서플로우는 데이터 흐름 그래프(data flow graphs)라는 것을 실행하는데, 데이터 배치("Tensor")는 이곳에서 일련의 알고리즘에 의해 처리된다. 시스템을 통한 데이터 이동을 “플로우”(flows)라고 하는데, 텐서플로우의 명칭은 여기에서 비롯됐다. 그래프(Graphs)는 C++ 또는 파이썬과 조합돼 CPU 또는 GPU에서 처리될 수 있다. 구글의 장기적인 계획은 써드파티 기여자들이 텐서플로우를 풍성하게 하게끔 하는 것이다.
7
마이크로소프트 CNT(Computational Network Toolkit)
DMTK를 공개하여 이목을 집중시킨 마이크로소프트는 또 다른 기계학습 툴킷인 CNTK를 선보였다.
CNTK는 구글 텐서플로우와 마찬가지로 사용자들이 디렉티드 그래프(directed graph)를 통해 신경망을 구축할 수 있게 해준다. 마이크로소프트는 이 프로젝트가 카페, 시애노(Theano), 토치(Torch) 등의 프로젝트와 비교할 만하다고 보고 있다. 다른 프레임과 비교했을 때의 장점은 복수의 CPU와 GPU를 병렬로 활용할 수 있는 능력에서 비롯된 속도라 할 수 있다. 마이크로소프트는 애저에서 CNTK와 GPU 클러스터를 함께 사용함으로써 중요도 순서에 따른 코타나(Cortana)의 음성 인식 학습 속도가 높아졌다고 밝혔다.
본래 마이크로소프트가 음성 인식 연구의 일환으로 개발한 CNTK는 본래 2015년 4월 오픈소스 프로젝트로 제공됐지만 그 이후로 기트허브(GitHub)를 통해 훨씬 자유로운 MIT 스타일의 라이선스로 다시 공개됐다.
8
벨레스(Veles, 삼성)
벨레스는 딥러닝 애플리케이션을 위한 분산형 플랫폼이다. 텐서플로우나 DMTK와 마찬가지로 C++로 작성됐다. 그러나 노드 사이의 자동화와 조율을 수행하는 데에는 파이썬을 이용한다.
이를 이용하면 데이터세트가 클러스터에 공급하기 전에 분석되고 균등화될(normalized) 수 있다. 또 REST API를 이용하면 학습된 모델이 즉시 생산에 투입될 수 있다. 물론 하드웨어 성능이 충분하다는 전제 아래서다.
벨레스는 파이썬을 단순한 글루(Glue) 코드 이상으로 활용했다. 데이터 시각화 및 분석 툴인 아이파이썬(IPython, 현재는 Jupyter)은 벨레스 클러스터로부터의 결과를 시각화하고 발행할 수 있게 해준다. 삼성은 이 프로젝트가 오픈소스로 공개됨에 따라 윈도우와 맥(Mac) OS X 등으로의 포팅(Porting) 등 추가적인 개발이 촉진되기를 바라고 있다.
9
브레인스톰(Brainstorm)
스위스의 루가노(Lugano, Switzerland)의 IDSIA(Institute Dalle Molle for Artificial Intelligence)에서 박사 과정을 밟고 있는 클라우스 그레프(Klaus Greff)와 루페시 스리바스타바(Rupesh Srivastava)가 2015년 한 해 동안 개발한 프레임워크다. 브레인스톰 프로젝트의 목표는 “DNN(Deep Neural Network)을 더 빠르고 유연하며 재미있게” 만드는 것이다. LSTM 등 다양한 순환형 신경망 모델을 위한 지원이 이미 포함되어 있다.
브레인스톰은 파이썬을 이용해 데이터 관리 APIs인 2개의 핸더(Hander)를 제공한다. 하나는 넘피(Numpy) 라이브러리를 위한 CPU 연산을 위한 것이며 나머지 하나는 CUDA를 통한 GPU 활용을 위한 것이다.
브레인스톰에서는 대부분의 작업이 파이썬 스크립트 작업으로 이루어지기 때문에 풍부한 프론트 엔드 GUI는 기대하기란 무리다. 하지만 장기 계획은 “초기 오픈소스 프로젝트의 교훈”을 도입하고 “복수의 플랫폼 및 연산 백 엔드(Back End)와 호환되는 새로운 디자인 요소”를 사용하는 무엇인가를 개발한다는 것이다.
10
엠엘팩 2(mlpack 2)
2011년에 공개된 C++ 기반의 기계학습 라이브러리가 엠엘팩이다. 해당 라이브러리 개발자는 “확장성, 속도, 사용 편의성”을 위해 이를 개발했다고 밝한 바 있다 . Mlpack 도입은, 약식의 경우 "블랙 박스(Black Box)" 작업을 위한 명령줄 실행 가능문 저장소를 통해 이뤄질 수 있으며, 좀더 정교하게는 C++ API를 통해 가능하다.
2.0 버전에서는 다양한 코드 개선과 함께 여러 새로운 종류의 알고리즘과 속도 증가 또는 최적화를 위한 변경사항 등 새로운 기능이 추가됐다. 예를 들어, 부스트(Boost) 라이브러리의 무작위 숫자 생성기를 버리고 C++ 11의 네이티브 무작위 함수를 도입했다.
오래된 단점 중 하나는 C++을 제외한 다른 언어를 위한 바인딩(Binding)의 부재다. 누군가 R부터 파이썬까지 모든 언어를 위한 자체 랩퍼(Wrapper)를 공개하지 않는다면 사용자가 mlpack을 활용할 수 없는 것이다. MATLAB 지원 작업이 추가됐지만, 이런 류의 프로젝트는 직접적으로 주요 환경에서 유용할 때 활용도가 높아지는 경향이 있다.
11
마빈(Marvin)
상대적으로 최근에 개발된 마빈 신경망 프레임워크는 PVG(Princeton Vision Group)의 제품이다. 해당 프로젝트의 문서에서 개발자들이 설명했듯이 “해킹당하기 위해” 개발됐다. C++과 CUDA GPU 프레임워크로 작성된 몇 개의 파일에만 의존하고 있다.
코드 자체를 의도적으로 최소화하긴 했지만 이 프로젝트에는 적절한 인용구를 통해 다시 사용하고 해당 프로젝트의 자체 코드처럼 분기점 합병 요구(Pull Request)로 기여할 수 있는 여러 사전 학습 모델(pretrained models)이 함께 제공된다.
12
네온(Neon)
자체 딥러닝 하드웨어 및 소프트웨어 플랫폼을 개발하는 기업 너바나(Nervana)는 네온이라는 딥러닝 프레임워크를 오픈소스 프로젝트로 공개했다. 이는 CPU, GPU, 너바나의 자체 맞춤형 하드웨어에서 부하 작업이 수행될 수 있도록 삽입형 모듈을 사용한다.
네온은 주로 파이썬으로 작성됐지만 일부는 C++로 개발됐다. 이 덕분에 파이썬에서 데이터 공학 작업을 수행하는 사람들과 파이썬 바인딩을 보유한 기타 프레임워크에 즉시 제공될 수 있다.
13

