Module 10 — Surveillance, quotas et coûts
Le pipeline hebdomadaire tourne, un modèle est en ligne, un autre en lots. Le cours pourrait s'arrêter là. Il continuerait à fonctionner deux, six, dix semaines — et un vendredi, sans crier gare, un ingénieur découvrirait que la prévision sous-estime la demande depuis trois semaines à cause d'un changement dans les campagnes marketing, ou qu'un quota bloque le pipeline depuis 48 heures, ou que la facture Azure mensuelle a doublé. Ce module met en place les garde-fous qui rendent ces trois surprises visibles avant qu'elles ne coûtent cher.
Surveillance du modèle : dérive des données et de la performance
Azure ML propose un Model Monitor managé qui compare, à intervalle régulier, la distribution des données récentes vues en production à la distribution des données d'entraînement — c'est la surveillance de dérive des données (data drift). Un second signal, la dérive de performance, compare la métrique en production à la référence d'entraînement, à condition d'avoir les valeurs réelles avec un délai raisonnable.
$schema: https://azuremlschemas.azureedge.net/latest/monitorSchedule.schema.json
name: monitor-prev-demande
trigger:
type: recurrence
frequency: day
interval: 7
create_monitor:
compute:
instance_type: Standard_DS3_v2
instance_count: 1
monitoring_target:
ml_task: regression
endpoint_deployment_id: azureml:prev-demande-en-ligne:vert
monitoring_signals:
donnees:
type: data_drift
production_data:
input_data:
path: azureml://datastores/workspaceblobstore/paths/predictions/
type: uri_folder
reference_data:
input_data:
path: azureml:ventes_magasins:3
type: mltable
metric_thresholds:
numerical:
jensen_shannon_distance: 0.1
Une distance de Jensen-Shannon au-delà de 0,1 sur une variable numérique clé (le prix promotionnel par exemple) déclenche une alerte, envoyée dans Application Insights puis routée par Azure Monitor vers un canal Teams ou une adresse d'astreinte. La règle vaut ce qu'on en fait : sans procédure de réponse, l'alerte devient bruit et est finalement mise en sourdine.
Azure Monitor : le regard système
Toutes les tâches, points de terminaison et pipelines émettent leurs journaux vers Application Insights du workspace (module 1). Trois requêtes KQL utiles à installer d'emblée :
AmlOnlineEndpointConsoleLog
| where TimeGenerated > ago(1h)
| where DeploymentName == "vert"
| where Level == "ERROR"
| summarize count() by RequestId, Message
AmlComputeClusterEvent
| where TimeGenerated > ago(7d)
| where EventType == "Failed"
| project TimeGenerated, ClusterName, ErrorDetails
AmlOnlineEndpointTrafficLog
| where TimeGenerated > ago(1h)
| summarize p50=percentile(ResponseDurationMs, 50), p99=percentile(ResponseDurationMs, 99) by bin(TimeGenerated, 1m)
Ces requêtes s'épinglent en tableau de bord Azure Monitor Workbook — le seul endroit où lire d'un coup d'œil la santé du service.
Quotas régionaux : anticiper avant que ça bloque
Chaque abonnement Azure a un quota de cœurs par région et par famille de VM. La grappe cpu-cluster-32 en Standard_DS4_v2 (8 vCPU par nœud) consomme jusqu'à 64 vCPU à pleine charge. Un abonnement de démonstration démarre autour de 10 à 20 vCPU par famille : le premier pipeline sature, le message d'erreur est QuotaExceeded.
Trois réflexes :
- Consulter
az vm list-usage --location westeuropeavant de dimensionner la grappe - Ouvrir une demande d'augmentation dès que l'usage prévu dépasse 60 % du quota
- Répartir les cibles de calcul entre plusieurs familles pour ne pas dépendre d'un seul quota
Coûts : les balises font l'analyse
Toute ressource Azure supporte des balises (tags). Appliquer une balise projet=prev-demande et environnement=prod à l'ensemble des ressources du workspace transforme Cost Analysis en un tableau lisible, filtrable, exportable.
Un tableau simplifié d'une facture mensuelle réaliste pour le fil rouge :
| Poste | Coût mensuel | Levier |
|---|---|---|
| Grappe d'entraînement | \$85 | min-instances: 0, low-priority pour le sweep |
| Point de terminaison en ligne | \$210 | dimensionner sur le p99 réel, pas le pic |
| Point de terminaison par lots | \$8 | négligeable si min instances zéro |
| Stockage (données + artefacts) | \$15 | politiques de rétention sur les journaux et artefacts |
| Application Insights | \$25 | échantillonnage à 10 % au-delà de 10 Go par mois |
| ACR | \$5 | purger les images d'environnement obsolètes |
Le point de terminaison en ligne est presque toujours le premier poste. Un min_instances: 2 sur Standard_DS3_v2 coûte à lui seul plus qu'une année complète du calcul par lots.
Arrêt automatique : la seule règle qui rend le cours rentable
Trois arrêts automatiques évitent 80 % des factures surprises :
- Instance de calcul :
idle_time_before_shutdown_minutes: 60, non négociable - Grappe :
min-instances: 0etidle-time-before-scale-down: 300 - Point de terminaison en ligne hors production : détruire nightly via une
Azure Function, recréer au matin
Pour l'environnement de dev, on va parfois plus loin en mettant az ml online-endpoint delete dans une action nocturne. Le déploiement se recrée en 5 minutes le lendemain — largement acceptable pour un environnement de test.
Une équipe a passé une grappe dev de 8 à 32 nœuds pour un balayage, sans anticiper que le quota du même compte servait aussi au pipeline prod. Le lundi matin, le pipeline hebdomadaire échoue sur QuotaExceeded, sans alerte. La règle organisationnelle : dev et prod doivent utiliser des abonnements Azure distincts ou au moins des familles de VM disjointes, sinon un incident dans l'une fait tomber l'autre.
En résumé
- Model Monitor compare la production à la référence d'entraînement ; sans procédure de réponse, l'alerte devient bruit
- Les journaux atterrissent dans
Application Insights; installer d'emblée quelques requêtes KQL et un tableau de bord - Quotas régionaux : les surveiller, les demander tôt, ne pas mélanger dev et prod sur le même quota
- Arrêt automatique partout où c'est possible ; le point de terminaison en ligne est le premier poste à dimensionner sur le p99 réel
Le cours se conclut par une récapitulation transversale et l'examen des 40 questions.