Introduction
Un Feature Store comme Feast permet de centraliser la gestion des features ML, d'éliminer les data leaks et d'assurer la cohérence entre entraînement et inférence. En 2026, les équipes exigent des déploiements haute disponibilité avec online store faible latence et traçabilité complète. Ce tutoriel vous guide pas à pas dans la mise en place d'une architecture Feast avancée, incluant registry, offline store et CI/CD. Vous apprendrez à versionner les features, à matérialiser les données et à exposer des endpoints temps réel. Chaque étape est accompagnée de code prêt pour la production.
Prérequis
- Python 3.10+
- Docker et Kubernetes (EKS/GKE)
- Connaissances avancées de PySpark et Redis
- Compte AWS/GCP avec droits IAM
- Feast 0.38+ installé
Initialisation du projet Feast
mkdir feast-advanced && cd feast-advanced
feast init feature_repo --template local
cd feature_repo
pip install feast[redis,spark]==0.38.0Initialise un dépôt Feast structuré et installe les dépendances nécessaires pour Redis et Spark. Évite les conflits de versions en épinglant la release 0.38.
Configuration du Feature Store
project: advanced_feast
registry:
registry_type: sql
path: postgresql://user:pass@postgres:5432/feast
provider: local
online_store:
type: redis
connection_string: redis://redis:6379
offline_store:
type: spark
spark_conf:
spark.master: "local[*]"
entity_key_serialization_version: 2Configure un registry PostgreSQL pour la traçabilité, un online store Redis pour la latence <10ms et Spark pour les calculs offline. La version de sérialisation 2 assure la compatibilité future.
Définition des entités et features
from feast import Entity, FeatureView, FileSource, ValueType
from datetime import timedelta
user = Entity(name="user_id", join_keys=["user_id"], value_type=ValueType.INT64)
user_features_source = FileSource(
path="s3://bucket/user_features.parquet",
timestamp_column="event_timestamp",
)
user_features = FeatureView(
name="user_features",
entities=[user],
ttl=timedelta(days=7),
source=user_features_source,
schema=[
Field(name="age", dtype=ValueType.INT32),
Field(name="income", dtype=ValueType.FLOAT),
],
online=True,
)Définit l'entité utilisateur et la feature view avec TTL et schéma explicite. Le champ online=True active automatiquement la matérialisation Redis.
Application et matérialisation
feast apply
feast materialize-incremental $(date -u +'%Y-%m-%dT%H:%M:%S')Applique les définitions dans le registry et matérialise les features récentes dans Redis. Utilisez materialize-incremental en production pour limiter les coûts.
Requête des features en production
from feast import FeatureStore
import pandas as pd
store = FeatureStore(repo_path=".")
features = store.get_online_features(
features=[
"user_features:age",
"user_features:income",
],
entity_rows=[{"user_id": 12345}],
).to_df()Récupère les features en temps réel depuis Redis avec une latence inférieure à 10 ms. Gérez toujours les cas où une feature est absente.
Déploiement Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: feast-serving
spec:
replicas: 3
template:
spec:
containers:
- name: feast
image: feastdev/feature-server:0.38.0
env:
- name: FEAST_REPO_PATH
value: /app/feature_repoDéploie le serving en haute disponibilité avec 3 réplicas. Montez le repo via ConfigMap ou init container pour les mises à jour sans downtime.
Bonnes pratiques
- Versionnez systématiquement les feature views avec des tags Git
- Utilisez des TTL courts sur les features volatiles
- Monitorer la fraîcheur des données via Prometheus
- Séparez les environnements dev/staging/prod via des registries distincts
- Implémentez des tests unitaires sur les transformations Spark
Erreurs courantes à éviter
- Oublier de matérialiser les features avant le premier appel online
- Utiliser des noms de features trop longs (>50 caractères)
- Ignorer les conflits de clés d'entité entre vues
- Ne pas configurer de rétention sur le registry PostgreSQL
Pour aller plus loin
Approfondissez la gouvernance des features et les pipelines MLOps avec nos formations Learni.