Machine Learning의 Feature Store란?
- 머신러닝의 Feature Store에 대해 작성한 글입니다
- Feature Store가 왜 필요한지?와 어떤 종류들이 있는지? 등에 대해 작성했습니다
머신러닝의 모델링 과정
- 머신러닝 모델링 업무의 큰 흐름은 다음과 같음
- 데이터 적재
- 데이터 EDA 및 분석
- Feature Engineering
- 모델링(모델 선정, 하이퍼 파라미터 튜닝, metric 선정 과정 포함)
- Test Set에 성능 개선되었는지 확인
- 모델이 완성되면, 그 후에 실제 서비스에 활용하기 위해 아래와 같은 과정을 거침(Production, Serving 과정)
- 실시간 데이터 적재 확인
- 실시간 데이터에 기반한 Feature Engineering
- 모델 학습
- 필요시 모델 업데이트
- Inference
Production시 발생할 수 있는 문제
- 1) 데이터 스트리밍 파이프라인 존재 유무
- 데이터 ETL 파이프라인은 초반엔 배치성으로 생성해 관리하는 경우가 있음(더 쉽고, 빠르게 가능)
- 이 경우, 모델을 Production화하기 위해 데이터를 실시간으로 적재해야 함
- Kafka, Redis, GCP Pub/Sub, REST API 등을 활용해 데이터를 적재
- 단, 예측하려는 문제에 따라 실시간보다 배치성으로 예측해도 괜찮은 경우가 있음
- 2) Feature Engineering 소요되는 시간
- 실시간으로 생성되는 데이터를 기반으로 Feature Engineering 수행
- Spark나 BigQuery 같은 SQL 기반으로 전처리할 수도 있고, Python의 Pandas 등을 사용할 수도 있음
- 그러나 Feature Engneering의 연산이 복잡한 경우, Feature를 생성하는 시간이 오래 걸릴 수 있음
- 3) 오프라인과 온라인에서 사용한 Feature의 차이
- 오프라인 : 실시간이 아닌 데이터를 사용하는 환경(주로 배치성)
- 온라인 : 실시간으로 데이터가 스트리밍되는 환경
- 오프라인은 주로 배치성으로 적재되기 때문에, 그 과정에서 미리 복잡한 연산을 해서 저장할 수 있음. 그러나 온라인 적재는 복잡한 연산을 하지 못하거나(혹은 개발 리소스의 부족으로) 따로 처리해야할 수 있음
- 같은 로직으로 처리하려 했으나, 처리하는 시간에 따라 값이 다르게 계산되는 경우가 존재함
- 4) 데이터 프로토콜의 부재
- 데이터를 실시간으로 적재하는 부분은 데이터 엔지니어 직군이, 모델링을 위해 데이터 전처리하는 부분은 데이터 사이언티스트(혹은 머신러닝 엔지니어)가 진행하는데, 두 조직의 프로토콜이 없는 경우도 있음
- 5) 서비스에서 많은 머신러닝 모델이 생기는 경우
- 머신러닝 모델이 소수인 경우(1-2개) 단일 모델을 위해 시스템을 구축하는 것은 비효율적이라 판단할 수 있음
- 하지만 모델이 많아지고, 동일한 Feature를 사용할 경우엔 각각의 모델링 과정에서 Feature Engineering을 진행하면 모델의 개수만큼 연산을 진행해야 함
- 즉, 재사용성이 떨어짐
- 6) 과거 Feature를 사용해야 하는 경우
- 보통 시간과 관련된 Feature들이 많은데, 이 Feature들은 시간이 지나며 점점 값이 바뀜(1월 1일 시점에 최근 1시간 전 데이터와 1월 5일 시점에 최근 1시간 전 데이터는 다름)
- 이럴 경우 index가 있거나, Backfill 기능이 있어야 함
- 혹시 잠시 Feature 관련 코드가 장애날 경우에 과거 값을 계산해야할 수 있음
- Backfill : 간단히 말해서 예전 데이터를 계산
Feature Store
- 발생할 수 있는 문제들을 위해 Feature Store를 구축
- Feature Store Layer를 추가한다고 표현함
- Feature Store의 오픈소스는 Hopsworks와 feast가 존재
- 데이터를 Train, Serving 할 때 모두 사용할 수 있도록 통합해서 저장함
Feature Store 예시
- 다양한 회사들이 자신들이 구축한 Feature Store에 대해 발표함
- featurestore.org에 다양한 Feature Store에 대한 영상들이 있음
- 많은 회사들이 비슷한 개념으로 개발함
- Hopsworks의 Feature Store
- Document
- WHITE PAPER
- White Paper(백서)를 참고하면 어떤 구조로 만들었는지 나옴
- Offline Features와 Online Features를 저장함
- Hopsworks의 End to End System
- Gojek의 Feast
- Github
- Offline은 BigQuery에 저장하고, Online은 BigTable에 저장함
- Google Cloud Platform과 공동으로 개발한 프로그램
- Uber의 Michelangelo
- 우버의 머신러닝 플랫폼으로 Feature Store 및 다양한 기능이 제공됨
- Uber Techblog Meet Michelangelo: Uber’s Machine Learning Platform, Evolving Michelangelo Model Representation for Flexibility at Scale에 나와있음
- AirBnB의 Zipline
- Netflix의 Metaflow
- Github
- Airflow의 Dependency를 정의하는 것을 코드로 진행하는듯
- featurestore.org에 나와있는 Feature Store Comparison 정리한 표
Hopsworks
- Homepage
- Hopsworks는 전체 프레임워크 단위고, Feature Store가 그 중에 한 부분
- 링크에 AWS, GCP, 단일 인스턴스에 설치하는 방법에 대해 나와있음
- Feature Store
- Feature Store와 함께 프로젝트 생성
- 등록된 Feature Groups을 볼 수 있음. Cached, On Demand 타입인지, Version, 분포(파란색 버튼) 등을 볼 수 있음
- Feature Unit Testing Page
- Feature의 Constraint를 추가할 수 있음. 이 조건들로 데이터 Validation을 실행함
- Feature Store와 함께 프로젝트 생성
Feature 추가하기
from hops import featurestore featurestore.insert_into_featuregroup(features_df, featuregroup_name)
Feature 가져오기
from hops import featurestore features_df = featurestore.get_features(["average_attendance", "average_player_age"])
- Airflow를 사용해 Validation 후, 작업하기도 함
- Github 참고
validation = HopsworksLaunchOperator(dag=dag, project_name=PROJECT_NAME, # Arbitrary task name task_id="validation_job", job_name=VALIDATION_JOB_NAME) # Fetch validation result result = HopsworksFeatureValidationResult(dag=dag, project_name=PROJECT_NAME, # Arbitrary task name task_id="parse_validation", feature_group_name=FEATURE_GROUP_NAME) # Run first the validation job and then evaluate the result validation >> result
- 그 외에도 hopsworks는 데이터 공유하기, 노트북 환경 생성, 제플린, 텐서보드 등 다양한 기능을 제공함
Gojek의 feast
- 공식 문서
- 사용 예시
- 설치는 Docker Composer, Google Kubernetes Engine(GKE)에서 하는 방법에 대해 공식 문서에 나와있음
- BigQuery, Dataflow, Cloud Storage 등 GCP 친화적으로 보임
어떻게 해야할까?
- 현재 주어진 요구사항에 따라 다른 접근이 필요
- 처음부터 Feature Store를 구축하면 좋으나, 지속적으로 모델링하며 어떤 요구사항이 있을지 알 수 없음
- 따라서 처음엔 나이브하게 시작하는 것도 좋다고 생각
- 자주 사용하는 Feature를 Airflow 등에서 스케쥴링
- 1시간별 수요를 Table로 N분 단위로 스케줄링해서 특정 Table에 저장
- 그러다가 점점 모델이 많아질 때 고도화하면 좋을듯
- Feature Store도 중요하지만, Data가 들어올 때 Validation 체크하는 것도 매우 중요함
- Hopsworks를 직접 실행시켜서 아이디어를 얻은 후, 직접 개발하는 것이 더 좋을 수 있음(Hopsworks는 엄청 큰데, 모두 회사에 필요할까?란 고민이 필요)
- 다음 글은 Hopsworks를 직접 띄워서, 어떤 구성 요소가 있고 어떻게 활용할지에 대해 작성하겠습니다 :)
Reference
- featurestore.org
- The Feature Store - Jim Dowling : Hopsworks에 대한 영상
- Accelerating Machine Learning with the Feature Store Service
- Introducing Feast: an open source feature store for machine learning
- Feature Stores: Components of a Data Science Factory
- Feature Store: The missing data layer in ML pipelines?
- Rethinking Feature Stores -gojek feast
카일스쿨 유튜브 채널을 만들었습니다. 데이터 사이언스, 성장, 리더십, BigQuery 등을 이야기할 예정이니, 관심 있으시면 구독 부탁드립니다 :)
PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다
이 글이 도움이 되셨거나 다양한 의견이 있다면 댓글 부탁드립니다 :)