Aller au contenu principal

Module 10 — Surveillance, alertes et maîtrise de la facture

Un modèle en production évolue même quand personne n'y touche : les données d'entrée changent, la qualité des prédictions dérive, la facture grimpe silencieusement. Ce dernier module met en place les trois surveillances qui séparent un système fiable d'un système suspendu à la vigilance humaine — puis liste les cinq causes de facture surprise qui reviennent dans tous les audits.

Model Monitor : quatre types de surveillance

SageMaker Model Monitor s'installe à côté d'un point de terminaison temps réel (module 7) et exécute périodiquement une tâche de vérification. Il propose quatre analyses distinctes ; le fil rouge en active les deux premières.

TypeCe qu'il surveilleFréquence typique
Qualité des donnéesÉcart des distributions des variables d'entrée par rapport à la référenceToutes les heures
Qualité du modèleÉcart entre prédictions et vérité terrain (quand elle arrive)Chaque jour ou chaque semaine
Dérive de biaisÉcart d'équité entre sous-groupesChaque semaine
Dérive de contributionChangement d'importance des variablesChaque semaine

Sur le fil rouge, la vérité terrain (est-ce que le client a effectivement résilié dans les 30 jours ?) n'arrive qu'au bout d'un mois. La qualité des données, elle, s'observe immédiatement.

Activer la capture des données du point de terminaison

Avant Model Monitor, il faut demander au point de terminaison d'enregistrer chaque requête et chaque réponse dans un préfixe S3 :

from sagemaker.model_monitor import DataCaptureConfig

data_capture = DataCaptureConfig(
enable_capture=True,
sampling_percentage=20, # 20 % des requêtes, suffit statistiquement
destination_s3_uri="s3://resiliation-monitoring/capture/",
)
predicteur = meilleur_estimateur.deploy(
endpoint_name="resiliation-prod",
initial_instance_count=1,
instance_type="ml.m5.large",
data_capture_config=data_capture,
)

Un échantillonnage à 20 % est le compromis usuel : assez pour détecter une dérive en quelques heures, assez peu pour ne pas alourdir S3 (200 000 requêtes/mois × 20 % × 1 Ko = 40 Mo/mois, à quelques centimes).

Créer la ligne de base et planifier la surveillance

La ligne de base est calculée à partir du jeu train.parquet du module 3 :

from sagemaker.model_monitor import DefaultModelMonitor

monitor = DefaultModelMonitor(
role=role,
instance_count=1,
instance_type="ml.m5.xlarge",
volume_size_in_gb=20,
max_runtime_in_seconds=3600,
)
baseline = monitor.suggest_baseline(
baseline_dataset="s3://resiliation-donnees/prepare/v3/train.parquet",
dataset_format=DatasetFormat.parquet(),
output_s3_uri="s3://resiliation-monitoring/baseline/",
)

monitor.create_monitoring_schedule(
monitor_schedule_name="resiliation-monitoring-horaire",
endpoint_input=predicteur.endpoint_name,
output_s3_uri="s3://resiliation-monitoring/rapports/",
statistics=baseline.baseline_statistics(),
constraints=baseline.suggested_constraints(),
schedule_cron_expression="cron(0 * ? * * *)", # toutes les heures
)

Chaque heure, une tâche de traitement lit la capture accumulée depuis la dernière exécution, la compare à la ligne de base, et produit un rapport JSON dans s3://resiliation-monitoring/rapports/. Les violations — variable dont la distribution s'est éloignée au-delà du seuil — génèrent une métrique CloudWatch feature_baseline_drift_<variable>.

Alerter sur dérive et sur facture

CloudWatch Alarms regarde ces métriques et déclenche SNS quand un seuil est franchi :

cw = boto3.client("cloudwatch")
cw.put_metric_alarm(
AlarmName="resiliation-derive-nb-appels",
MetricName="feature_baseline_drift_nb_appels_support_30j",
Namespace="aws/sagemaker/Endpoints/data-metrics",
Statistic="Maximum",
Period=3600,
EvaluationPeriods=2, # 2 heures consécutives
Threshold=0.3, # écart normalisé
ComparisonOperator="GreaterThanThreshold",
AlarmActions=["arn:aws:sns:us-east-1:...:equipe-ia-alertes"],
)

Sur le fil rouge, la dérive du nombre d'appels au support est le premier signal qu'une nouvelle campagne marketing ou un incident réseau modifie le comportement client — souvent bien avant que l'AUC ne chute.

AWS Budgets, la ceinture de sécurité

CloudWatch surveille la métrique, AWS Budgets surveille le portefeuille. Il faut brancher au moins un budget mensuel avec alertes à 50, 80 et 100 % :

