본문 바로가기

Home > 열린마당 > 공개SW 소식

공개SW 소식

'더 쉽게, 더 강력하게 개발한다' 머신러닝 프레임워크 13종

OSS 게시글 작성 시각 2017-08-29 08:14:30 게시글 조회수 5486

2017년 8월 27일 (일)

ⓒ CIO Korea, Serdar Yegulalp | InfoWorld


작년 한 해 동안, 머신러닝은 성공적으로 주류로 부상했다. 머신러닝의 갑작스러운 도래가 저렴한 클라우드 환경과 예전에 비해 더욱 강력해진 GPU 하드웨어 덕분이라고만 치부될 수는 없다. 이는 머신러닝의 가장 까다로운 부분들을 추상화하고 각종 기법들을 폭넓은 개발자들이 사용할 수 있게 해주도록 설계된 오픈소스 프레임워크의 폭발 덕분이기도 하다.

작년 한 해 동안 갓 만들어지거나 개정된 13가지 머신러닝 프레임워크를 소개한다. 이들은 각 툴의 유래, 문제 영역에 대한 참신한 단순성, 머신러닝과 관련된 특정 과제에 대한 해결 방안, 또는 이 모든 사항들로 주목을 받았다.


아파치 스파크 MLlib
아파치 스파크가 하둡 패밀리의 일부로 가장 잘 알려져 있을 수도 있지만, 이 인메모리(In-memory) 데이터 처리 프레임워크는 하둡과는 출신이 다르며 하둡 생태계 밖에서도 자체적으로도 이름을 떨치고 있다. 스파크는 인메모리 데이터에 고속으로 적용될 수 있는 알고리즘 라이브러리의 증가 덕분에 주력 머신러닝 도구로 자리잡았다.
스파크 이전 버전들은 수학과 통계 사용자들의 주요 플랫폼인 MLlib에 대한 지원을 강화했으며, 스파크 ML 작업들을 지속성 있는 파이프라인 기능을 통해 보류하고 재개할 수 있게 해주었다. 2016년에 공개된 스파크 2.0은 머신러닝 앱의 성능을 개선할 수 있는 텅스텐(Tungsten) 고속 메모리 관리 시스템과 새로운 데이터프레임(DataFrame) 스트리밍 API를 개선했다.


H2O
이제 버전 3인 H2O는 일반적인 개발 환경(파이썬, 자바, 스칼라, R), 빅데이터 시스템(하둡, 스파크), 그리고 다양한 데이터 소스(HDFS, S3, SQL, NoSQL)를 통해 머신러닝 알고리즘에 대한 액세스를 제공한다. H2O는 데이터 수집, 모델 구축, 그리고 각종 예측을 제공하기 위한 엔드 투 엔드 솔루션으로 개발되었다. 예를 들면, 모델을 자바 코드로 내보낼 수 있어서, 여러 가지 예측사항들이 다수의 플랫폼과 환경에서 사용될 수 있게 하고 있다.
H2O는 순수 파이썬 라이브러리로 기능하거나, 주피터 노트북(Jupyter Notebook)을 통해서 또는 R 스튜디오에서 R 언어를 통해서 사용할 수 있다. 이 플랫폼에는 H2O에만 있는 플로우(Flow)라는 오픈소스, 웹 기반 환경도 포함되어 있으며, 플로우는 학습 프로세스 이전이나 이후뿐 아니라 학습 프로세스 도중에도 데이터셋과 상호작용할 수 있게 해준다.


아파치 싱가(Apache Singa) 
“딥 러닝(Deep Learning)” 프레임워크는 자연어 처리와 이미지 인식 등 고강도 머신러닝 기능에 활용된다. 아파치 인큐베이터(Apache Incubator) 프로젝트인 싱가는 대용량 데이터에 대한 딥 러닝 모델의 학습을 쉽게 만들어주기 위해 개발된 오픈소스 프레임워크다.
싱가는 머신 클러스터(Cluster) 전반에 걸쳐 딥 러닝 네트워크를 학습시키기 위한 간단한 프로그래밍 모델을 제공한다. 나선형 신경망(Convolutional Neural Networks), 제한된 볼츠만 머신(Restricted Boltzmann Machines), 순환형 신경망(Recurrent Neural Network) 등 여러 가지 보편적 유형의 학습 작업을 지원한다. 모델은 특정 문제에 가장 좋은 작업이 어떤 것이냐에 따라 동기적으로(순차적) 또는 비동기적(병렬적)으로 학습될 수 있다. 또한 싱가는 아파치 주키퍼(Apache Zookeeper)를 사용해서 클러스터 설정을 간소화시켜 준다.


