MLlib 가이드
MLlib 가이드
MLlib는 Spark의 머신러닝(ML) 라이브러리예요. 목표는 실용적인 머신러닝을 확장 가능하면서도 쉽게 만드는 거죠. 크게 보면 다음과 같은 도구들을 제공해요.
- ML 알고리즘: 분류, 회귀, 클러스터링, 협업 필터링 같은 흔한 학습 알고리즘
- 피처 변환(Featurization): 피처 추출, 변환, 차원 축소, 선택
- 파이프라인(Pipelines): ML 파이프라인을 구성하고 평가하고 튜닝하는 도구
- 영속화(Persistence): 알고리즘, 모델, 파이프라인 저장과 불러오기
- 유틸리티: 선형대수, 통계, 데이터 처리 등
본문
공지: DataFrame 기반 API가 주 API가 됐어요
MLlib의 RDD 기반 API는 이제 유지보수(maintenance) 모드예요.
Spark 2.0부터 spark.mllib 패키지의 RDD 기반 API는 유지보수 모드로 들어갔어요. Spark의 주 머신러닝 API는 이제 spark.ml 패키지의 DataFrame 기반 API가 됐어요.
무슨 뜻일까요?
- MLlib은
spark.mllib의 RDD 기반 API를 버그 수정과 함께 계속 지원해요. - MLlib은 RDD 기반 API에 새로운 기능을 추가하지 않아요.
- Spark 2.x 릴리스에서 MLlib은 DataFrame 기반 API에 기능을 추가해 RDD 기반 API와 기능 동등(feature parity) 수준에 도달하게 해요.
왜 DataFrame 기반 API로 전환하나요?
- DataFrame은 RDD보다 더 사용자 친화적인 API를 제공해요. DataFrame의 많은 장점에는 Spark 데이터소스, SQL/DataFrame 쿼리, Tungsten과 Catalyst 최적화, 언어 간의 통일된 API가 포함돼요.
- MLlib의 DataFrame 기반 API는 ML 알고리즘 간, 그리고 여러 언어 간에 통일된 API를 제공해요.
- DataFrame은 실용적인 ML 파이프라인, 특히 피처 변환을 쉽게 만들어 줘요. 자세한 내용은 Pipelines 가이드를 참고하세요.
"Spark ML"이 뭔가요?
- "Spark ML"은 공식 이름은 아니지만 MLlib의 DataFrame 기반 API를 가리킬 때 가끔 쓰여요. 주로 DataFrame 기반 API가 쓰는
org.apache.spark.ml스칼라 패키지 이름과, 파이프라인 개념을 강조하려고 처음 사용했던 "Spark ML Pipelines"라는 용어 때문이에요.
MLlib이 더 이상 사용되지 않나요(deprecated)?
- 아니요. MLlib은 RDD 기반 API와 DataFrame 기반 API를 모두 포함해요. RDD 기반 API가 지금 유지보수 모드인 것뿐이에요. 어느 API도, 그리고 MLlib 전체도 더 이상 사용되지 않지는 않아요.
의존성(Dependencies)
MLlib은 최적화된 수치 처리를 위해 선형대수 패키지 Breeze와 dev.ludovic.netlib을 사용해요¹. 이 패키지들은 시스템 라이브러리나 런타임 라이브러리 경로에 있으면 Intel MKL이나 OpenBLAS 같은 네이티브 가속 라이브러리를 호출할 수 있어요.
하지만 네이티브 가속 라이브러리는 Spark와 함께 배포할 수 없어요. 가속된 선형대수 처리를 켜는 방법은 MLlib Linear Algebra Acceleration Guide를 보세요. 가속 네이티브 라이브러리를 켜지 않으면 아래 같은 경고 메시지가 보이고 순수 JVM 구현을 대신 사용해요.
WARNING: Failed to load implementation from:dev.ludovic.netlib.blas.JNIBLAS
Python에서 MLlib을 쓰려면 NumPy 1.21 이상이 필요해요.
3.0의 주요 변화
아래 목록은 Spark 3.0 릴리스에서 MLlib에 추가된 새 기능과 개선 사항 중 일부를 보여줘요.
Binarizer(SPARK-23578),StringIndexer(SPARK-11215),StopWordsRemover(SPARK-29808), PySparkQuantileDiscretizer(SPARK-22796)에 여러 컬럼 지원이 추가됐어요.- 트리 기반 피처 변환(Tree-Based Feature Transformation)이 추가됐어요(SPARK-13677).
MultilabelClassificationEvaluator(SPARK-16692)와RankingEvaluator(SPARK-28045)라는 두 개의 새 평가자가 추가됐어요.DecisionTreeClassifier/Regressor(SPARK-19591),RandomForestClassifier/Regressor(SPARK-9478),GBTClassifier/Regressor(SPARK-9612),MulticlassClassificationEvaluator(SPARK-24101),RegressionEvaluator(SPARK-24102),BinaryClassificationEvaluator(SPARK-24103),BisectingKMeans(SPARK-30351),KMeans(SPARK-29967),GaussianMixture(SPARK-30102)에 샘플 가중치 지원이 추가됐어요.PowerIterationClustering용 R API가 추가됐어요(SPARK-19827).- ML 파이프라인 상태를 추적하는 Spark ML 리스너가 추가됐어요(SPARK-23674).
- Python의 Gradient Boosted Trees에 검증 세트를 사용한 피팅이 추가됐어요(SPARK-24333).
RobustScaler변환기가 추가됐어요(SPARK-28399).Factorization Machines분류기와 회귀기가 추가됐어요(SPARK-29224).- Gaussian Naive Bayes 분류기(SPARK-16872)와 Complement Naive Bayes 분류기(SPARK-29942)가 추가됐어요.
- Scala와 Python 사이의 ML 함수 동등(parity)(SPARK-28958).
- 모든 분류 모델에서
predictRaw가 공개됐고,LinearSVCModel을 제외한 모든 분류 모델에서predictProbability가 공개됐어요(SPARK-30358).
마이그레이션 가이드
마이그레이션 가이드는 이제 이 페이지에 보관돼 있어요.
¹ 시스템 최적화 네이티브의 이점과 배경을 더 알고 싶다면, Sam Halliday의 ScalaX 강연 High Performance Linear Algebra in Scala를 보는 걸 추천해요. ↩
더 알아보기 (Learn more)
- MLlib: RDD 기반 API 가이드 —
spark.mllib패키지의 RDD 기반 API를 다뤄요. - ML 파이프라인 — 파이프라인 개념과 구성 방법.
- 분류와 회귀 — DataFrame 기반 분류·회귀 알고리즘.