budget = boto3.client("budgets")
budget.create_budget(
AccountId="123456789012",
Budget={
"BudgetName": "sagemaker-mensuel",
"BudgetLimit": {"Amount": "500", "Unit": "USD"},
"TimeUnit": "MONTHLY",
"BudgetType": "COST",
"CostFilters": {"Service": ["Amazon SageMaker"]},
},
NotificationsWithSubscribers=[{
"Notification": {"NotificationType": "ACTUAL", "ComparisonOperator": "GREATER_THAN",
"Threshold": 80, "ThresholdType": "PERCENTAGE"},
"Subscribers": [{"SubscriptionType": "EMAIL", "Address": "ia@entreprise.fr"}],
}],
)

Sur le fil rouge, le budget de 500 $/mois pour un cas d'usage à faible trafic laisse 6× la facture attendue (~80 $) — assez large pour ne pas alerter à tort, assez serré pour repérer un dérapage d'un facteur 5. Un budget est le seul signal qui déclenche en absence de tout autre indicateur.

Les cinq causes de facture surprise

Les rapports d'audit AWS des équipes IA reviennent inlassablement sur les mêmes cinq causes. Les connaître par cœur, c'est se prémunir de 90 % des mauvaises surprises.

1. Le carnet Studio oublié allumé (module 2). Un ml.m5.4xlarge à 0,92 $/h laissé un week-end : 66 $ pour rien. Sur un ml.g4dn.12xlarge (3,91 $/h), un mois d'oubli monte à 2 800 $. Remède : arrêt automatique à 60 minutes au niveau du domaine.

2. Le point de terminaison de test jamais supprimé (module 7). ml.m5.large × 24 × 30 = 83 $/mois. Sur 5 endpoints orphelins, 400 $. Remède : aws sagemaker list-endpoints --status-equals InService en fin de semaine, marquage des endpoints de test par un tag usage=temp et suppression automatique par script hebdomadaire.

3. Le Feature Store en ligne sur-dimensionné (module 3). DynamoDB en mode provisionné avec des capacités élevées coûte cher, même sans trafic. Remède : mode « on-demand » par défaut, provisionné uniquement quand la charge est stable et mesurée.

4. Les journaux CloudWatch conservés indéfiniment. Chaque tâche d'entraînement, chaque exécution de pipeline, chaque endpoint écrit des journaux. Sans rétention, 30 Go peuvent s'accumuler par mois sur un projet moyen. Remède : PutRetentionPolicy à 30 ou 90 jours sur chaque groupe /aws/sagemaker/*.

5. Les fichiers de capture Model Monitor à 100 %. Capturer 100 % des requêtes sur un point de terminaison à fort trafic produit des dizaines de gigaoctets par jour. Remède : sampling_percentage=10 à 20 en production, 100 uniquement pendant une investigation.

Ce que la surveillance ne remplace pas

Aucune de ces surveillances ne remplace la revue humaine trimestrielle : un data scientist qui ouvre les cinq derniers rapports Model Monitor, compare la distribution des scores actuels à celle du déploiement initial, et regarde les taux de rétention réels du service marketing. Model Monitor détecte les dérives « moyennes » ; il ne voit pas qu'un segment de 5 % de la clientèle est devenu systématiquement mal prédit — cela demande un œil humain sur les journaux d'invocation.

Une convention de tag qui sauve

Marquer chaque ressource SageMaker créée par un projet — carnet, endpoint, tâche, modèle — avec les tags projet=resiliation, env=prod (ou dev), owner=<équipe>. La console Cost Explorer filtrée sur ces tags produit une facture ventilée par projet et par environnement, ce qui rend visible en 30 secondes le carnet de dev qui a coûté 400 $ le mois dernier. Sans cette convention, la facture SageMaker est un chiffre unique impossible à ventiler.

En résumé

  • Model Monitor détecte la dérive des données (immédiat) et de la qualité (quand la vérité terrain arrive) ; il exige d'activer la capture sur le point de terminaison et de calculer une ligne de base.
  • CloudWatch Alarms transforme les métriques de dérive et de latence en notifications SNS ; AWS Budgets surveille la facture indépendamment de tout autre signal.
  • Cinq causes dominent les factures surprises : carnet oublié, endpoint orphelin, Feature Store sur-dimensionné, journaux sans rétention, capture à 100 %.
  • Une convention de tags (projet, env, owner) est le seul moyen de ventiler la facture SageMaker en Cost Explorer et de repérer un dérapage rapidement.

Module suivant : la récapitulation du cours et la présentation de l'examen final de 40 questions.