# TP02 - Comparer et tracer des experimentations ML (DVC + MLflow) Fil rouge : prediction de la consommation electrique. Ce module compare des strategies de features et de split, en versionnant les datasets avec **DVC** (remote S3 = Garage de la VM) et en tracant les experiences avec **MLflow** (serveur de la VM). ## Prerequis (sur la VM) - venv : `/opt/venvs/mlops` - donnees source : `/data/modelling/features.parquet` + `target.parquet` - `.env` renseigne (voir `.env.example`), puis : ```bash cd /home/user/tp set -a; source .env; set +a alias py=/opt/venvs/mlops/bin/python alias dvc=/opt/venvs/mlops/bin/dvc ``` ## Package - `lab/constants.py` : strategies de split (`full_history`, `recent_history`), strategies de features (`short_memory`, `seasonality`, `tendency`, `mixed`, `full`), `RIDGE_ALPHAS`. - `lab/split/cli.py` : lit `/data/modelling`, ecrit `data/{train,validation,test}.parquet` selon `CHOSEN_SPLIT_STRATEGY`. - `lab/modeling/cli.py` : `py -m lab.modeling.cli ` -> regression lineaire -> MLflow. - `lab/modeling_ridge/cli.py` : `py -m lab.modeling_ridge.cli [--strategy ]` -> Ridge sur `RIDGE_ALPHAS`. ## Versionner un dataset avec DVC ```bash py -m lab.split.cli dvc add data/train.parquet data/validation.parquet data/test.parquet git add data/*.dvc data/.gitignore lab .gitignore git commit -m "split " git tag dataset- dvc push ``` Restaurer une version anterieure du dataset : ```bash git checkout dataset-v1-full-history -- data/train.parquet.dvc data/validation.parquet.dvc data/test.parquet.dvc dvc checkout ``` ## Entrainements ```bash for s in short_memory seasonality tendency mixed; do py -m lab.modeling.cli $s; done # Parties 1 et 2 py -m lab.modeling_ridge.cli --strategy mixed # Partie 3 ``` Resultats et comparaisons : https://mlflow.192-168-122-143.nip.io (experience `tp02_electricity_consumption`). ## Livrable Synthese des resultats et reponses aux questions : `SYNTHESE.md`. --- # TP03 - Exposer un modele via une API REST (Model Registry + FastAPI) Prolonge le TP02 : on enregistre le meilleur modele dans le **MLflow Model Registry**, on le **promeut via un alias**, puis on l'expose par une **API REST FastAPI**. ## Prerequis (en plus du TP02) `.env` complete avec les creds S3 Garage (voir `.env.example`) : `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `MLFLOW_S3_ENDPOINT_URL`. Necessaires pour `log_model` (upload de l'artefact) et pour le chargement du modele par l'API (download depuis `s3://mlflow-artifacts`). ## Enregistrer et promouvoir (Partie 1) ```bash set -a; source .env; set +a py -m lab.modeling.cli full --register # v1 -> Registry (champion vise) py -m lab.modeling.cli mixed --register # v2 -> Registry (comparaison) py -m lab.registry.cli versions # lister versions + alias py -m lab.registry.cli promote --version 1 --alias champion ``` `log_model` est appele a **chaque** run (artefact sauvegarde) ; `--register` empile en plus une version dans le Registry sous le nom `electricity-consumption`. ## Servir l'API (Parties 2 a 4) ```bash ./serve.sh # uvicorn 0.0.0.0:8000, charge models:/...@champion curl -s localhost:8000/health # {"status":"ok"} curl -s -X POST localhost:8000/predict \ -H 'content-type: application/json' -d '{"client_id":"MT_124"}' curl -s -X POST localhost:8000/predict/batch \ -H 'content-type: application/json' -d '{"client_ids":["MT_124","MT_158"]}' ``` - Endpoints : `GET /health`, `POST /predict`, `POST /predict/batch`, Swagger `GET /docs`. - Feature store **simule** par un dictionnaire (`lab/serving/features.py`) ; client inconnu -> **404**. - Depuis le poste (cert ENI de confiance) : **https://api.192-168-122-143.nip.io/docs** (reverse-proxy Caddy vers uvicorn). Unite systemd transitoire : `sudo systemctl status tp03-api`. ## Livrable TP03 Reponses aux questions et recap : `SYNTHESE_TP03.md`.