Home
Login

Sixième étape : Mise en œuvre et déploiement de projets d'IA

Un cours complet d'ingénierie de l'apprentissage automatique qui enseigne comment combiner l'apprentissage automatique et l'ingénierie logicielle, du processus expérimental au déploiement en production.

MLOpsMachineLearningProductionMLGitHubTextFreeEnglish

Présentation détaillée du projet Made With ML

Aperçu du projet

Made With ML est un projet open source créé par Goku Mohandas, axé sur l'enseignement de la manière d'intégrer l'apprentissage automatique à l'ingénierie logicielle, de concevoir, développer, déployer et itérer des applications d'apprentissage automatique de niveau production. Le projet est devenu l'un des principaux référentiels d'apprentissage automatique sur GitHub, avec plus de 40 000 développeurs qui le suivent.

Objectifs et caractéristiques du projet

Philosophie de base

Le cours construit progressivement un système de production fiable, de la phase expérimentale (conception + développement) à la phase de production (déploiement + itération), par le biais d'une approche itérative.

Principales caractéristiques

  1. 💡 Principes fondamentaux : Établir une compréhension des principes fondamentaux pour chaque concept d'apprentissage automatique avant de plonger directement dans le code.
  2. 💻 Meilleures pratiques : Mettre en œuvre les meilleures pratiques d'ingénierie logicielle lors du développement et du déploiement de modèles d'apprentissage automatique.
  3. 📈 Mise à l'échelle : Étendre facilement les charges de travail d'apprentissage automatique (données, entraînement, réglage, service) en Python, sans avoir à apprendre un tout nouveau langage.
  4. ⚙️ MLOps : Connecter les composants MLOps (suivi, tests, service, orchestration, etc.) pour construire des systèmes d'apprentissage automatique de bout en bout.
  5. 🚀 Du développement à la production : Apprendre à passer rapidement et de manière fiable du développement à la production, sans modifier le code ni la gestion de l'infrastructure.
  6. 🐙 CI/CD : Apprendre à créer des flux de travail CI/CD matures pour entraîner et déployer continuellement de meilleurs modèles de manière modulaire.

Public cible

Le projet s'adresse à différents types d'apprenants :

  • 👩💻 Tous les développeurs : Qu'il s'agisse d'ingénieurs logiciels/infrastructure ou de data scientists, l'apprentissage automatique devient de plus en plus un élément essentiel du développement de produits.
  • 👩🎓 Jeunes diplômés : Acquérir les compétences pratiques requises par l'industrie, combler le fossé entre les programmes universitaires et les attentes de l'industrie.
  • 👩💼 Chefs de produit/direction : Souhaitant établir une base technique pour construire des produits étonnants et fiables basés sur l'apprentissage automatique.

Structure et contenu du projet

Structure du code

Le code principal du projet est restructuré en tant que scripts Python suivants :

madewithml
├── config.py
├── data.py
├── evaluate.py
├── models.py
├── predict.py
├── serve.py
├── train.py
├── tune.py
└── utils.py

Principaux flux de travail

1. Configuration de l'environnement

Le projet prend en charge plusieurs environnements de déploiement :

  • Environnement local : Utiliser un ordinateur portable personnel comme cluster
  • Plateforme Anyscale : Utiliser Anyscale Workspace pour le développement dans le cloud
  • Autres plateformes : Prise en charge d'AWS, GCP, Kubernetes, déploiement local, etc.

2. Données et entraînement du modèle

export EXPERIMENT_NAME="llm"
export DATASET_LOC="https://raw.githubusercontent.com/GokuMohandas/Made-With-ML/main/datasets/dataset.csv"
export TRAIN_LOOP_CONFIG='{"dropout_p": 0.5, "lr": 1e-4, "lr_factor": 0.8, "lr_patience": 3}'
python madewithml/train.py \
--experiment-name "$EXPERIMENT_NAME" \
--dataset-loc "$DATASET_LOC" \
--train-loop-config "$TRAIN_LOOP_CONFIG" \
--num-workers 1 \
--cpu-per-worker 3 \
--gpu-per-worker 1 \
--num-epochs 10 \
--batch-size 256 \
--results-fp results/training_results.json

3. Réglage du modèle

python madewithml/tune.py \
--experiment-name "$EXPERIMENT_NAME" \
--dataset-loc "$DATASET_LOC" \
--initial-params "$INITIAL_PARAMS" \
--num-runs 2 \
--num-workers 1 \
--cpu-per-worker 3 \
--gpu-per-worker 1 \
--num-epochs 10 \
--batch-size 256 \
--results-fp results/tuning_results.json

