Pourquoi Kubernetes pour le ML ?

La majorité des projets ML restent coincés au stade du notebook Jupyter. Passer à la production nécessite une infrastructure qui gère l'autoscaling, le versionnage des modèles, le rollback automatique et le monitoring en temps réel. Kubernetes excelle dans tous ces domaines.

Sur une mission récente pour une Fintech parisienne, nous avons migré une infrastructure ML héritée vers Kubernetes sur AWS EKS. Résultats : coûts cloud réduits de 70%, déploiements 12x plus rapides, 99.9% d'uptime.

La stack MLOps complète : MLflow (tracking & registry) → KubeFlow Pipelines (orchestration) → Seldon Core (serving) → Prometheus/Grafana (monitoring) → ArgoCD (GitOps).

Architecture cible

Notre architecture s'articule autour de 4 composants clés :

Configuration Kubernetes pour ML

apiVersion: apps/v1 kind: Deployment metadata: name: fraud-model-v2 labels: app: fraud-detection version: "2.0" spec: replicas: 3 selector: matchLabels: app: fraud-detection template: metadata: labels: app: fraud-detection version: "2.0" spec: containers: - name: model-server image: your-registry/fraud-model:v2.0 resources: requests: memory: "2Gi" cpu: "500m" limits: memory: "4Gi" cpu: "2" env: - name: MLFLOW_TRACKING_URI valueFrom: secretKeyRef: name: mlflow-secret key: tracking-uri

MLflow : versionnage et transition entre modèles

import mlflow import mlflow.sklearn # Entraînement avec tracking MLflow with mlflow.start_run(run_name="fraud_detector_v2") as run: mlflow.log_params({"n_estimators": 200, "max_depth": 8}) model.fit(X_train, y_train) mlflow.log_metric("accuracy", accuracy) mlflow.log_metric("f1_score", f1) # Enregistrement dans le registry mlflow.sklearn.log_model( model, "fraud_model", registered_model_name="FraudDetector" ) # Promotion en production client = mlflow.tracking.MlflowClient() client.transition_model_version_stage( name="FraudDetector", version=2, stage="Production" )

Monitoring de la data drift avec Evidently

La data drift — quand la distribution des données de production s'éloigne des données d'entraînement — est la principale cause de dégradation des modèles en production. Evidently AI permet de détecter ce phénomène automatiquement.

from evidently.report import Report from evidently.metric_preset import DataDriftPreset # Rapport de drift quotidien report = Report(metrics=[DataDriftPreset()]) report.run( reference_data=training_data, current_data=production_data_today ) # Alerte si drift détecté summary = report.as_dict() if summary["metrics"][0]["result"]["dataset_drift"]: send_alert("Data drift détectée — réentraînement requis")

Résultats de la migration

Après 3 mois de migration pour notre client Fintech :