호돌찌의 AI 연구소
article thumbnail

이번 글은 Feast Feature Store를 생성해, 각 Feature들을 정의해 Stoer에 배포하는 것까지 진행해보겠습니다.

 


1. 준비작업

Feature store 작업 경로를 설정하여 이동부터 하겠습니다. 

mkdir -p mlops/feature_store && cd mlops/feature_store

 

그 후, Jupyter Lab Docker Container 실행하겠습니다. 그 후 localhost:8888에 접속하여 'password'를 입력하여 접속합니다. 컨테이너 다운로드한 후 docker ps -a를 실행해 한번 더 확인해줍니다. 도커 명령어에서 $PWD 부분은 주피터 폴더와 마운트 된 경로입니다. 따라서 /jupyter 폴더 가서 새 노트북 만들어서 수행하면 됩니다. jupyter 폴더에서 새 노트북 파일을 생성합니다.

docker run -d --name jupyter -p 8888:8888 -e JUPYTER_TOKEN='password' \
-v "$PWD":/home/jovyan/jupyter --user root --restart=always \
-it jupyter/base-notebook start.sh jupyter lab


Feast를 설치합니다. 그 후 runtime 재시작을 합니다.

%%sh
pip install feast -U -q # -U 지정된 모든 패키지를 최신으로 업데이트, -q는 출력 최소화
pip install Pygments -q # 코드 강조 기능 패키지


2. Feast

Feast 저장소를 먼저 초기화 시킵니다. 그러면 user 폴더 밑에 feature_repo가 생기는데, 이 부분이 feature 저장소라고 생각하면 됩니다. 

!feast init feature_repo

 

생성된 Feature 저장소를 확인하겠습니다. 

%cd feature_repo
!ls -R

 

각 폴더/파일을 확인해보겠습니다. example.py는 데모 데이터의 Feature 정의이며, Feast가 Feature store를 어떻게 구성하는지가 중요합니다. 

!pygmentize -f terminal16m example.py

내용을 살펴 볼 수 있다. 

Feature View에는 Feature, Data Source, Entity 만 정의를 하여야합니다. 

1) Feast에서 제공하는 Parquet형식의 데모데이터의 data source는 다음과 같습니다. 

2) Feature : name, dtype, labels 정의를 뜻합니다.

3) Entitiy : 관련된 Feature들의 모음으로, Primary key 역할을 합니다. 아래 그림 예시를 참고하면 됩니다.

 

3. Online Store & Offline Store

Online store의 특징은 다음과 같습니다.

  • latency 가 낮은 Online feature 조회에 사용됩니다.
  • materialize 명령을 사용하여 Feature View 의 데이터 원천으로부터 Online Store로 load 됩니다.
  • Online Store 의 Feature 저장 방식은 데이터 원천의 저장 방식을 그대로 따릅니다.
  • Online Store 와 데이터 원천 간의 가장 큰 차이점은 entity key마다의 최신 Feature 값만 저장됩니다. 누적 값들이 저장되지 않습니다.

 

Rawdata 예시(좌측) / online store 모습(우측)

 

Offline store 의 특징은 다음과 같습니다.

  • 누적되는 Feature 들로부터 훈련 데이터를 생성할 때 사용합니다.
  • 빠른 추론을 위해 Feature 들이 필요할 때 Offline Store로부터 Feature 들을 materializing 하여 load 합니다.

 

 

 

 

 

 

 

 

 

4. Feature Service

Feature Service는 여러 개의 Feature View 를 포함할 수 있고, ML모델 당 하나를 생성하여 모델이 사용하는 Feature를 추적할 수 있습니다. 아래와 같은 특징이 있습니다.

- 누적된 Feature 값들을 얻기 위한 Feature View 들을 통해 훈련 데이터를 생성해내는 데 사용할 수 있습니다.

- 단일 데이터셋은 여러 개의 Feature view 들로부터의 Feature 들로 구성 가능합니다

- Online Store 나 Offline Store 로부터 Feature 들을 추출할 때 여러 개의 Feature Views로 구성된 Feature service로부터 검색할 수 있습니다

from feast import FeatureStore
# Store 초기화
feature_store = FeatureStore('.')
# Feature Serivce 추출
feature_service = feature_store.get_feature_service("driver_activity")
# 해당 Feature Service 에 해당하는 Feature 들을 entity_dict 기준으로 추출
# 1. Online Store
features = feature_store.get_online_features(
    features=feature_service, entity_rows=[entity_dict]
)

 

 

5. feast apply

먼저 원본 데이터 확인해보곘습니다.

import pandas as pd
pd.read_parquet("data/driver_stats.parquet")

 

그 후 정의된 Feature 들을 적용(배포)합니다. 적용 전에 feature_repo에 있는 노트북 관련 파일을 삭제하고 수행하겠습니다.

!rm -rf .ipynb_checkpoints/
!feast apply

이렇게 apply를 수행하면 yaml 파일대로 적용이 되고 정의된 Feature들이 배포되며, 하나의 레지스트리가 등록이 됩니다. 

 

 

6. registry, provider

  • feature_store.yaml : registry, provider, online_store 경로를 설정할 수 있습니다.
!pygmentize feature_store.yaml

 

 

Registry는 일반적인 저장소와 다르게, 모든 피처들의 정의와 메타데이터가 모여있는 곳이며, 작업자들의 공동 작업을 가능하게 합니다. 즉, 모든 Feature 들의 정의와 메타데이터가 모여 있는 곳입니다. 특징은 다음과 같습니다. 

  • 작업자들의 공동 작업을 가능하게 하며 Feast 배포마다 하나의 registry 가 존재합니다.
  • 파일 기반을 기본으로 하며 Local, S3, GCS를 기반으로 할 수 있습니다.
  • entities, feature views, feature services 등의 registry 구성 요소들은 apply 명령에 의해 업데이트되지만, 각 구성 요소들의 메타데이터는 materialization과 같은 작업에 의해 업데이트 가능합니다.
  • registry 내 모든 Feature View 들을 확인하고 싶은 경우 아래 명령어를 수행합니다.
from feast import FeatureStore
# 모든 피처뷰 확인!
fs = FeatureStore("/home/jovyan/jupyter/feature/repo/")
print(fs.list_feature_views())

 

 

 

  • registry 내 특정 Feature view를 확인하고 싶은 경우 아래 명령어를 수행합니다.
fs = FeatureStore("/home/jovyan/jupyter/feature/repo/")
fv = fs.get_feature_view(“my_fv1”)

 

 

 

 

provider의 특징은 다음과 같습니다.

  • provider 별로 구성 요소(Offline Store, Online Store, Infra, Computing) 활용합니다.
  • 기본 Provider(Provider의 주체) : Local / GCP / AWS이며, provider의 솔루션 이외에 병행 사용 가능합니다.
    • 예) GCP : DataStore 대신 Redis를 Online Store로 사용합니다.
  • provider를 사용자 정의하여 사용도 가능합니다. 





다음 글에서는 Feature 추출 및 추론을 해보겠습니다. 

 

 


https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 

 

 


profile

호돌찌의 AI 연구소

@hotorch's AI Labs

포스팅이 도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!