4. Évaluation du modèle

export RUN_ID=$(python madewithml/predict.py get-best-run-id --experiment-name $EXPERIMENT_NAME --metric val_loss --mode ASC)
python madewithml/evaluate.py \
--run-id $RUN_ID \
--dataset-loc $HOLDOUT_LOC \
--results-fp results/evaluation_results.json

5. Prédiction du modèle

python madewithml/predict.py predict \
--run-id $RUN_ID \
--title "Transfer learning with transformers" \
--description "Using transformers for transfer learning on text classification tasks."

6. Service du modèle

python madewithml/serve.py --run_id $RUN_ID

Suivi des expériences

Le projet utilise MLflow pour le suivi des expériences et la gestion des modèles :

export MODEL_REGISTRY=$(python -c "from madewithml import config; print(config.MODEL_REGISTRY)")
mlflow server -h 0.0.0.0 -p 8080 --backend-store-uri $MODEL_REGISTRY

Cadre de test

Le projet comprend une suite de tests complète :

# Tests de code
python3 -m pytest tests/code --verbose --disable-warnings

# Tests de données
pytest --dataset-loc=$DATASET_LOC tests/data --verbose --disable-warnings

# Tests de modèle
pytest --run-id=$RUN_ID tests/model --verbose --disable-warnings

# Tests de couverture
python3 -m pytest tests/code --cov madewithml --cov-report html --disable-warnings

Déploiement en production

Déploiement Anyscale

Le projet fournit une solution de déploiement Anyscale complète :

  1. Configuration de l'environnement de cluster :
export CLUSTER_ENV_NAME="madewithml-cluster-env"
anyscale cluster-env build deploy/cluster_env.yaml --name $CLUSTER_ENV_NAME
  1. Configuration du calcul :
export CLUSTER_COMPUTE_NAME="madewithml-cluster-compute-g5.4xlarge"
anyscale cluster-compute create deploy/cluster_compute.yaml --name $CLUSTER_COMPUTE_NAME
  1. Soumission des tâches :
anyscale job submit deploy/jobs/workloads.yaml
  1. Déploiement du service :
anyscale service rollout -f deploy/services/serve_model.yaml

Flux de travail CI/CD

Le projet intègre GitHub Actions pour l'automatisation du déploiement :

  1. Déclenchement du flux de travail : Déclenchement du flux de travail des charges de travail lors de la création d'une PR
  2. Entraînement et évaluation du modèle : Exécution automatique de l'entraînement et de l'évaluation
  3. Retour d'information sur les résultats : Affichage direct des résultats de l'entraînement et de l'évaluation dans la PR
  4. Déploiement automatique : Déploiement automatique en production après la fusion dans la branche principale

Principaux points d'apprentissage

Pile technologique

  • Python : Langage de programmation principal
  • Ray : Cadre de calcul distribué
  • MLflow : Suivi des expériences et gestion des modèles
  • Transformers : Modèles d'apprentissage profond
  • FastAPI : Cadre de service API
  • pytest : Cadre de test
  • GitHub Actions : Plateforme CI/CD

Meilleures pratiques d'ingénierie de l'apprentissage automatique

  1. Organisation du code : Structure de projet modulaire
  2. Gestion des expériences : Suivi systématique des expériences
  3. Contrôle de version : Gestion des versions du code et des modèles
  4. Stratégie de test : Couverture de test complète
  5. Automatisation du déploiement : Intégration du flux de travail CI/CD
  6. Surveillance et maintenance : Surveillance continue de l'environnement de production

Valeur du projet

L'apprentissage automatique n'est pas une industrie distincte, mais une puissante façon de penser aux données, qui ne se limite pas à un type de personne particulier. Le projet offre un parcours d'apprentissage complet, des concepts de base au déploiement en production, aidant les apprenants à maîtriser l'ensemble des compétences de l'ingénierie moderne de l'apprentissage automatique.

Ressources d'apprentissage

Amélioration continue

Le projet souligne l'importance de l'amélioration continue. Avec la mise en place d'un flux de travail CI/CD, il est possible de se concentrer sur l'amélioration continue des modèles, en s'étendant facilement aux exécutions planifiées (cron), aux pipelines de données, à la surveillance de la dérive, à l'évaluation en ligne, etc.

Ce projet fournit aux praticiens de l'apprentissage automatique une ressource d'apprentissage complète et pratique, couvrant l'ensemble du processus, de la compréhension des concepts au déploiement en production, et constitue une excellente ressource pour l'apprentissage du MLOps moderne.