자세히 보기

‘머신러닝을 쉽게’··· 추천 오픈소스 도구 14선

스팸 걸러내기, 안면 인식, 추천 엔진 등 예측 분석이나 패턴 인식을 수행할 만한 대규모 데이터 세트가 있다면 머신러닝(ML)이 우선적인 해답이다. 무료 오픈소스 소프트웨어가 급증하면서 ML을 폭넓은 환경에서 인기 프로그래밍 언어로 실행하는 것이 수월해졌다. 이들 오픈소스 도구에는 파이썬(Python), R, C++, 자바(Java), 스칼라(Scala), 클로저(Clojure), 자바스크립트(JavaScript), 고(Go) 등용 라이브러리가 포함되어 있다.

  • 아파치 머하웃
  • 컴포즈
  • 코어 ML 툴
  • 코텍스
  • 피처툴
  • 고런
  • 그라디오
  • H2O
  • 오릭스
  • 파이토치 라이트닝
  • 사이킷런
  • 쇼군
  • 스파크 MLlib
  • 웨카


아파치 머하웃
아파치 머하웃(Apache Mahout)은 ML 애플리케이션을 호스팅하기 위한 환경을 신속하게 효율적으로 구축할 방안을 제시한다. 머하웃은 역시 잘 알려진 아파치 프로젝트인 스파크(Spark)와 주로 연동된다. 원래는 분산 애플리케이션 실행을 위해 하둡과 연동되도록 고안된 것인데 플링크(Flink), H2O와 같은 다른 분산 백엔드와 연동되도록 확장됐다.

머하웃은 스칼라로 된 도메인 특화 언어를 사용한다. 버전 0.14는 프로젝트의 주요 내부 리팩터(refactor)로서, 아파치 스파크 2.4.3에 기반하고 있다. 

컴포즈
이노베이션 랩(Innovation Labs)의 컴포즈(Compose)는 ML모델에 공통적으로 존재하는 문제를 공략한다. 바로 원시 데이터에 라벨을 지정하는 일이다. 느리고 지루할 수 있지만 이 과정이 없다면 ML 모델은 유용한 결과를 내놓을 수 없다. 

컴포즈는 사용자가 본인 데이터에 쓸 라벨 함수 세트를 파이썬으로 작성하게 해 준다. 따라서 라벨 지정 작업이 최대한 프로그램적으로 완료될 수 있다. 다양한 변환과 임계치를 데이터에 설정하여 라벨 지정 절차를 좀더 수월하게 만들 수 있다. 예를 들면, 개별 값이나 변위치를 기준으로 빈(bin)에 데이터를 두는 것이다.

코어 ML 툴
애플의 코어 ML 프레임워크는 ML모델을 앱에 통합하게 해 주지만 자체적인 학습 모델 형식을 사용한다. 좋은 소식은 모델들을 사용하기 위해 미리 코어 ML형식으로 훈련시킬 필요가 없다는 것이다. 흔히 사용되는 거의 모든 ML프레임워크로부터의 모델을 코어 ML 툴을 사용해 코어 ML로 변환할 수 있다.

코어 ML 툴은 파이썬 패키지로 실행된다. 따라서, 풍부한 파이썬 ML라이브러리 및 도구와 통합된다. 텐서플로(TensorFlow), 파이토치(PyTorch), 케라스(Keras), 카페(Caffe), ONNX, 사이킷런(Scikit-learn), LibSVM, XG부스트(XGBoost)의 모델들은 모두 변환 가능하다. 신경망 모델 역시 훈련 후 양자화를 (가령, 여전히 정확한 약간의 깊이에 대해) 사용하여 규모에 맞게 최적화될 수 있다.

코텍스
코텍스(Cortex)는 파이썬과 텐서플로, 파이토치, 사이킷런 등의 모델들을 사용해 ML모델로부터 예측을 제공하는 편리한 수단을 제공한다. 

대부분의 코텍스 패키지는 단지 몇 개의 파일로만 구성되어 있다(핵심 파이썬 로직). 어떤 모델을 사용하고 어떤 종류의 컴퓨팅 자원을 할당할지를 설명하는 cortex.yaml 파일과 필요한 파이썬 요건을 설치하기 위한 requirements.txt 파일이다. 전체 패키지는 도커 컨테이너로서 AWS 또는 다른 도커 호환 호스팅 시스템을 대상으로 배치된다. 컴퓨팅 자원은 쿠버네티스에 사용되는 정의를 따라하는 방식으로 할당되며, GPU 또는 아마존 인퍼런시아 ASIC(Amazon Inferential ASIC)를 사용해 제공 속도를 높일 수 있다.