카페2(Caffe2) 
딥 러닝 프레임워크인 카페는 표현성(Expression), 속도, 모듈성을 염두에 두고 개발됐다. 2013년 머신 비전 프로젝트를 위해 개발된 카페는 그 이후로 언어 능력과 멀티미디어 등 다른 적용 분야도 포함할 수 있게 확장됐다.
속도가 관건이었기 때문에, 카페는 C++로만 작성됐으며, 필요에 따라서는 CPU와 GPU 연산이 전환되기도 하지만 CUDA 가속 기능을 지원한다.. 배포판에는 일반적인 분류 작업을 위한 일련의 무료 및 오픈소스 레퍼런스 모델이 포함돼 있다. 또한 카페 사용자 커뮤니티가 다른 모델들을 개발해서 기여하고 있다. 
페이스북이 후원하고 있는 카페의 새로운 버전인 카페2가 현재 1.0 릴리즈를 목표로 개발 중에 있다. 카페2의 목표는 분산 학습 수행과 모바일 기기에 대한 배포 그리고 FPGA같은 새로운 종류의 하드웨어에 대한 지원 제공을 더 쉽게 할 수 있게 해주고, 16비트 부동 소수점 학습 같은 최첨단 기능을 활용할 수 있게 해주는 것이다.


구글 텐서플로우(Google TensorFlow)
마이크로소프트의 DMTK와 흡사하게, 구글 텐서플로우는 복수의 노드로 확장할 수 있도록 개발된 머신러닝 프레임워크다. 쿠버네티스(Kubernetes)와 마찬가지로 구글의 내부 문제를 해결하기 위해 개발됐는데, 이후 구글은 이를 오픈소스 제품으로 공개했다.
텐서플로우는 데이터 흐름 그래프(Data Flow Graph)라 부르는 것을 구현하고 있는데, ‘데이터 묶음(Tensor)’은 그래프로 정의된 일련의 알고리즘에 의해 처리된다. 시스템을 통한 데이터 이동을 ‘플로우(Flow)’라 하는데, 텐서플로우의 명칭이 여기에서 비롯됐다. 그래프(Graph)는 C++ 또는 파이썬을 사용해서 조합되고 CPU 또는 GPU 상에서 처리할 수 있다.
텐서플로우는 최근 업데이트를 통해 파이썬과의 더 나은 호환성을 추가했으며, GPU 작업속도를 개선했다. 또 텐서플로우를 더욱 다양한 하드웨어 상에서 구동할 수 있는 길을 열었으며, 내장된 분류와 회귀 도구에 대한 라이브러리를 확장했다.


AML(Amazon Machine Learning) 
클라우드 서비스에 대한 아마존의 접근방식에는 일정한 패턴이 있다. 우선 기본적인 사항을 제공해서, 관심을 보이는 핵심 청중을 끌어들이고, 이를 기초로 개발하도록 한 후에, 그들이 정말로 필요로 하는 것을 찾아 제공하는 것이다. 
이 패턴은 처음으로 서비스형 머신러닝인 AML 역시 마찬가지라고 할 수 있다. AML은 아마존 S3, 레드시프트(Redshift), RDS 등에 저장되어 있는 데이터에 연결해서, 모델을 생성하기 위해 해당 데이터에 대한 바이너리 분류(Binary Classification), 다중 클래스 범주화, 회귀 등을 실행할 수 있다. 그렇지만, 결과적으로 생성된 모델을 가져오거나 내보낼 수 없으며, 모델을 학습시키기 위한 데이터셋은 100GB로 제한되어 있음에 유의하라.
그럼에도 불구하고, AML은 머신러닝이 사치품이 아니라 실용품이라는 것을 보여준다. 그리고 그 이상의 머신러닝을 필요로 하는 사람이나 아마존 클라우드와 덜 엮이고 싶어하는 사람을 위해 아마존의 딥 러닝 머신 이미지에는 카페2, CNTK, MXNet, 그리고 텐서플로우를 포함해서 여러 가지 주요 딥 러닝 프레임워크가 포함되어 있다.


