MLOps 시스템에서 Feature Store는 빠지지 않는 구성 요소 중 하나이다. 하지만 여타 다른 구성요소들과는 달리 한번에 이해가 잘 되지 않아, 이번 기회에 개념을 정리해본다.

Feature Store는 무엇인가?

Feature Store는 머신러닝 모델 또는 데이터사이언스 프로젝트에 사용되는 Feature를 저장, 관리, 제공하는 중앙저장소 역할을 수행하기 위해 등장한 개념이다. Feature Store가 있음으로서 여러가지 모델에 사용되는 반복적인 Feature Engineering 작업을 줄이고, Feature들을 관리하고 추적할 수 있다.

Feature Store는 왜 필요한가?

개인적으로 처음에는 잘 와닿지 않았다. 아마도 실무를 하던 각각의 ML엔지니어, 데이터사이언티스트들이 각자 담당하던 모델의 실험과 서비스의 PoC 단계의 업무만 해와서 그럴 수도 있었다. 마침 이러한 예시가 있어 Feature Store를 잘 이해할 수 있게 되었다.

E-commerce 기업의 Feature Store.

기업 “가나다"는 제품에 대한 고객 사용 후기 데이터를 기반으로 ML모델을 개발하고자 한다. ML조직의 각 팀이 맡은 프로젝트는 다음과 같다.

  • 팀A - 제품 사용 후기의 [긍정/부정] 분류 모델
  • 팀B - 텍스트 기반 개인화 추천시스템
  • 팀C - 유해발언 탐지 모델

각 팀은 모델링 과정에서 여러가지 실험을 하고 있으며, 다양한 feature representation을 사용하고 있다.

  • W2V 기반 embedding
  • BERT 기반 embedding
  • Sentence-BERT 기반 embedding

각 팀들은 Feature Store가 있기에 매 실험마다 Embedding 을 생성할 필요가 없게 되었고, Feature Store에 저장된 각기 다른 Embedding을 가져와 사용할 수 있게 되었다. 또한 각 Embedding은 각기 다른 데이터 정제, tokenizer 등이 사용되었는데, 이 또한 Feature Store에 기록되어 있어 효율적인 모델링을 진행할 수 있게 되었다.

이를 가지고 다양하게 모델을 학습할 수 있음.

각 팀은 다양한 목적을 위해 다양한 모델 구조를 적용하고 실험할 수 있음

Feature Store의 효과

위의 예시를 통해서 Feature Store의 도입은 다음과 같은 효과가 있다

  • 한번 생성한 Feature를 여러 팀이 여러번 재사용 가능 (“compute once, used by many”)
  • 각기 다른 팀 또는 조직에서 사용하는 Feature가 중앙집중식으로 관리되기 때문에 각 팀의 도메인에 특화된 Feature Engineering 관점의 노하우나 인사이트가 공유될 수 있다.
  • 중앙집중식으로 관리되기에 버전이 기록되고, 품질과 일관성이 보장된다.
    • 모델에 사용된 Raw Data
    • 생성된 Feature
    • Feature 를 생성하는데 사용된 전처리 기법 / Feature Engineering 기법

Feature Store는 어떻게 만들어야 할까?

Feature Store 는 현재 서비스 또는 구축된 인프라에 기반하여 구축하는 것이 적합하지만, 크게는 3가지 부분을 중점적으로 염두에 둬야 한다.

Ingestion // Feature Store // Consumption

Ingestion

Feature를 생성하기 위한 Raw Data를 적재되는 부분이다. Data는 online / offline에 따라 접근하는 방식이 다르다.

  • online
    • streaming data 의 성격을 띄며, log 또는 api call 가 online 데이터의 예시.
    • streaming 환경에서는 Raw Data가 적재되는 즉시 Feature로 생성되어야 하므로 online process에 맞는 접근법이 필요함.
    • streaming process를 위한 Kafka 같은 도구를 사용할 수 있음.
    • Feature Store에는 Data ID 또는 Entity ID를 통해 Feature에 바로 접근할 수 있도록 Key-Value 형태로 저장되는 것이 적합함.
  • offline
    • batch data의 성격을 띈다. 따라서 데이터베이스에서부터 AWS S3와 같은 다양한 저장소가 사용될 수 있다
    • Scheduler 등을 사용해 처리하고 저장하는 것이 적합하다.

Consumption

Feature Store에 저장된 Feature를 추출하여 사용하는 부분이다. 크게 Training 과 Model Serving으로 용도가 나뉠 수 있다.

  • Training:
    • 모델링 과정에서의 실험 또는 서비스를 위한 모델 학습을 위해 Feature Store로부터 Feature를 불러와 사용할 수 있다.
  • Model Serving
    • 새로운 데이터에 대한 Inference Request가 발생했을 때, 이를 Feature Store를 통해 Feature를 생성하고 Feature Store에 적재하거나, 이미 있는 Entity의 경우 Feature Store에서 Feature를 바로 사용할 수 있다.
    • 단, 이 과정에서 유의해야할 점은 서비스 단계에서 사용하는 것인만큼 Latency가 최소화 되고 빠르게 Feautre를 사용할 수 있어야 한다.

Feature Store

실제로 생성된 Feature를 저장하는 부분이다.

  • 저장 및 Feature 추출
    • Bulk Data에 대한 Feature
      • train / experimentation을 위해서 Dataset에 대한 Feature를 한번에 효율적으로 추출할 수 있어야 한다.
      • 이에 적합한 저장소는 HDFS / S3 / Database / Redshift 등이 있다.
    • 개별 Entity 에 대한 Feature
      • Inference 를 위한 개별 Entity의 Feature를 빠르게 추출할 수 있어야 한다.
      • key(Entity ID)-value(Feature) 의 dictionary 형태가 적합하며, Redis 등의 적합한 저장소로 사용된다.
  • Feature Registry
    • 생성된 Feature에 대한 버저닝, 정보 추적 등 Metadata가 기록된 부분이다. 이 정보는 api를 통해서 제공도 가능하다.
  • Monitoring
    • failure / alert / logging 등 Feature Store 또한 독립된 시스템으로, 모니터링이 동반되어야 한다.
    • 또한 저장된 Data와 Feature에 대하여 사용자의 편의를 위해 조회할 수 있도록 data availability / feature availability 가 조회될 수 있다.

마무리하며

Feature Store에 대해 알아보면서, 관리해야하는 모델이 하나라면 당장 필요한 부분은 아니지만, Data 조직의 규모가 커지고 복수의 ML기반 서비스와 모델을 관리해야 한다면 효율성과 조직의 지속가능성을 위해 필수로 갖춰야 하는 요소라는 것과, 각 조직의 니즈에 맞게 Feature Store를 구축하는 것이 가장 큰 고민이 필요한 부분이라는 점을 확실히 체감하게 되었다.

다음 포스팅에서는 가장 널리 알려진 오픈소스 기반 Feature Store를 간단하게 사용해보면서 실제로 어떻게 적용해볼 수 있는지 알아볼 계획이다.

Reference