피처툴
피처 창출(feature creation )이라고도 하는 피처 공학(Feature engineering)은 ML모델 훈련에 사용되는 데이터를 가져와서 모델 훈련에 더욱 유용한 변환되고 집계된 버전의 데이터를 주로 수동으로 만들어내는 작업이다. 피처툴(Featuretools)은 데이터프레임에서 데이터를 합성하여 구축된 고차원 파이썬 객체를 통해 이 작업을 할 수 있는 기능을 제공하며, 하나 또는 여러 개의 데이터프레임에서 추출된 데이터를 대상으로 이 작업을 할 수 있다. 

피처툴은 합성 연산을 위한 공통 기본 자료도 제공한다(예: time_since_previous는 시간이 찍힌 데이터의 인스턴스 사이에 경과한 시간을 제공). 따라서 직접 작동시킬 필요가 없다.

고런
고런(GoLearn)은 구글의 고(Go) 언어용 ML 라이브러리이다. 개발자 스티븐 휘트워스에 따르면, 단순함과 맞춤성이라는 2가지 목적으로 만들어졌다. 

단순함은 데이터가 라이브러리에 읽어 들여지고 처리되는 방식에 있는데 이는 사이파이(SciPy)와 R의 패턴에 따른다. 맞춤성은 데이터 구조 중 일부가 얼마나 수월하게 애플리케이션에서 확장될 수 있느냐에 있다. 휘트워스는 쇼군(Shogun) 툴박스에서 찾아볼 수 있는 라이브러리 가운데 하나인 보우팔 와빗(Vowpal Wabbit) 라이브러리용 고(Go) 래퍼(wrapper)도 만들었다.

그라디오
ML 애플리케이션을 구축할 때 공통적인 한 가지 과제는 모델 훈련 및 예측 제공 매커니즘을 위해 쉽게 구성되는 강력한 UI를 구축하는 일이다. 그라디오(Gradio)는 사용자가 본인의 모델과 실시간으로 상호 작용할 수 있게 해주는 웹 기반 UI를 만들기 위한 도구를 제공한다. 

인셉션 V3 이미지 분류기 또는 MNIST 필적 인식 모델에 대한 입력 인터페이스와 같은 샘플 프로젝트가 여러 개 포함되어 있어서, 사용자는 본인의 프로젝트에 어떻게 그라디오를 활용할 수 있을지에 대한 아이디어를 얻을 수 있다.

H2O
세 번째 주요 개정판까지 등장한 H2O는 훈련에서부터 예측 제공에 이르기까지 인메모리 ML을 위한 전체 플랫폼을 제공한다. H2O의 알고리즘은 이를테면 이미지 분석보다는 사기 또는 동향 예측과 같은 비즈니스 프로세스를 위한 것이다. H2O는YARN 위에서, 맵리듀스에서 또는 아마존 EC2 인스턴스에서 직접 HDFS 스토어와 독립적인 방식으로 상호작용할 수 있다.

하둡 전문가들은 자바를 사용해 H2O와 상호작용할 수 있지만 이 프레임워크는 파이썬, R, 스칼라를 대상으로 한 결합도 제공한다. 즉, 해당 플랫폼에서 이용 가능한 모든 라이브러리와의 상호작용도 가능해진다. 또한, 거의 대부분의 파이프라인에 H2O를 통합시킬 수단으로서 REST 콜을 사용할 수도 있다.

오릭스
클라우데라 하둡 디스트리뷰션(Cloudera Hadoop Distribution(CHD))을 만든 사람들이 제공하는 오릭스(Oryx)는 아파치 스파크와 아파치 카프카(Apache Kafka)를 사용해 ML모델을 실시간 데이터에 실행한다. 

오릭스는 추천 엔진이나 실시간 이상 탐지와 같이 당장 의사결정이 필요한 프로젝트, 즉, 신규 데이터는 물론 과거 데이터로부터 정보를 제공받는 프로젝트를 구축하는 수단을 제공한다. 버전 2.0은 프로젝트를 거의 완벽하게 재설계한 것으로서, 그 구성 요소가 람다(lambda) 아키텍처에 느슨하게 결합되어 있다. 새로운 알고리즘과 그 알고리즘에 대한 새로운 추상화(예: 하이퍼파라미터 선택 목적)는 언제든지 추가할 수 있다.

