주니어 데이터 엔지니어 우솨's 개발일지

데이터 엔지니어링 60일차 TIL 본문

데브코스

데이터 엔지니어링 60일차 TIL

우솨 2024. 6. 30. 10:12

학습 내용

SparkML
- 머신러닝 관련 다양한 알고리즘, 유틸리티로 구성된 라이브러리
        - Classification, Regression, Clustering, Collaborative Filtering, Dimensionality Reduction 등
        - 아직 딥러닝은 지원이 미약하다.
- RDD 기반과 데이터프레임 기반의 두 버전이 존재
        - spark.mllib vs spark.ml
                - spark.mllib = RDD기반, spark.ml = 데이터프레임기반
        - 항상 spark.ml을 사용할것 !

Spark ML의 장점
- 원스톱 ML 프레임웍!
        - 데이터프레임과 SparkSQL등을 이용해 전처리
        - Spark MLlib를 이용해 모델 빌딩
        - ML Pipeline을 통해 모델 빌딩 자동화
        - MLflow로 모델 관리하고 서빙
- 대용량 데이터도 처리 가능하다.

ML flow
- 모델의 관리와 서빙을 위한 Ops 관련 기능도 제공
        - 모델 개발과 테스트와 관리와 서빙까지 제공해주는 End-to-End프레임웍
        - MLflow는 파이썬, 자바, R, API를 지원
        - MLflow는 트래킹(Tracing), 모델(Models), 프로젝트(Projects)를 지원

Spark ML 기반 모델 빌딩의 기본 구조
- 여느 라이브러리를 사용한 모델 빌딩과 크게 다르지 않음
        - 트레이닝셋 전처리
        - 모델 빌딩
        - 모델 검증(Confusion matrix)
- Scikit-Learn과 비교했을 때 장점
        - 차이점은 결국 데이터의 크기
                - Scikit-Learn은 하나의 컴퓨터에서 돌아가는 모델 빌딩
                - Spark MLlib는 여러 서버위에서 모델 빌딩
        - 트레이닝셋의 크기가 크면 전처리와 모델 빌딩에 있어 Spark이 큰 장점을 가진다.
        - Spark은 ML 파이프라인을 통해 모델 개발의 반복을 쉽게 해준다.

모델 빌딩과 관련된 흔한 문제들
1. 트레이닝 셋의 관리가 안됨
2. 모델 훈련 방법이 기록이 안됨
        - 어떤 트레이닝 셋을 사용했는지?
        - 어떤 피쳐들을 사용했는지?
        - 하이퍼 파라미터는 무엇을 사용했는지?
3. 모델 훈련에 많은 시간 소요
        - 모델 훈련이 자동화가 안된 경우 매번 각 스텝들을 노트북 등에서 일일히 수행
        - 에러가 발생할 여지가 많음 (특정 스텝을 까먹거나 조금 다른 방식 적용)

ML Pipeline의 등장
- 모델 훈련방법 기록 및 훈련 시간 해소
- 자동화를 통해 에러 소지를 줄이고 반복을 빠르게 가능하게 해줌

Spark ML 관련 개념 정리
- ML 파이프라인이란?
        - 데이터 과학자가 머신러닝 개발과 테스트를 쉽게 해주는 기능(데이터 프레임 기반)
        - 머신러닝 알고리즘에 관계없이 일관된 형태의 API를 사용하여 모델링이 가능
        - ML 모델개발과 테스트를 반복가능하게 해줌
- 데이터프레임, Transformer, Estimator, Parameter 4개 요소

ML 파이프라인의 구성요소 : 데이터 프레임
- ML 파이프라인에서는 데이터프레임이 기본 데이터 포맷이다.
- 기본적으로 CSV, JSON, Parquet, JDBC(관계형 데이터베이스)를 지원
- ML 파이프라인에서 다음 2가지의 새로운 데이터소스를 지원
        - 이미지 데이터 소스(jpeg, png 등의 이미지들을 지정된 디렉토리에서 로드)
        - LIBVM 데이터소스(label과 features 두개의 컬럼으로 구성되는 머신러닝 트레이닝셋 포맷)

ML 파이프라인의 구성요소 : Transformer
- 입력 데이터프레임을 다른 데이터프레임으로 변환
        - 하나 이상의 새로운 컬럼을 추가
- 2 종류의 Transformer가 존재하며 transform이 메인 함수
        - feature Transformer와 Learning Model
- Feature Transformer
        - 입력 데이터프레임의 컬럼으로부터 새로운 컬럼을 만들어내 이를 추가한 새로운 데이터프레임을 출력으로 내줌(피쳐 엔지니어링을 하는데 사용)
        - Imputer, StringIndexer, VectorAssembler
                - Imputer : 기본값 지정에 사용
                - StringIndexer : categorical 정보를 숫자 정보로 변환
                - VectorAssembler : 주어진 컬럼들을 통합하여 하나이ㅡ 벡터 컬럼으로 변환
- Learning Model
        - 머신러닝 모델에 해당
        -  피쳐 데이터프레임을 입력으로 받아 예측값이 새로운 컬럼으로 포함된 데이터프레임을 출력으로 내줌 : prediction, probability

ML 파이프라인의 구성요소 : Estimator
- 머신러닝 알고리즘에 해당 (fit이 메인함수)
        - 트레이닝셋 데이터프레임을 입력으로 받아서 머신러닝 모델(Transformer)을 만들어냄
                - 입력 : 데이터 프레임(Training 셋)
                - 출력 : 머신러닝 모델
ex) LogisticRegression은 Estimator이고 LogisticRegression.fit()을 호출하면 머신러닝 모델(Transformer)을 만들어낸다.
- ML Pipeline도 Estimator 이다
- Estimator는 저장과 읽기 함수를 제공한다.
        - ML Pipeline을 저장했다가 나중에 다시 읽을 수 있다.(save와 load)

ML 파이프라인의 구성요소 : Parameter
- Transformer와 Estimator의 공통 API로 다양한 인자를 적용해줌
- Param(하나의 이름과 값)
- ParamMap(Param 리스트)
- ex) 훈련 반복 수(iteration) 지정을 위해 setMaxIter()를 사용
- 파라미터는 fit(Estimator) 혹은 transform (Transformer)에 인자로 지정가능

ML 파이프라인의 구성요소 : ML Pipeline
- 하나 이상의 Transformer와 Estimator가 연결된 모델링 웍플로우
        - 입력은 데이터프레임
        - 출력은 머신러닝 모델
- ML Pipeline 그자체도 Estimator
        - ML Pipeline의 실행은 fit 함수의 호출로 시작
        - 저장했다가 나중에 다시 로딩하는 것이 가능(persistence)
- 한번 파이프라인을 만들면 반복 모델빌딩이 쉽다.