이 튜토리얼은 Feast for Redis 빠른 시작을 단계별로 안내하며, Redis를 온라인 피처 스토어로 활용해 머신러닝에 적용하는 엔드투엔드 예제를 다룹니다. 기본 Feast Quickstart 튜토리얼을 기반으로 하지만, 기본 온라인 스토어 대신 Redis 온라인 스토어를 사용하여 대규모 실시간 예측을 구현하는 방법을 소개합니다. Feast나 Redis가 익숙하지 않은 분들에게는 이 튜토리얼이 가장 빠른 시작점이 될 것입니다. 높은 수준의 개요는 'Feature Stores and Feast using Redis' 블로그 아티클을 참고하시고, 더 자세한 정보와 추가 리소스는 이 글의 마지막 부분에서 확인할 수 있습니다.
이 튜토리얼에서 다음 작업을 수행하게 됩니다:
- Parquet 파일 오프라인 스토어와 Redis 온라인 스토어를 갖춘 로컬 피처 스토어 배포
- Parquet 파일의 데모 시계열 피처를 활용한 학습 데이터셋 구축
- 오프라인 스토어에서 Redis 온라인 스토어로 피처 값 머터리얼라이즈(적재)
- 추론(inference)을 위해 Redis 온라인 스토어에서 최신 피처 조회
아래 안내 단계에 따라 Google Colab 또는 로컬 환경에서 튜토리얼을 실행할 수 있습니다.
Feast 핵심 요약
Feast(Feature store)는 Linux Foundation AI & Data Foundation에 속한 오픈소스 피처 스토어입니다. 저지연 온라인 스토어(실시간 서빙용) 또는 오프라인 스토어(모델 학습 및 배치 서빙용)에서 모델에 피처 데이터를 제공할 수 있으며, 중앙 레지스트리를 통해 머신러닝 엔지니어와 데이터 사이언티스트가 ML 유스케이스에 필요한 피처를 쉽게 검색하고 발견할 수 있도록 지원합니다. 아래는 Feast의 전체적인 아키텍처입니다:
Feast는 Python 라이브러리 + 선택적 CLI 형태로 제공되며, pip를 통해 설치할 수 있습니다. 설치 방법은 본 튜토리얼에서 곧 다루게 됩니다.
Feast와 Redis의 조합은 이 워크플로우에서 흔히 발생하는 여러 문제를 해결합니다:
- 학습-서빙 불일치(training-serving skew)와 복잡한 데이터 조인: 피처 값이 여러 테이블에 분산되어 있는 경우가 많으며, 이를 조인하는 작업은 복잡하고 느리며 오류가 발생하기 쉽습니다.
- Feast는 검증된 로직으로 테이블을 조인하며 시점(point-in-time) 정확성을 보장하여 미래의 피처 값이 모델에 누출되지 않도록 합니다.
- Feast는 검증된 로직으로 테이블을 조인하며 시점(point-in-time) 정확성을 보장하여 미래의 피처 값이 모델에 누출되지 않도록 합니다.
- 저지연·대규모 온라인 피처 가용성: 추론 시점에 모델은 즉시 사용할 수 없는 피처에 접근해야 하는 경우가 많고, 이를 실시간으로 사전 계산해야 합니다.
- Feast를 Redis와 함께 배포하면 필요한 피처가 추론 시점에 일관되게 최신 상태로 준비되며, 낮은 지연 시간과 높은 처리량을 확보할 수 있습니다.
- Feast를 Redis와 함께 배포하면 필요한 피처가 추론 시점에 일관되게 최신 상태로 준비되며, 낮은 지연 시간과 높은 처리량을 확보할 수 있습니다.
- 피처 재사용성과 모델 버전 관리: 조직 내 서로 다른 팀이 프로젝트 간 피처를 재사용하지 못해 중복된 피처 생성 로직이 만들어지곤 합니다. 또한 A/B 테스트 등을 위해 모델의 데이터 의존성을 버전 관리해야 하는 경우도 있습니다.
- Feast는 기존에 사용된 피처의 검색과 협업을 가능하게 하고, 피처 세트(feature services)를 통한 버전 관리를 지원합니다.
- 피처 변환(feature transformation) 기능을 통해 사용자는 온라인/오프라인 유스케이스와 모델 전반에서 변환 로직을 재사용할 수 있습니다.
Feast + Redis 튜토리얼 개요
이 튜토리얼에서는 피처 스토어를 활용해 차량 공유 앱 드라이버 만족도 예측 모델의 학습 데이터를 생성하고 온라인 모델 추론을 구동합니다. 데모 데이터 시나리오는 다음과 같습니다:
- 일부 드라이버에게 설문조사를 진행하여 차량 공유 앱 사용 경험에 대한 만족도를 파악했습니다.
- 나머지 사용자에 대해서도 드라이버 만족도를 예측하여, 잠재적으로 불만족스러워할 수 있는 사용자에게 선제적으로 연락하고자 합니다.
튜토리얼 단계
- Redis 설치 후 백그라운드에서 Redis 서버 실행
- Redis 지원 Feast 설치
- 피처 리포지토리 생성 및 Redis를 온라인 스토어로 설정
- 피처 정의 등록 및 피처 스토어 배포
- 학습 데이터 생성
- Redis 온라인 스토어에 피처 적재
- 추론용 피처 벡터 조회
1단계: Redis 설치 및 백그라운드 실행
다음 방법 중 하나를 선택하여 Redis를 설치합니다:
Ubuntu:
$ sudo snap install redis
Docker:
$ docker run --name redis --rm -p 6379:6379 -d redis
Mac (Homebrew):
$ brew install redis
그 외 다양한 Redis 설치 방법은 공식 문서에서 확인할 수 있으며, 추가 설정 정보는 Redis Quick Start 가이드를 참고하세요.
2단계: Redis 지원 Feast 설치
pip를 사용하여 Feast SDK와 CLI를 설치합니다:
$ pip install 'feast[redis]'
3단계: 피처 리포지토리 생성 및 Redis 온라인 스토어 설정
피처 리포지토리는 피처 스토어의 설정과 개별 피처 정의를 담고 있는 디렉터리입니다.
3-a단계: 피처 리포지토리 생성
새 피처 리포지토리를 만드는 가장 쉬운 방법은 feast init 명령어를 사용하는 것입니다. 이 명령은 초기 데모 데이터가 포함된 스캐폴딩(scaffolding)을 생성합니다.
$ feast init feature_repo $ cd feature_repo
실행 결과:
Creating a new Feast repository in /Users/nl/dev_fs/feast/feature_repo
생성된 데모 리포지토리의 구성은 다음과 같습니다:
feature_store.yaml: 데이터 소스와 온라인 스토어를 설정하는 데모 구성 파일example.py: 데모 피처 정의 파일data/: 원본 데모 Parquet 데이터 디렉터리
3-b단계: YAML 설정 파일에서 Redis를 온라인 스토어로 구성
Redis를 온라인 스토어로 사용하려면 feature_store.yaml 파일에서 online_store의 type과 connection_string 값을 다음과 같이 설정해야 합니다:
project: my_project |
provider는 원본 데이터의 위치(학습 데이터 생성 및 서빙용 피처 값 산출)를 정의하며, 이 데모에서는 로컬을 사용합니다. online_store는 서빙을 위해 피처 값을 머터리얼라이즈(적재)할 온라인 스토어 데이터베이스의 위치를 정의합니다.
참고로 위 설정은 기본 온라인 스토어를 사용하는 튜토리얼 기본 YAML 파일과 다릅니다. 기본 설정은 다음과 같습니다:
project: my_project |
위와 같이 YAML 파일에 online_store 관련 두 줄(type: redis, connection_string: localhost:6379)만 추가하면 Feast가 Redis를 온라인 스토어로 읽고 쓸 수 있습니다. Redis Online Store는 Feast 코어 코드에 포함되어 있으므로, 별도의 플러그인 없이 즉시 사용할 수 있습니다(out-of-the-box).
3-c단계: example.py의 데모 피처 정의 살펴보기
example.py에 정의된 데모 피처 정의를 확인해 보겠습니다. 터미널에서 cat example.py 명령으로 내용을 볼 수 있습니다.
3-d단계: 원본 데이터 확인
마지막으로 원본 데이터를 살펴보겠습니다. 이 데모의 원본 데이터는 로컬 Parquet 파일에 저장되어 있으며, 차량 공유 앱에서 드라이버의 시간별 통계를 기록한 데이터셋입니다.
4단계: 피처 정의 등록 및 피처 스토어 배포
이제 feast apply를 실행하여 example.py에 정의된 피처 뷰(feature view)와 엔티티(entity)를 등록합니다. apply 명령은 현재 디렉터리의 Python 파일을 스캔하여 피처 뷰/엔티티 정의를 찾아 객체를 등록하고 인프라를 배포합니다. 이 예제에서는 앞서 살펴본 example.py를 읽어 Redis 온라인 스토어를 설정합니다.
$ feast apply
실행 결과:
Registered entity driver_id |
5단계: 학습 데이터 생성
모델을 학습시키려면 피처와 레이블(label)이 필요합니다. 일반적으로 레이블 데이터는 별도로 저장됩니다(예: 사용자 설문조사 결과 테이블 하나, 피처 값 테이블 여러 개).
사용자는 타임스탬프가 포함된 레이블 테이블을 조회한 뒤, 이를 entity dataframe으로 Feast에 전달하여 학습 데이터를 생성할 수 있습니다. 많은 경우 Feast는 관련 테이블을 지능적으로 조인하여 필요한 피처 벡터를 만들어 줍니다.
- 타임스탬프를 포함하는 이유는, 동일 드라이버의 여러 시점별 피처를 모델 학습에 활용하기 위함입니다.
Python (아래 코드를 gen_train_data.py 파일로 저장한 후 실행하세요):
실행 결과:
----- Feature schema ----- |
6단계: Redis 온라인 스토어에 피처 적재
이제 피처 데이터를 Redis 온라인 스토어에 적재(머터리얼라이즈)하여, 모델이 온라인 예측을 위해 최신 피처를 서빙받을 수 있도록 준비합니다. materialize 명령은 특정 과거 시간 범위에 걸쳐 피처를 온라인 스토어에 머터리얼라이즈할 수 있게 해줍니다. 이 명령은 지정된 시간 범위 내 모든 피처 뷰에 대해 배치 소스를 조회하고, 최신 피처 값을 설정된 온라인 스토어에 적재합니다. materialize-incremental 명령은 마지막 머터리얼라이즈 호출 이후 오프라인 스토어에 새로 도착한 데이터만 수집합니다.
$ CURRENT_TIME=$(date -u +"%Y-%m-%dT%H:%M:%S")
$ feast materialize-incremental $CURRENT_TIME
실행 결과:
Materializing 1 feature views to 2021-08-23 16:25:46+00:00 into the redis online store. |
7단계: 추론용 피처 벡터 조회
추론 시점에는 get_online_features()를 사용하여 Redis 온라인 피처 스토어에서 여러 드라이버의 최신 피처 값(원래 배치 소스에만 존재했던 값)을 빠르게 읽어와야 합니다. 이렇게 조회한 피처 벡터는 모델 입력으로 전달됩니다.
Python (아래 코드를 get_feature_vectors.py 파일로 저장한 후 실행하세요):
실행 결과:
{ |
축하합니다! 튜토리얼의 마지막에 도달했습니다. 백그라운드에서 실행 중인 Redis 서버를 종료하려면 redis-cli shutdown 명령을 사용하면 됩니다.
튜토리얼 요약
이 튜토리얼에서는 Parquet 파일 오프라인 스토어와 Redis 온라인 스토어를 갖춘 로컬 피처 스토어를 배포했습니다. 그런 다음 Parquet 파일의 시계열 피처로 학습 데이터셋을 구축하고, 오프라인 스토어의 피처 값을 Redis 온라인 스토어로 머터리얼라이즈했습니다. 마지막으로 추론을 위해 Redis 온라인 스토어에서 최신 피처를 조회했습니다. Redis를 온라인 스토어로 사용하면 실시간 ML 유스케이스에서 최신 피처를 매우 빠르게 읽을 수 있으며, 낮은 지연 시간과 높은 처리량을 대규모로 확보할 수 있습니다.
다음 단계
- Feast Concepts 페이지에서 Feast 데이터 모델을 이해하고, Feast Architecture 페이지도 함께 읽어보세요.
- Feast with Redis 전체 설정 가이드와, Redis에 피처 값을 저장하는 데 사용되는 데이터 모델에 대한 문서를 확인하세요.
- 케이스 스터디 – 동료 기업들의 사례에서 배우기: Wix, Swiggy, Comcast, Zomato, AT&T, DoorDash, iFood 등 여러 기업이 Redis를 온라인 스토어로 활용하는 피처 스토어를 어떻게 사용하는지 알아보세요. 특히 Gojek, Udaan, Robinhood는 Feast with Redis를 온라인 스토어로 활용하고 있습니다.
- Azure Managed Feature Store with Feast and Redis에 대한 글을 읽고, Getting started with Feast on Azure 튜토리얼을 비롯한 다른 Feast 튜토리얼도 따라 해 보세요.
- Feast와 Redis 각각의 일반 제품 소개 페이지에서 더 많은 정보를 찾아볼 수도 있습니다.
Slack에서 다른 Feast 사용자 및 기여자들과 함께 커뮤니티에 참여해 보세요!