Machine Learning en production (cours de la CMU)
(mlip-cmu.github.io)- Le cours 17-445/17-645/17-745 Machine Learning in Production / AI Engineering de la CMU, Spring 2025, traite du processus qui consiste à transformer des modèles de ML en produits logiciels réellement déployables et exploitables
- L’enjeu central est une compréhension commune permettant aux data scientists et aux ingénieurs logiciel de travailler ensemble, en reliant exigences, conception, déploiement, exploitation et assurance qualité en partant du principe que les modèles font des erreurs
- Le cours couvre largement l’anticipation des prédictions erronées, le MLOps, les tests A/B et les canary releases, la qualité des données, la dérive de concept et la détection des boucles de rétroaction, ainsi que les tests, le débogage, l’équité, la confidentialité et la sécurité
- Les étudiants construisent, déploient, évaluent et maintiennent en projet de groupe un service de recommandation de films à l’échelle d’un million d’utilisateurs, tout en pratiquant aussi Kafka, Jenkins, Prometheus, Grafana, Docker, etc.
- Une expérience de base en ML et des compétences en programmation sont attendues, mais une expérience en génie logiciel n’est pas obligatoire ; les supports de cours, devoirs et manuels sont publics et peuvent servir à l’autoformation comme au matériel pédagogique
Objectifs du cours et public visé
- Machine Learning in Production / AI Engineering est un cours consacré à ce qui vient après l’étape où un modèle de ML ou un prompt produit une prédiction
- Transformer le modèle en produit et le déployer dans un environnement réel
- Obtenir une confiance suffisante dans sa qualité
- L’exploiter et le maintenir à grande échelle
- Le cours Spring 2025 est conçu pour des étudiants ayant déjà une certaine expérience en data science
- Par exemple : avoir suivi un cours de ML, avoir utilisé
sklearn - Une maîtrise de base de Python et du shell Unix est attendue
- Un bagage en génie logiciel — tests, exigences, architecture, processus, travail en équipe — n’est pas requis
- Par exemple : avoir suivi un cours de ML, avoir utilisé
- À l’avenir, ce cours devrait être proposé au moins chaque semestre de printemps, et pourra aussi être ouvert certains semestres d’automne
- Aucune session d’été n’est prévue
Ressources publiques et références
- L’ensemble des supports, y compris les slides et les devoirs, est publié sous licence Creative Commons pour les chercheurs, enseignants et lecteurs intéressés
- CMU MLIP GitHub
- Les ressources publiques Spring 2025 sont disponibles dans le course GitHub repository
- Un manuel en ligne est également public, avec des chapitres correspondant à presque tout le cours
- Machine Learning in Production textbook
- Ce manuel doit être publié chez MIT Press et reste disponible en ligne sous licence Creative Commons
- Un article présentant l’intention du cours et sa conception initiale est aussi fourni
- Les enregistrements du cours Summer 2020 sont disponibles sur la course page, mais ils sont désormais un peu datés
- Une annotated bibliography est également proposée pour trouver des travaux connexes
Questions traitées dans les systèmes de ML en production
-
Concevoir en anticipant les prédictions erronées
- Le cours examine comment un système doit fonctionner même lorsque le modèle peut se tromper
- Il traite des moyens de préserver la sûreté et la sécurité malgré les erreurs possibles
- Il s’intéresse à la fois à l’interface utilisateur et à la conception du système complet en conditions réelles
-
Déploiement et mise à jour en production
- Le cours traite des façons de déployer et mettre à jour un modèle de manière fiable
- Il couvre les méthodes de test de l’ensemble du pipeline ML
- Il automatise et fait passer à l’échelle le processus de déploiement avec des outils de MLOps
- Il aborde les expérimentations en production comme les tests A/B et les canary releases
- Il traite des problèmes de qualité des données, de la dérive de concept et de la détection des boucles de rétroaction
-
Systèmes de ML capables de passer à l’échelle
- Le cours traite de la conception de systèmes capables de gérer de grands volumes de données d’entraînement, de données de télémétrie et de requêtes utilisateur
- Il compare des options comme le stream processing, le batch processing, l’architecture lambda et les data lakes
-
Tests et débogage
- Le cours traite de la manière d’évaluer en production la qualité des prédictions du modèle
- Il teste non seulement le modèle, mais l’ensemble du système basé sur le ML
- Il applique aux tests de ML en production les enseignements du test logiciel, de la génération automatique de cas de test, de la simulation et de l’intégration continue
-
Attributs de qualité au-delà de la précision
- Le cours couvre la latence d’entraînement et d’inférence, les coûts d’exploitation, la scalabilité, l’explicabilité, l’équité, la confidentialité, la robustesse et la sécurité
- Il prend aussi en compte la nécessité éventuelle de fonctionner hors ligne et la fréquence des mises à jour du modèle
- Il apprend à identifier les exigences qualité importantes dans un environnement de production métier et à arbitrer conflits et compromis
Études de cas et projet de groupe
- Les études de cas abordées dans le cours incluent divers produits fondés sur le ML
- Transcription automatique de la parole
- Détection distribuée d’enfants disparus via webcam
- Traduction instantanée en réalité augmentée
- Services médicaux et de santé comme la détection du cancer, la détection de chute et le diagnostic du COVID
- Mise en page automatique de slides PowerPoint
- Évaluation semi-automatique des admissions universitaires
- Gestion des stocks
- Playlists intelligentes et recommandation de films
- Détection de fraude publicitaire
- Robots de livraison et fonctions de conduite intelligente
- Le projet de groupe à grande échelle consiste à construire, déployer, évaluer et maintenir un service de recommandation de films
- Il suppose un environnement de « production » relativement réaliste
- L’échelle visée est d’un million d’utilisateurs
Acquis d’apprentissage et outils pratiques
- Après le cours, les étudiants doivent être capables d’analyser les compromis entre plusieurs attributs de qualité dans la conception de systèmes de production intégrant des composants de ML
- Au-delà de la précision, cela inclut le coût d’exploitation, la latence, la facilité de mise à jour et l’explicabilité
- Ils doivent pouvoir implémenter des systèmes robustes de qualité production en partant du principe que les composants de ML sont susceptibles de se tromper
- Ils doivent pouvoir concevoir une infrastructure de données tolérante aux pannes et scalable pour l’entraînement, le serving, le versioning et l’expérimentation des modèles
- Ils doivent garantir la qualité de l’ensemble du pipeline ML grâce à l’automatisation des tests et aux techniques d’assurance qualité
- Qualité des données
- Dérive des données
- Boucles de rétroaction
- Qualité du modèle
- Ils doivent pouvoir construire des systèmes testables et supervisables en production, ainsi que des pipelines de déploiement robustes
- Ils doivent prendre en compte des exigences au niveau système comme la sûreté, la sécurité, la confidentialité, l’équité et l’utilisabilité
- Les outils avec lesquels ils se familiariseront incluent Apache Kafka, Jenkins, Prometheus, Grafana, Docker et divers outils de MLOps
Organisation du cours et calendrier
- Le numéro du cours est 17-445/17-645/17-745 et il vaut 12 units
- Le contenu est identique pour tous les numéros, mais la version doctorale 17-745 remplace deux devoirs par un research project obligatoire
- Le cours Spring 2025 se déroule en présentiel
- Cours : lundi et mercredi, 2:00–3:20pm, PH 100
- Labs : le vendredi sur plusieurs créneaux et dans plusieurs salles, avec aussi un lab à distance uniquement
- Le contenu est globalement stable depuis quelques années, mais les sujets et outils précis continuent d’être mis à jour en fonction des nouvelles recherches et des nouveaux outils
- Le planning prévisionnel peut changer et être ajusté pendant le semestre pour intégrer des thèmes demandés ou des besoins d’accompagnement
- La progression du cours va du passage du modèle au système fondé sur l’IA, à la collecte des exigences, l’anticipation des erreurs, la qualité du modèle, la collaboration, les tests de modèle fondés sur le comportement, l’architecture et la conception, le déploiement du modèle, les expérimentations en production, la qualité des données, l’automatisation du pipeline, le passage à l’échelle, la planification opérationnelle, le versioning, la provenance et la reproductibilité, la dette technique, l’éthique et l’équité, l’explicabilité, la sûreté, ainsi que la sécurité et la confidentialité
Évaluation et politique des devoirs
- Les remises de devoirs, la notation, les discussions, les questions, les annonces et les documents complémentaires utilisent Canvas et Gradescope
- Les slides sont publiées sur la page du cours, et Slack sert à la communication autour des devoirs et du projet
- GitHub est utilisé pour coordonner le travail en groupe
- La répartition de la note est la suivante
- Devoirs individuels 35 %
- Projet de groupe 30 %
- Examen intermédiaire 15 %
- Participation 5 %
- Labs 10 %
- Quiz de lecture 5 %
- Il n’y a pas d’examen final
- La notation fournit des spécifications claires et un barème explicite, et chaque partie est évaluée en réussite/échec
- Pas de points partiels
- Certains devoirs incluent une petite part de bonus
- Les seuils de note sont fixés relativement haut
- A+ au-delà de 99 %
- A au-delà de 96 %
- A- au-delà de 94 %
- B+ au-delà de 91 %
- B au-delà de 86 %
- B- au-delà de 82 %
- C au-delà de 75 %
- D au-delà de 60 %
Prérequis et préparation au cours
- Il n’y a pas de prérequis officiels, mais une expérience de base en ML et des compétences générales en programmation sont attendues pour réussir
- Côté ML, une compréhension de base de l’extraction de caractéristiques, de la construction et de l’évaluation de modèles, ainsi que du moment et de la manière dont les techniques d’apprentissage fonctionnent, est recommandée
- Une expérience avec Python et les notebooks Jupyter est utile
- Un projet pratique, l’autoformation ou des cours en ligne peuvent suffire
- Un prerequisite knowledge check anonyme et non noté permet d’évaluer ses connaissances
- En programmation, un niveau de base est nécessaire
- Une aisance élémentaire dans un langage comme Python
- La capacité à installer et apprendre les bibliothèques de ce langage
- La capacité à se connecter en
sshà une machine Unix et à effectuer des opérations de base en ligne de commande - La capacité à installer et apprendre de nouveaux outils comme Docker
- Aucun langage de programmation précis n’est imposé, mais presque toutes les équipes utilisent principalement Python
- Les outils indispensables comme Git, Docker, Grafana et Jenkins sont introduits et illustrés en lab, mais il est attendu que les étudiants lisent eux-mêmes la documentation et les tutoriels pour les maîtriser
- Il faut pouvoir apprendre par soi-même les bases de l’écriture d’un service web avec des bibliothèques comme Flask
- Une expérience en génie logiciel n’est pas un prérequis
- Des sujets comme l’ingénierie des exigences, la conception logicielle, les tests logiciels, les systèmes distribués, le déploiement continu et la gestion d’équipe sont couverts dans le cours
Participation en cours, labs et lectures
- Le cours se déroule en présentiel et la participation en classe constitue une part importante de l’expérience d’apprentissage
- Les enregistrements du cours sont fournis sur Canvas dans la mesure du possible
- Il n’existe pas d’option de cours à distance synchrone
- Les labs ne sont pas enregistrés
- Slack est aussi utilisé pour certaines activités en cours, il doit donc être accessible pendant le cours depuis un ordinateur portable, une tablette ou un téléphone
- Les labs servent en général à introduire des outils et exigent un ou plusieurs livrables bien définis
- Les exercices de lab sont conçus pour durer environ 1 heure
- Les livrables sont évalués en réussite/échec lorsqu’ils sont montrés à un TA pendant le créneau de lab de la semaine
- Ils peuvent inclure du code, une démo d’exécution et des réponses orales à des questions
- Les labs sont conçus comme une première mise en pratique à faible enjeu
- Si le niveau attendu n’est pas atteint, il est possible de continuer à corriger pendant le créneau de lab
- Sans justification explicite ni utilisation de token, aucune remise n’est acceptée après la fin du lab
- Parmi les lectures, le cours utilise souvent Building Intelligent Systems: A Guide to Machine Learning Engineering de Goeff Hulten
- Le manuel maison Machine Learning in Production est étroitement lié à chaque séance, mais il est présenté comme lecture complémentaire plutôt que comme chapitre obligatoire
- La plupart des cours ont une lecture à faire, et les quiz de lecture sur Canvas doivent être remis avant le cours
- Le quiz se compose d’une question ouverte liée à la lecture
- Il évalue en réussite/échec le sérieux de la participation
Travail en équipe et flexibilité des remises
- Le travail en équipe est un élément essentiel du cours
- Le projet de groupe se fait en équipes de 3 à 5 personnes
- Les équipes sont constituées par l’enseignant
- Chaque équipe se voit attribuer un TA mentor
- Les devoirs en équipe incluent une évaluation par les pairs selon un critère de team citizenship
- Elle évalue le fait d’être un membre d’équipe actif et coopératif
- Le mentor d’équipe fait un débriefing avec l’équipe après chaque jalon et discute des moyens d’améliorer le travail collectif
- Chaque étudiant reçoit 8 tokens personnels à utiliser pendant le semestre
- 1 token permet de rendre un devoir individuel avec 1 jour de retard
- 3 tokens permettent d’améliorer ou de refaire un devoir individuel et de le soumettre à nouveau avec une courte rétrospective
- 1 token permet de rendre en retard ou de resoumettre un quiz de lecture
- 1 token permet de terminer un lab en retard ou de le refaire
- Les tokens personnels restants comptent comme 1 jour de participation en fin de semestre
- Chaque équipe reçoit aussi séparément 8 tokens d’équipe
- Ils peuvent être utilisés pour prolonger un jalon à raison de 1 token par jour
- 3 tokens permettent de resoumettre un jalon avec une rétrospective
- Les tokens personnels et les tokens d’équipe ne sont pas interchangeables
- En l’absence de tokens, les remises en retard de devoirs individuels ou d’équipe subissent une pénalité de 15 % par jour entamé
Outils d’IA, collaboration et participation à la recherche
- Vu la nature du cours, l’usage des outils d’IA générative n’est pas restreint
- Des outils comme ChatGPT, Bard, Co-Pilot ou Stable Diffusion peuvent être utilisés
- La réutilisation de code externe provenant de StackOverflow ou de tutoriels est aussi autorisée
- La responsabilité de l’exactitude des rendus incombe entièrement aux étudiants
- Les outils de génération de contenu peuvent produire des réponses plausibles mais fausses, et ces réponses n’obtiendront pas de points
- Le respect des licences applicables relève également de la responsabilité des étudiants
- Les règles habituelles d’intégrité académique s’appliquent
- Il est interdit de copier la solution d’un autre étudiant ou d’utiliser une solution rédigée à plusieurs
- Il est interdit de consulter la solution d’un autre étudiant, de fournir sa propre solution ou de la laisser accessible à d’autres
- Publier des solutions sur un GitHub public n’est pas autorisé non plus
- La collaboration avec d’autres étudiants est autorisée dans les labs, mais pas pour les quiz de lecture, les devoirs ni les examens
- La sanction minimale en cas de triche est la note de 0 pour l’intégralité du devoir concerné, avec possibilité de mesures disciplinaires supplémentaires selon la procédure de l’université
- Le cours mène également des recherches académiques à partir de l’analyse des travaux étudiants
- Le fait de ne pas y participer n’a aucun impact sur la note ou le parcours académique à la CMU
- Les données de recherche n’incluent pas les notes des étudiants
- Les analyses sont réalisées sous forme agrégée et désidentifiée après la fin du cours et la remise des notes finales
1 commentaires
Avis sur Hacker News
Les ressources sont clairement pratiques. Kafka, Docker, Kubernetes, Jenkins sont tous des outils standard de l’industrie, et l’accent mis sur le MLOps est rafraîchissant.
J’apprécie que le cours ne s’arrête pas simplement à la création de modèles, mais traite l’écart entre le machine learning et les vrais systèmes en production. J’aime aussi le fait qu’il couvre l’explicabilité, l’équité et le monitoring. Cela dit, à en juger par les travaux pratiques, beaucoup de contenu semble accessible à un ingénieur logiciel intermédiaire, ou même à un débutant motivé, via des tutoriels. Git, Flask et l’orchestration de conteneurs sont utiles, mais restent assez basiques pour quelqu’un qui a déjà connu un environnement de production. Des sujets plus profonds comme l’optimisation réseau pour l’apprentissage distribué ou l’exploitation de l’inférence à grande échelle semblent moins abordés, et je me demande s’ils ressortent dans les projets de groupe. Jenkins est largement utilisé, mais il serait peut-être préférable de présenter aussi des outils plus modernes de CI/CD comme GitHub Actions ou ArgoCD. Kubernetes est indispensable, mais couvrir aussi des alternatives ou compléments pour le déploiement edge ou les systèmes serverless rendrait le cours plus tourné vers l’avenir.
S’il n’y a pas de grande différence conceptuelle entre Jenkins et d’autres frameworks CI/CD, il suffit d’en choisir un populaire et de l’utiliser, et c’est apparemment ce qui a été fait.
Il y a 20 ans, on apprenait en créant une base de données en Java, et à l’époque aussi on utilisait des « outils qui semblaient destinés à être abandonnés un jour ». C’est simplement le nouveau point de départ qui a changé.
J’ai parcouru les exercices et c’est intéressant. Même en tant que développeur full-stack avec peu d’expérience en LLM, je connais déjà la moitié des éléments comme Git, Flask, Kafka, Kubernetes, et l’autre moitié ressemble simplement à du code.
Il y a très peu des mathématiques complexes que j’associais au machine learning. Je me demande donc si cela signifie que le MLOps est en pratique un domaine qui n’est pas si difficile d’accès pour des développeurs ordinaires sans doctorat.
Par exemple, si l’on doit générer de grandes quantités de données synthétiques par simulation, on peut être davantage préoccupé par le traitement par lots, les formats d’encodage et l’ingestion des données que par la création d’un jeu de données sans biais en elle-même. Si l’on doit collecter et échantillonner des données via crowdsourcing, l’implémentation qui traite rapidement en ligne et utilise efficacement les coûts et le compute est souvent plus importante que la théorie de l’échantillonnage par réservoir.
Dans la plupart des entreprises, un ingénieur machine learning est un ingénieur qui comprend une partie du logiciel et une partie du machine learning ; dans le meilleur des cas il est bon dans les deux, dans le pire il ne l’est dans aucun des deux.
Ce cours semble très peu traiter la qualité des données, qui n’arrive apparemment qu’au chapitre 16. Je me demande quelle expérience industrielle ont les auteurs.
En pratique, on passe 90 % du temps sur la qualité et le nettoyage des données.
Par exemple, mon travail en machine learning s’inscrit presque entièrement dans le contexte de la régression de simulations d’ingénierie et du développement de modèles substituts, donc la qualité ou le nettoyage des données ne sont presque jamais un problème. L’essentiel du travail concerne la génération de jeux de données, le choix des modèles, l’entraînement et le déploiement. Cela dépend des cas.
Les mettre en place avant que les pipelines de données ne se figent aux étapes de génération à la source, de transformation et de prétraitement permet d’éviter beaucoup de problèmes plus tard.
Je me demande s’il existe un endroit où les personnes qui ne sont pas étudiantes peuvent aussi suivre le cours.
Je me demande si n’importe qui peut s’inscrire, ou s’il faut être admis dans l’un des meilleurs programmes d’informatique du pays.
Ça a l’air bien. Le cours LLM Systems aussi.
Je me demande si quelqu’un connaît de la littérature ou des cours sur la construction d’une infrastructure de cluster pour le machine learning. Je m’intéresse particulièrement au passage à l’échelle de l’infrastructure de stockage, au réseau et aux approches de scheduling.
Pour le stockage, s’il s’agit de stocker des modèles ou des données, on peut utiliser un stockage objet comme S3 ou un système de fichiers réseau partagé comme EFS ou Lustre. Je ne connais pas vraiment de ressources définitives sur le réseau pour de grands parcs de GPU. Le scheduling est désormais proche d’un problème résolu, donc à peu près tout fonctionne. On peut créer son propre coordinateur qui lance périodiquement des jobs basés sur des images Docker, et en ajoutant un système de métadonnées et de déclencheurs basé sur une file de messages, on peut construire quelque chose assez rapidement. Airflow ou AWS Batch pour les gros jobs sont aussi possibles. Ce qui manque peut-être, c’est le serving de modèles. C’est particulièrement difficile dans les systèmes de recommandation, sensible à la latence, et vulnérable aux pics de latence comme aux pics de trafic. Même du code Python bien écrit peut atteindre ses limites assez vite.
Je suis content que ce cours soit publié. Christian est excellent, aussi bien humainement que dans son travail. Je connais assez bien les premières versions de ce cours et du livre pour pouvoir les recommander vivement.
J’ai travaillé 9,5 ans sur des plateformes et systèmes de machine learning de différentes tailles, et les ressources ont l’air bonnes.
Je sous-estime peut-être la difficulté du cours, mais il ressemble à un cours d’introduction. Jusqu’aux outils d’explicabilité des modèles, la plupart des choses paraissent assez intuitives.
Cela dit, je trouve positif qu’il utilise des outils standard de l’industrie pour la plupart des cas d’usage.