-
Quel est l’un des objectifs principaux du MLOps ?
Réponse : La reproductibilité.
-
Quel problème classique apparaît lorsque les données évoluent dans le temps ?
Réponse : Un changement de distribution des données.
-
Laquelle des options suivantes n’est pas une étape du cycle de vie ML présenté : ingestion, détection du drift, monitoring, optimisation GPU ?
Réponse : L’optimisation GPU.
-
Donnez une raison pour laquelle un modèle peut donner de mauvaises prédictions en production malgré de bons résultats à l’entraînement.
Réponse : Un préprocessing différent entre l’entraînement et la production.
-
Quel est le rôle principal d’un conteneur Docker dans ce cours ?
Réponse : Fournir un environnement d’exécution isolé et reproductible.
-
Dans un Dockerfile, quelle instruction est typiquement utilisée pour installer des dépendances lors de la création de l’image ?
Réponse : L’instruction RUN.
-
Qu’est-ce qui invalide le cache de toutes les couches Docker situées en dessous dans un Dockerfile ?
Réponse : Modifier une instruction dans une couche supérieure.
-
Quelle commande de base utilise-t-on pour lancer un conteneur à partir d’une image Docker ?
Réponse : docker run.
-
À quoi sert l’option -p 8000:8000 dans la commande docker run ?
Réponse : À mapper un port de l’hôte vers un port du conteneur.
-
Quelle commande permet d’afficher les logs d’un conteneur en cours d’exécution ?
Réponse : docker logs <nom_conteneur>.
-
Pourquoi utilise-t-on des volumes Docker dans un système de machine learning ?
Réponse : Pour persister les données malgré l’arrêt des conteneurs.
-
Dans Docker Compose, comment un service peut-il se connecter à la base de données sans connaître son adresse IP ?
Réponse : En utilisant le nom du service, par exemple db:5432.
-
Quel est le principal avantage de Docker Compose pour un système de ML avec plusieurs services ?
Réponse : Orchestrer plusieurs services définis dans un fichier YAML unique.
-
Quelle commande permet de démarrer tous les services définis dans un fichier docker-compose.yml ?
Réponse : docker compose up -d.
-
Donnez une raison pour laquelle les notebooks ne sont pas adaptés à la production en MLOps.
Réponse : Ils créent des états cachés non reproductibles.
-
Citez un endpoint typique d’une API de modèle de machine learning évoqué dans le cours.
Réponse : L’endpoint /predict.
-
Quel est l’un des avantages de FastAPI mis en avant pour la définition d’API en Python ?
Réponse : La validation automatique des entrées.
-
Avec quel serveur Python une application FastAPI est-elle typiquement exécutée dans un conteneur ?
Réponse : Avec uvicorn.
-
Dans la pipeline de service d’un modèle, quel est le rôle principal de FastAPI vis-à-vis des utilisateurs ?
Réponse : Gérer les entrées (par exemple un JSON) et renvoyer les prédictions.
-
Selon les slides, parmi les problèmes des notebooks, quel aspect rend leur utilisation problématique pour la production ?
Réponse : L’absence de contrôle sur l’environnement et la non-reproductibilité.
-
Pourquoi un pipeline de données robuste est-il crucial en machine learning ?
Réponse : Parce qu’un modèle n’est jamais meilleur que les données utilisées pour l’entraîner.
-
Quel type d’anomalie peut provoquer une corruption silencieuse dans un export mensuel ?
Réponse : Par exemple, un type string au lieu de float pour une métrique.
-
Qu’est-ce que le training-serving skew ?
Réponse : Un décalage entre les données et transformations vues à l’entraînement et celles vues en production.
-
Quelle propriété est nécessaire pour garantir la reproductibilité d’une ingestion mensuelle ?
Réponse : L’idempotence.
-
Pourquoi un pipeline ML doit-il être déterministe ?
Réponse : Pour assurer que mêmes inputs produisent mêmes outputs et garantir traçabilité et auditabilité.
-
Quelle étape fait partie d’un pipeline d’ingestion moderne (selon les slides) ?
Réponse : Le nettoyage léger et le typage des données brutes.
-
Quel mode d’ingestion permet de mettre à jour une ligne si elle existe déjà ou de l’insérer sinon ?
Réponse : L’upsert.
-
Pourquoi l’upsert est-il particulièrement adapté aux pipelines ML récurrents ?
Réponse : Parce qu’il rend l’ingestion idempotente et gère naturellement les mises à jour tardives.
-
Que signifie l’idempotence dans un pipeline d’ingestion ?
Réponse : Rejouer l’ingestion produit exactement le même état final.
-
Quel est le rôle d’un snapshot en data engineering ?
Réponse : Fournir une copie figée, immuable et datée de l’état des données.
-
Pourquoi les snapshots empêchent-ils le data leakage ?
Réponse : Ils garantissent que les features sont calculées avec les données disponibles à la date réelle, sans informations futures.
-
Quel champ identifie la date de référence d’un snapshot ?
Réponse : Le champ as_of.
-
Pourquoi l’expectation “user_id ne doit pas être NULL” est-elle critique ?
Réponse : Parce que user_id est une clé primaire et qu’un NULL rend l’upsert ou le snapshot incohérent.
-
Quel phénomène décrit un changement inattendu du schéma des données ?
Réponse : Le schema drift.
-
Quelle est la différence entre un hard fail et un soft fail dans Great Expectations ?
Réponse : Le hard fail arrête la pipeline immédiatement, le soft fail génère un avertissement mais continue.
-
Quel est l’ordre correct entre ingestion, validation et snapshots ?
Réponse : Upsert → Validation → Snapshots.
-
Quel est le rôle principal d’un orchestrateur comme Prefect dans un pipeline ML ?
Réponse : Orchestrer, automatiser et monitorer les tasks et flows du pipeline.
-
À quoi sert le décorateur @task dans Prefect ?
Réponse : À transformer une fonction en unité de travail instrumentée et traçable.
-
Pourquoi passer des paramètres comme SEED_DIR ou AS_OF à un flow Prefect ?
Réponse : Pour pouvoir rejouer un mois donné, automatiser les ingestions et faciliter le débogage.
-
Qu’est-ce qui permet de construire une timeline historique complète des données mois après mois ?
Réponse : L’ajout d’une nouvelle entrée snapshot datée pour chaque mois ingéré.
-
Pourquoi la standardisation des features est-elle essentielle dans un système ML ?
Réponse : Pour éviter les calculs incohérents, la duplication et les bugs silencieux.
-
Quel est un facteur majeur du training-serving skew ?
Réponse : L’absence de mécanisme commun de définition et de serving des features.
-
Quelle garantie un Feature Store fournit-il pour éviter la fuite temporelle de données ?
Réponse : Le point-in-time correctness.
-
À quoi servent principalement les features offline ?
Réponse : À l’entraînement, la validation et le backtesting avec des données historiques.
-
Qu’est-ce qu’une Entity dans Feast ?
Réponse : L’unité pour laquelle les features sont calculées, identifiée par une clé stable comme user_id.
-
Quel champ est indispensable dans une Data Source Feast basée sur PostgreSQL ?
Réponse : Un timestamp field pour l’historisation et les jointures temporelles.
-
Quel est le rôle principal d’un Feature View ?
Réponse : Déclarer un groupe cohérent de features associé à une entity.
-
Quel principe de conception doit guider la granularité d’un Feature View ?
Réponse : Regrouper des features homogènes pour favoriser la modularité.
-
Pourquoi versionner les FeatureViews ?
Réponse : Pour garantir reproductibilité, traçabilité et compréhension des dérives.
-
Quel composant contient les versions des entities, data sources et FeatureViews ?
Réponse : Le registry de Feast.
-
Quel est l’objectif du historical retrieval ?
Réponse : Reconstruire automatiquement les features telles qu’elles existaient au moment du label.
-
Comment Feast choisit-il un snapshot dans un point-in-time join ?
Réponse : En sélectionnant le snapshot le plus récent antérieur au timestamp du label.
-
Que se passe-t-il si un utilisateur est absent d’un Feature View ?
Réponse : Feast renvoie des valeurs NULL ou NaN.
-
Quelle commande met à jour le registry avec les nouvelles définitions ?
Réponse : La commande feast apply.
-
Pourquoi a-t-on besoin d’un online store en production ?
Réponse : Pour servir les features en quelques millisecondes sans recalcul.
-
En quoi consiste la matérialisation dans Feast ?
Réponse : À transférer les données de l’offline store vers l’online store.
-
Comment sont structurées les données stockées dans l’online store ?
Réponse : Sous forme clé-valeur : (entity, id) → dictionnaire de features.
-
À quoi sert get_online_features dans une API ?
Réponse : À récupérer les features prêtes à l’emploi pour l’inférence.
-
Quel paramètre détermine la fraîcheur des features online ?
Réponse : La fréquence de la matérialisation.
-
Quelle étape suit immédiatement un feast apply dans le cycle de vie d’un feature ?
Réponse : La matérialisation dans l’online store.