Feast 란?
- MLOps에서 등장하는 Feature Store의 Framework중 하나
- ML모델에서 사용하는 Feature들의 정보를 registry를 등록해 정규화된 방식으로 원하는 Feature 를 가져올수 있는 프레임워크입니다.
- 자세한 내용은 공식사이트에서 확인
- https://docs.feast.dev/
Why Feast?
- open source 프로젝트로 다양한 클라우드와 연계해서 사용가능 (AWS, GCP등)
- ML, Data분야에서 사용되는 Python으로 쉽게 설계 가능
- 확장성이 용이함
Feast 구성
- 일단 FeatureView를 통해서 다양한 Feature, Entitiy, Data Source에 접근가능
- Data Source란 말 그대로 Data의 형태
- Feature ? Data의 name ,dtype, labels등을 정의하는 것
- Entity ? 관련된 Feature들의 모임으로 데이터베이스에서 primary key역할을 한다.
- 이러한 구조를 통해 일관된 방식으로 Feature Data를 모델링할수 있게 설계했다.
Feature service
- 여러개의 Feature View로 구성되어 있으며 ML모델당 1개 생성 -> 사용하는 Feature 추적
- Feature View를 통해 훈련 데이터 생성 가능
- 단일 DB는 여러개의 Feature view들로부터 Feature들로 구성
- Online Store
- 최근 들어온 데이터에 한하여 데이터의 값들을 뽑아줌
- materaialize 명령으로 Feature View의 데이터로부터 online store로 로드하게 됨( 최근것부터)
Registry
- 모든 feature들 정의 및 메타데이터 기록
- 작업자들의 협업 용이하게 할수 있음
- Feast 마다 하나의 registry 존재
- feast init feast_repo -> registry 1개
- registry의 Feature view 확인 방법은
fs = FeatureStore('feature_repo').list_feature_views()
- registry 내 특정 Feature view 확인 방법은
fs = FeatureStore("repo")
fv = fs.get_feature_view(“my_fv1”)
Feast Server 구현후 docker conatiner로 띄우는 법
- python 3.11
- feast 0.34
- Docker file
FROM jupyter/base-notebook
WORKDIR /home/jovyan
COPY . /home/jovyan
RUN pip3 install -r requirements.txt
USER jovyan
RUN feast init feature_repo && \
cd feature_repo/feature_repo && \
feast apply && \
feast materialize-incremental $(date +%Y-%m-%d) && \
CMD [ "/bin/sh", "-c", "cd /home/jovyan/feature_repo && feast serve -h 0.0.0.0"]
WORKDIR /home/jovyan
- docker build
docker run -d --name feast-jupyter -p 8888:8888 -p 6566:6566 -p 5001:5001 -e JUPYTER_TOKEN='password' \
-v "$PWD":/home/jovyan/jupyter \
--user root \
-it feast-docker:latest
docker ps -a
- CURL 명령어나 code에서 request를 날려주면
- ex)
curl -X POST \
"http://localhost:6566/get-online-features" \
-d '{
"features": [
"driver_hourly_stats:conv_rate",
"driver_hourly_stats:acc_rate",
"driver_hourly_stats:avg_daily_trips"
],
"entities": {
"driver_id": [1001, 1002, 1003]
}
}'
- 이런식으로 driver_id 에 따른 feature들 (conv_rate,acc_rate,avg_daily_trips)에 대한 feature들을 가져올수가 있음
- Docker 컨테이너를 통해 feast serve를 띄워 외부에서 feature들을 가져 올수가 있음