Skip to content
Learni
Voir tous les tutoriels
Machine Learning

Comment déployer un Feature Store avec Feast en 2026

Read in English

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

terminal
mkdir feast-advanced && cd feast-advanced
feast init feature_repo --template local
cd feature_repo
pip install feast[redis,spark]==0.38.0

Initialise 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

feature_store.yaml
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: 2

Configure 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

features.py
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

terminal
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

query.py
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

feast-deployment.yaml
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_repo

Dé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.