마이크로소프트 애저 ML 스튜디오 
머신러닝 수행에 필요한 데이터와 연산 능력의 수준을 고려할 때, 클라우드는 ML 애플리케이션에 이상적인 환경이다. 마이크로소프트는 애저에 사용량에 따라 비용을 지불하는 자사 고유의 머신러닝 서비스인 애저 ML 스튜디오(Microsoft Azure ML Studio)를 탑재했으며, 월 별, 시간 단위로 과금 되거나 무료로 제공되는 버전이 있다. (마이크로소프트의 하우올드로봇(HowOldRobot) 프로젝트는 이 시스템을 사용해서 개발되었다.) 서비스 체험에는 계정도 필요 없다. 익명으로 로그인해서 최대 8시간 동안 애저 ML 스튜디오를 사용할 수 있다.
애저 ML 스튜디오는 사용자들이 학습 모델을 생성하고, 학습 모델들을 다른 서비스가 사용할 수 있는 API로 바꿀 수 있게 해준다. 무료 사용자들은 모델 데이터용으로 계정당 최대 10GB의 저장소를 사용할 수 있으며, 대형 모델용으로 자신이 사용하고 있는 애저 스토리지를 서비스에 연결할 수 있다. 마이크로소프트와 서드파티가 제공하는 다양한 알고리즘을 사용할 수 있다.
최근의 개선사항으로는 애저 배치(Azure Batch) 서비스를 통한 학습 작업의 일괄 관리, 더 나아진 배포 관리 제거기능, 그리고 상세한 웹 서비스 사용 통계가 있다.


마이크로소프트 DMTK 
머신러닝 문제에 더 많은 컴퓨터를 투입할 수 있다면, 더 좋을 것이다. 그러나 여러 시스템에 걸쳐 잘 실행되는 ML 애플리케이션을 개발하기가 쉽지 않다. 마이크로소프트의 DMTK(Distributed Machine Learning Toolkit) 프레임워크는 다양한 머신러닝 작업들을 시스템 클러스터 전체에 분산시키는 것과 관련된 문제를 해결해준다.
DMTK는 완전한 기성 솔루션이 아니라 하나의 프레임워크로 과금되기 때문에 포함되어 있는 알고리즘 개수가 적다. 그렇지만, 그레디언트 부스팅 프레임워크(Gradient Boosting Framework) 같은 핵심 머신러닝 라이브러리와 토치(Torch)나 테아노(Theano) 같은 몇몇 딥 러닝 프레임워크들에 대한 지원도 찾을 수 있을 것이다.
DMTK 설계방식은 사용자들이 제한된 자원으로 클러스터를 최대한 활용할 수 있게 해준다. 예를 들면, 클러스터의 각 노드(Node)에는 로컬 캐시(Local Cache)를 가지고 있어서, 해당 작업에 대한 파라미터를 제공하는 중앙 서버 노드와의 트래픽 양을 줄일 수 있다.


마이크로소프트 CNTK
DMTK를 공개하여 이목을 집중시킨 마이크로소프트는 또 다른 머신러닝 툴킷인 CNTK(Computational Network Toolkit)를 발표했다.
CNTK는 사용자들이 방향 그래프(Directed Graph)를 통해 신경망을 구축할 수 있게 해준다는 점에서 구글 텐서플로우와 유사하다. 마이크로소프트는 CNTK가 카페, 테아노(Theano), 토치(Torch) 등의 프로젝트에 필적하는 것으로 보고 있다. 여러 개의 CPU와 GPU를 병렬로 활용해서 더 빠른 속도를 얻는 기능은 제외하고. 마이크로소프트는 애저의 GPU 클러스터 상에서 CNTK를 구동함으로써 음성 인식 학습 속도를 높일 수 있었다고 주장했다.
가장 최신 버전인 CNTK 2.0은 정확성을 개선하고, 스파크와의 호환성을 위해 자바 API를 추가했으며, (텐서플로우와 자주 사용되는) 케라스(Keras) 프레임워크에서 작성된 코드를 지원함으로써 텐서플로우와의 경쟁에 불을 지폈다.


아파치 머하웃(Apache Mahout)
머하웃은 원래 스파크가 왕좌를 가로채기 훨씬 전에, 하둡 상에서 확장성 있는 머신러닝을 지원할 목적으로 구축되었다. 그렇지만, 오랜 기간 동안의 상대적으로 아주 저조한 활동 이후, 머하웃은 알고리즘을 분산된 스파크 클러스터 전체에 걸쳐 구동시킬 수 있게 해주는 삼사라(Samsara)라는 새로운 수학용 환경 같은 신규 추가사항을 통해 활기를 되찾았다. CPU와 GPU 작업 모두를 지원한다.
머하웃 프레임워크는 오랫동안 하둡에 묶여 있었지만, 머하웃 프레임워크 하에 있는 다수의 알고리즘들은 하둡 이외의 환경에서도 실행될 수 있다. 최종적으로는 하둡으로 이전될 예정인 독립형 애플리케이션이거나, 자체적인 독립형 애플리케이션으로 분리될 수도 있는 하둡 프로젝트에 유용하다.