파이토치 라이트닝
강력한 프로젝트가 인기를 얻게 되면, 그 프로젝트를 사용하기 수월하게 해 주는 써드파티 프로젝트들로 보완되는 경우가 많다. 파이토치 라이트닝(PyTorch Lightning)은 파이토치용 조직 래퍼(organizational wrapper for PyTorch)를 제공한다. 따라서, 프로젝트마다 상용구 코드를 작성하는 대신 중요한 코드에 집중할 수 있다.

라이트닝 프로젝트는 클래스 기반 구조를 사용한다. 따라서, 파이토치 프로젝트에 공통적인 각각의 단계는 클래스 메소드에 압축되어 있다. 훈련과 검증 루프는 반자동화 되어 있다. 따라서, 각 단계에 본인의 로직만 제공하면 된다. 또한, 훈련 결과를 여러 개의 GPU나 서로 다른 하드웨어 혼합체에서 설정하기가 더 쉽다. 왜냐하면 그렇게 하기 위한 명령이나 객체 참조가 중앙 집중화되어 있기 때문이다.

사이킷런
파이썬은 채택하기 쉽고 거의 모든 애플리케이션에 사용 가능한 라이브러리의 폭이 넓기 때문에 수학, 과학, 통계학 분야에서 믿고 찾는 프로그래밍 언어로 자리잡았다. 사이킷런(Scikit-learn)은 이러한 폭 넓음을 활용하기 위해 기존의 수학 및 과학 작업용 파이썬 패키지(예: 넘파이(NumPy), 사이파이, 맷플롯립(Matplotlib))를 바탕으로 구축된다. 

그 결과 생긴 라이브러리는 대화형 ‘워크벤치’ 애플리케이션에 사용되거나 다른 소프트웨어 내에 포함되어 재사용될 수 있다. 키트는 BSD 라이센스 하에서 사용할 수 있다. 따라서 완전히 개방적이고 재사용 가능하다.

쇼군
쇼군(Shogun)은 여기에 소개된 것 중에서 가장 오래 살아남은 프로젝트 가운데 하나이다. 1999년에 만들어졌고 C++로 작성되었지만 자바, 파이썬, C#, 루비(Ruby), R, 루아(Lua), 옥타브(Octave), 맷랩(Matlab)과 함께 사용 가능하다. 최신 주요 버전인 6.0.0은 마이크로소프트 윈도우와 스칼라 언어를 위한 네이티브 지원을 추가한다.

인기가 많고 범위도 넓지만 쇼군에게는 경쟁자가 있다. 또 다른 C++ 기반 ML 라이브러리인 mlpack이 등장한 것은 2011년에 불과하지만 경쟁 라이브러리보다 빠르고 (좀 더 완전한 API 세트를 통해) 작업하기 쉽다고 스스로 주장하고 있다.

스파크 MLlib
아파치 스파크와 아파치 하둡용 ML 라이브러리인 MLlib은 속도와 규모 있게 실행하도록 설계된 유용한 데이터 유형과 많은 일반 알고리즘을 자랑한다. MLlib에서의 작업에 기본 언어는 자바이지만, 파이썬 사용자는 MLlib를 넘파이 라이브러리와 연결할 수 있고, 스칼라 사용자는 MLlib에 대해 코드를 작성할 수 있으며, R 사용자들은 현재 버전 1.5의 스파크에 플러그인 할 수 있다. MLlib 버전 3은 (구형 RDD API 대신) 스파크의 데이터프레임 API 사용에 집중하며, 새로운 분류 및 평가 기능을 많이 제공한다.

또 다른 프로젝트인 MLbase는 MLlib 위에 구축되어 결과 도출을 수월하게 만들어 준다. 사용자는 코드를 작성하는 대신 SQL 풍의 선언형 언어를 통해 질의를 만든다.

웨카
와이카토 대학교 ML그룹에서 만든 웨카(Weka)는 ‘프로그래밍 없는 ML’이라고 일컬어진다. 일종의 GUI 워크벤치로서 데이터 랭글러로 하여금 코드를 작성할 필요 없이 예측 기능을 실행하고, 모델을 훈련시키고, ML파이프라인을 모을 수 있게 해 준다. 

웨카는 R, 아파치 스파크, 파이썬과 직접 연동되는데, 이 중에서 후자는 넘파이, 판다스, 사이파이, 사이킷런과 같은 일반적인 수치 라이브러리를 위한 인터페이스를 통하거나 직접적인 래퍼를 통해 연동된다. 웨카의 큰 장점은 패키지 관리, 사전 처리, 분류, 시각화 등 작업의 모든 측면에 브라우징 가능하고 친화적인 인터페이스를 제공한다는 점이다.dl-ciokorea@foundryco.com