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.
| Type | Ce qu'il surveille | Fréquence typique |
|---|---|---|
| Qualité des données | Écart des distributions des variables d'entrée par rapport à la référence | Toutes 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-groupes | Chaque semaine |
| Dérive de contribution | Changement d'importance des variables | Chaque 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.
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 Monitordé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 Alarmstransforme les métriques de dérive et de latence en notificationsSNS;AWS Budgetssurveille la facture indépendamment de tout autre signal.- Cinq causes dominent les factures surprises : carnet oublié, endpoint orphelin,
Feature Storesur-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.