Feature Store — Практика

Егор Горбань — Data Engineer

Введение

  • Здесь рассмотрим Feast и FeatureForm.
  • Какие ещё инструменты есть — https://www.featurestore.org/
    • Feathr - не поддерживается
    • Hopsworks, Iguazio - условно бесплатные
    • OpenMLDB - может работать не на всех платформах, трудности с установкой, поддерживает только sql.
    • Amazon sagemaker, Databricks - интегрированы с соответствующей инфраструктурой

Feast

Standalone, open-source feature store that organizations use to store and serve features consistently for offline training and online inference

Feast: концепции

Feature View:

  • FeatureView – для model-independent преобразований
  • OnDemandFeatureView – для on-demand преобразований

Source – источник данных.

  • FileSource – из файл
  • RequestSource – из приходящего запроса
  • KafkaSource / KinesisSource – из streaming источника (Alpha version)
  • PushSource – в “manual” режиме

Feast: установка

pip install feast # [ poetry | pdm | pixi ] add feast
feast init --help
# --> local|gcp|aws|snowflake|spark|postgres|hbase|cassandra|rockset|hazelcast|ikv


Установка Cassandra

docker pull cassandra:latest
docker run --name cass_cluster -p 9042:9042 cassandra:latest
docker exec -it cass_cluster cqlsh # <----------- for CLI


Настройка Cassandra

# cqlsh

SHOW HOST

CREATE KEYSPACE IF NOT EXISTS feast_keyspace
    WITH REPLICATION = { 
        'class' : 'SimpleStrategy', 'replication_factor' : 1 
    }
;
DISC KEYSPACES;
# cmd

feast init <name> -t cassandra

FeatureForm

The Virtual Feature Store. Turn your existing data infrastructure into a feature store.

FeatureForm: концепции

  • Поддержка хранилищ (Providers): Postgres, ClickHouse, Redshift, GBQ, Redis, Azure Blob Store, HDFS, S3, Firestore, Cassandra, DynamoDB, MongoDB, Snowflake, etc…
  • Есть поддержка векторных БД: Pinecone, Weaviate
  • К провайдерам привязываются трансформации (sql_transformation / df_transformation)
  • Создаётся Entity, которая аккумулирует в себе фичи и лейблы.
  • Можно создать Training Set для исторического датафрейма.
  • Можно создать On-demand Feature, с которой можно работать так же как с обычной фичей сущности.

FeatureForm: установка

pip install featureform

Запуск

featureform deploy docker --quickstart
export FEATUREFORM_HOST=localhost:7878 
featureform apply --insecure quickstart/definitions.py
  • 1 вариант

    Если вы хотите поменять порты по умолчанию, то сделать это можно в файле <PYTHON3.10_PATH>/site-packages/featureform/deploy.py, заменив числовые значения портов на нужные вам. Иначе придётся останавливать локальные сервисы, чтобы освободить порты 80, 6379 и 5432.

    Если нужно остановить локальный redis:

    /etc/init.d/redis-server stop
    sudo snap stop redis

Если команды запуска не сработают, то

  • 2 вариант
    1. в файле definitions.py заменить все вхождения host=host.docker.internal на host="0.0.0.0"
    2. в файле <PYTHON3.10_PATH>/site-packages/featureform/deploy.py в вызове container = self._client.containers.run убрать ключевое слово ports и добавить network="host"

Сервис доступен по умолчанию на localhost:80