벨레스(Veles, 삼성) 
벨레스는 딥 러닝 애플리케이션용 분산 플랫폼이며, 노드들 간의 자동화와 오케스트레이션을 수행하기 위해 파이썬을 사용하고는 있지만, 텐서플로우나 DMTK와 마찬가지로 C++로 작성됐다. 클러스터에 공급하기 전에 데이터세트를 분석하고 균등화시킬(Normalized) 수 있으며, REST API는 학습된 모델을 현업에서 즉시 사용할 수 있게 해준다. 물론 하드웨어 성능이 충분하다는 전제가 붙는다.
벨레스는 파이썬을 단순한 글루(Glue) 코드 이상으로 활용하고 있어서, 벨레스 클러스터로부터의 결과물을 시각화하고 게시(Publish)하기 위해 파이썬 기반의 주피터 노트북을 사용할 수 있다. 삼성은 벨레스를 오픈소스로 공개함으로써 윈도우와 맥 OS X에 대한 이식 같은 추가 개발이 촉진되기를 기대하고 있다.


엠엘팩 2(mlpack 2) 
2011년에 출시된 C++ 기반의 머신러닝 라이브러리인 
엠엘팩의 오랜 단점 중 한 가지는 C++이외 다른 언어와의 바인딩(Binding)을 지원하지 않는 것이다. 다른 언어 사용자들은 파이썬용 라이브러리 같은 서드파티 라이브러리가 필요하다는 의미이다. MATLAB 지원 작업이 추가됐지만, 엠엘팩 같은 프로젝트는 머신러닝 작업이 실제로 이루어지고 있는 주요 환경에서 직접 유용할 때 더욱 제대로 활용될 수 있다.


네온(Neon) 
자체 딥 러닝 하드웨어와 소프트웨어 플랫폼을 개발하고 있는 회사인 너바나(Nervana) (현재는 인텔의 일부)는 네온이라는 이름의 딥 러닝 프레임워크를 오픈소스 프로젝트로 공개했다. 네온은 플러그인 할 수 있는 모듈을 사용해서 CPU, GPU, 또는 너바나 자체의 맞춤형 하드웨어에서 힘든 일을 처리하게 해준다. 
네온은 주로 파이썬으로 작성됐지만 일부는 C++로 개발되었으며, 속도를 얻기 위해 어셈블리도사용하고 있다. 그 덕분에 파이썬에서 데이터 공학 작업을 수행하는 사람들이나 파이썬 바인딩을 지원하는 다른 프레임워크에서 이 프레임워크를 즉시 사용할 수 있다.
LSTM, 알렉스넷(AlexNet), 그리고 구글넷(GoogLeNet) 같은 다수의 표준 딥 러닝 모델들을 네온에서 사전 훈련된 모델로 사용할 수 있다. 최신 릴리즈인 네온 2.0은 CPU 성능을 가속화 기 위해 인텔 MKL(Math Kernel Library)을 추가했다.


마빈(Marvin) 
비교적 최근에 개발된 마빈 신경망 프레임워크는 PVG(Princeton Vision Group)의 제품이다. 마빈은 이 프로젝트의 문서에서 개발자들이 설명했듯이 “마음대로 사용되어지기 위해” 개발되었으며, C++과 CUDA GPU 프레임워크로 작성된 단지 몇 개의 파일에만 의존하고 있다. 코드 자체를 의도적으로 최소화하긴 했지만, 이 프로젝트는 적절한 인용구로 재 사용될 수 있고 프로젝트 코드 자체처럼 풀(Pull) 요청으로 기여될 수 있는 다수의 사전 훈련된 모델들을 제공하고 있다.



※ 본 내용은 한국IDG(주)(http://www.itworld.co.kr)의 저작권 동의에 의해 공유되고 있습니다.
Copyright ⓒITWORLD. 무단전재 및 재배포 금지



[원문출처 : http://www.ciokorea.com/slideshow/35305]

맨 위로
맨 위로