이번 글은 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 값만 저장됩니다. 누적 값들이 저장되지 않습니다.
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) 활용합니다.
- 예) GCP : BigQuery를 Offline Store, Datastore를 Online Store
- 기본 Provider(Provider의 주체) : Local / GCP / AWS이며, provider의 솔루션 이외에 병행 사용 가능합니다.
- 예) GCP : DataStore 대신 Redis를 Online Store로 사용합니다.
- provider를 사용자 정의하여 사용도 가능합니다.
다음 글에서는 Feature 추출 및 추론을 해보겠습니다.
* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'AI > MLOps' 카테고리의 다른 글
[패스트캠퍼스 챌린지 35일차] Feast Server 생성 (0) | 2022.02.27 |
---|---|
[패스트캠퍼스 챌린지 34일차] Feast - Feature 추출 & 추론 (0) | 2022.02.26 |
[패스트캠퍼스 챌린지 32일차] Feast 소개 (0) | 2022.02.24 |
[패스트캠퍼스 챌린지 31일차] Feature Store (0) | 2022.02.23 |
[패스트캠퍼스 챌린지 30일차] Feature Engineering & ML Pipeline (0) | 2022.02.22 |