Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

📈 MLflow – Lifecycle, Tracking, Registry & MLOps

Guide complet IDEO-Lab sur la plateforme open-source de MLOps (Suivi, Projets, ModĂšles).

1.1

Concept : MLOps

Qu'est-ce que MLOps ? (DevOps pour le ML).

MLOps ML Lifecycle
1.2

Les 4 Composants

Tracking, Projects, Models, Registry.

Tracking Models Registry
1.3

Architecture

Tracking Server, Backend Store, Artifact Store.

Architecture Tracking Server
2.1

Tracking : Concepts

Experiment (Expérience), Run (Exécution).

Experiment Run
2.2

Tracking : Logging (API)

log_param, log_metric, log_artifact.

log_param log_metric
2.3

Tracking : Serveur

Local (file://) vs Distant (http://, databricks://).

Serveur Remote
3.1

Tracking : Autologging

mlflow.autolog() (Scikit-learn, TensorFlow...).

Autolog scikit-learn
3.2

Outil : mlflow ui

L'interface Web (mlflow ui) (Comparaison de Runs).

mlflow ui Web UI
3.3

API : start_run() (Contexte)

Utilisation de with mlflow.start_run():.

with Context
4.1

Projects : Concept (Reproductibilité)

Empaqueter le code (MLproject file).

Projects Reproductibilité
4.2

Projects : Fichier MLproject

name, conda_env, docker_env, entry_points.

MLproject conda_env
4.3

CLI : mlflow run

Exécuter un projet (local, ou git@...).

mlflow run git
5.1

Models : Concept (Le "Format")

Le format ("flavor") universel (Agnostique).

Models Format
5.2

Models : Flavors (Saveurs)

python_function (pyfunc), scikit-learn, tensorflow...

Flavors pyfunc
5.3

API : log_model() (Sauvegarde)

Sauvegarder le modĂšle (model.pkl + MLmodel file).

log_model MLmodel
6.1

Registry : Concept (Gouvernance)

Le "Git" des modĂšles (Gestion de versions).

Model Registry Gouvernance
6.2

Registry : Registered Model

Versions (v1, v2), Stage (Staging, Production, Archived).

Registered Model Versions
6.3

Registry : Workflow (API/UI)

mlflow.register_model(), transition_model_version_stage().

API Workflow
7.1

Déploiement : serve

mlflow models serve (API REST locale).

mlflow models serve API REST
7.2

Déploiement : pyfunc.load_model

Charger (load_model) et Prédire (.predict()).

pyfunc load_model
7.3

Écosystùme : Databricks

Intégration native (HÎte managé pour Tracking & Registry).

Databricks Intégration
1.1 Concept : MLOps (Lifecycle Management)
MLOps (DevOps pour le Machine Learning)

MLOps est une culture (comme DevOps) qui vise Ă  industrialiser (mettre en production) et maintenir le cycle de vie du Machine Learning de maniĂšre fiable et reproductible.

Le ProblĂšme (Sans MLOps)

Le ML est "expérimental". Un Data Scientist peut avoir 50 "Notebooks" (Jupyter) avec des noms comme test_v2_final.ipynb, test_v3_final_CORRECTED.ipynb.

ProblĂšmes :

  • ReproductibilitĂ© : Impossible de savoir quels "hyperparamĂštres" (inputs) ont produit le "meilleur modĂšle" (output).
  • DĂ©ploiement : Comment transformer ce .ipynb en une API REST fiable ?
  • Gouvernance : Quelle version du modĂšle tourne en Production ?
Solution : Apache MLflow

MLflow (créé par Databricks, 100% open-source) est une plateforme agnostique (elle fonctionne avec Scikit-learn, TensorFlow, PyTorch, R...) pour gérer le cycle de vie (lifecycle) complet du ML.

Les 4 Piliers (Composants)

MLflow est divisĂ© en 4 composants (qui peuvent ĂȘtre utilisĂ©s ensemble ou sĂ©parĂ©ment) :

  1. MLflow Tracking (2.1) : (Le CƓur) L'API/UI pour enregistrer (logger) les expĂ©riences (paramĂštres, mĂ©triques).
  2. MLflow Projects (4.1) : (Reproductibilité) Un format (MLproject) pour empaqueter (package) le code (avec ses dépendances conda/docker).
  3. MLflow Models (5.1) : (Format) Un format "standard" (MLmodel) pour sauvegarder les modĂšles.
  4. MLflow Model Registry (6.1) : (Gouvernance) Un registre (catalogue) centralisé pour gérer les versions de modÚles (Staging, Production).
1.2 Les 4 Composants
ComposantObjectif (ProblÚme Résolu)Artefacts Clés
MLflow TrackingReproductibilité (Expériences). (Quels paramÚtres ont donné quel score ?).Run (Exécution), Métriques, ParamÚtres, UI (Comparaison).
MLflow ProjectsReproductibilité (Exécution). (Comment ré-exécuter ce code sur une autre machine ?).MLproject (Fichier YAML), conda.yaml, docker_env.
MLflow ModelsPortabilité (Format). (Comment packager ce modÚle (Scikit) pour qu'il soit lisible (ex: par Spark) ?).MLmodel (Fichier YAML), Flavors (pyfunc).
MLflow Model RegistryGouvernance (DĂ©ploiement). (Quelle version (v5) est en "Production" ? Laquelle est en "Staging" ?).Registered Model, Versions, Stages (Étapes).
1.3 Architecture (MLflow Tracking Server)

L'architecture de MLflow Tracking (le cƓur) sĂ©pare les MĂ©tadonnĂ©es (Backend) des Fichiers (Artifacts).

(Data Scientist 1)
 (mlflow.log_param(...))
       │
       │ (API REST)
       ▌
[ MLFLOW TRACKING SERVER (Serveur) ]
 (ex: mlflow server --host 0.0.0.0)
       │
       │
 (Écrit MĂ©tadonnĂ©es : Param/Metrics)
       │
       ▌
[ 1. BACKEND STORE ]
 (ex: BDD (Postgres, MySQL)
  ou 'file:/path/mlruns')
       │
       │
 (Écrit Fichiers : Modùles/Images)
       │
       ▌
[ 2. ARTIFACT STORE ]
 (ex: S3, ADLS, GCS, HDFS
  ou '/path/mlartifacts')
  • Tracking Server : Le serveur (service) qui expose l'API REST et l'UI Web.
  • Backend Store : (La "BDD") Stocke les MĂ©tadonnĂ©es (Params, Metrics, Tags, Runs). (Peut ĂȘtre file: (local) ou postgresql://... (Prod)).
  • Artifact Store : (Le "Disque Dur") Stocke les Artefacts (gros fichiers) (ex: le model.pkl, graph.png). (Peut ĂȘtre file: (local) ou s3://... (Prod)).
2.1 Tracking : Concepts (Experiment & Run)

MLflow Tracking organise le travail (similaire Ă  un "commit Git").

1. Experiment (Expérience)

C'est le "Dossier" (le "Projet") qui regroupe les exĂ©cutions (Runs) d'un mĂȘme problĂšme.

Exemple : "Prédiction Churn ClientÚle", "Classification d'Images".

Une "Experiment" a un ID (experiment_id) et un Nom.

2. Run (Exécution)

C'est l'"Exécution" (le "Commit"). C'est 1 seule exécution de votre script d'entraßnement (train.py).

Un "Run" (avec un run_id unique) contient :

  • Parameters (ParamĂštres) : Les Inputs (HyperparamĂštres) (ex: learning_rate=0.01, n_estimators=100).
  • Metrics (MĂ©triques) : Les Outputs (Scores) (ex: accuracy=0.92, loss=0.15). (Peuvent ĂȘtre loggĂ©s (tracĂ©s) dans le temps (Epochs)).
  • Artifacts (Artefacts) : Les Fichiers (Outputs) (gros objets) (ex: model.pkl, confusion_matrix.png, features.txt).
  • Tags (Tags) : MĂ©tadonnĂ©es (ex: git_commit, user).
2.2 Tracking : Logging (API Python)

Exemple de "logging" (enregistrement) manuel d'un Run (exécution) depuis un script Python.

import mlflow

# 1. (Optionnel) Définir le serveur de suivi
# (Si omis, logge localement dans ./mlruns)
mlflow.set_tracking_uri("http://mon-serveur-mlflow:5000")

# 2. Définir l'Expérience (Projet)
mlflow.set_experiment("Prediction_Ventes_Decembre")

# 3. Démarrer un nouveau Run (Exécution)
# (Utiliser 'with' est la bonne pratique)
with mlflow.start_run(run_name="Run_RandomForest_v1") as run:

    # (Logguer le 'run_id')
    print(f"Run ID: {run.info.run_id}")

    # 4. Logger les Inputs (HyperparamĂštres)
    learning_rate = 0.01
    n_estimators = 100
    mlflow.log_param("learning_rate", learning_rate)
    mlflow.log_param("n_estimators", n_estimators)

    # (... (Code d'entraĂźnement du modĂšle) ...)
    # model = ...

    # 5. Logger les Outputs (Métriques/Scores)
    accuracy = 0.92
    loss = 0.15
    mlflow.log_metric("accuracy", accuracy)
    mlflow.log_metric("loss", loss)

    # (Logger une métrique sur la durée (ex: epochs))
    for epoch in range(10):
        mlflow.log_metric("epoch_loss", loss_par_epoch, step=epoch)

    # 6. Logger les Fichiers (Artefacts)
    # (Sauvegarder un fichier texte)
    mlflow.log_text("feature_list.txt", "feature1, feature2")
    
    # (Sauvegarder une image (ex: matplotlib))
    mlflow.log_figure(fig, "confusion_matrix.png")
    
    # (Sauvegarder le ModĂšle (voir 5.3))
    mlflow.sklearn.log_model(model, "model_sklearn")
    
# (Le Run est 'Terminé' (FINISHED) à la fin du 'with')
2.3 Tracking : Serveur (Local vs Distant)
Mode 1 : Local (file://)

C'est le mode par défaut si vous ne configurez rien.

Action : MLflow crée un dossier ./mlruns (dans votre dossier local) à cÎté de votre script.

  • Backend Store : ./mlruns (Fichiers)
  • Artifact Store : ./mlruns/[experiment_id]/[run_id]/artifacts/

Usage : Développement rapide, tests locaux.

Inconvénient : Ne fonctionne pas pour le travail d'équipe (les logs sont sur votre PC).

Mode 2 : Distant (http://) (Production)

C'est le mode "Production" (centralisé).

Architecture :

  1. (Admin) Déploie un serveur (VM/Container).
  2. (Admin) Installe une BDD (ex: Postgres) (pour le "Backend Store").
  3. (Admin) Crée un Bucket (ex: S3, ADLS) (pour l'"Artifact Store").
  4. (Admin) Lance le Serveur de Suivi (Tracking Server) :
    $ mlflow server \
        --host 0.0.0.0 \
        --port 5000 \
        --backend-store-uri postgresql://... \
        --default-artifact-root s3://mon-bucket-mlflow/
    
  5. (Data Scientist) Configure son client (variable d'env) :
    $ export MLFLOW_TRACKING_URI="http://[IP_SERVEUR]:5000"
    $ python train.py
    

Résultat : Toutes les expériences (de toute l'équipe) sont centralisées (BDD) et les artefacts (modÚles) sont stockés (S3).

3.1 Tracking : Autologging

Le "logging" manuel (2.2) (log_param, log_metric) est verbeux.

Autologging (mlflow.autolog()) est une fonctionnalité "magique" qui s'accroche (hooks) aux librairies ML populaires (Scikit-learn, TensorFlow, PyTorch...) et enregistre automatiquement tout (Params, Metrics, ModÚle).

import mlflow
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# (Données X_train, y_train...)

# 1. Activer l'Autolog (AVANT 'fit')
mlflow.sklearn.autolog()

with mlflow.start_run() as run:
    # 2. Définir le modÚle
    rf = RandomForestClassifier(
        n_estimators=100,
        max_depth=5
    )
    
    # 3. EntraĂźner
    rf.fit(X_train, y_train) # <--- Magie ici
    
    # 4. Prédire
    preds = rf.predict(X_test)
    accuracy = accuracy_score(y_test, preds)
    
    # 5. (Logguer la métrique finale)
    mlflow.log_metric("accuracy", accuracy)

# --- RÉSULTAT (Automatique) ---
# MLflow a AUTOMATIQUEMENT loggué :
#  Params: { n_estimators: 100, max_depth: 5, ... }
#  Metrics: { training_accuracy: 0.95, ... }
#  Artifacts: { model: (le model.pkl), ... }
3.2 Outil : mlflow ui (Interface Web)

mlflow ui est l'interface web (locale) pour visualiser les résultats (Runs) loggés par MLflow Tracking.

Usage (Mode Local)

Si vous avez loggé localement (Mode 1 - ./mlruns), vous pouvez lancer l'UI :

# (Lance l'UI Web sur http://127.0.0.1:5000)
$ mlflow ui
# (ou, si le backend/artifact est distant)
$ mlflow ui --backend-store-uri ... --default-artifact-root ...
Fonctionnalités (UI)
  • Vue (Experiment) : Liste tous les "Runs" (lignes) avec les "Params" et "Metrics" (colonnes).
  • Tri & Filtre : "Trier par accuracy (DESC)", "Filtrer n_estimators = 100".
  • Comparaison (Compare) : (Le plus puissant) SĂ©lectionner 2 (ou N) "Runs" pour les comparer (visualiser les diffĂ©rences de Params/Metrics, Graphes...).
  • Vue (Run) : Voir les dĂ©tails (Artefacts (model.pkl), Tags...).
3.3 API : mlflow.start_run() (Contexte)

Il y a deux façons de gérer un "Run" (Exécution) :

1. Manuel (start_run / end_run)
# (Approche "Legacy" / Manuelle)
try:
    mlflow.start_run()
    
    mlflow.log_param("p1", 1)
    
    # (Si le code crashe ici...)
    if (error):
        raise Exception("Oups")
        
    mlflow.log_metric("m1", 0.9)
    
    mlflow.end_run(status="FINISHED")
    
except Exception as e:
    # (Le run reste 'RUNNING' (Actif)
    #  si on ne le ferme pas manuellement)
    mlflow.end_run(status="FAILED")
2. Contexte (with ... as ...) (Python)

L'utilisation du "Context Manager" (with) est la meilleure pratique (plus propre et plus sûre).

# (Le 'with' gĂšre le try/except/finally)
try:
    with mlflow.start_run(run_name="Mon Run") as run:
        
        mlflow.log_param("p1", 1)
        
        if (error):
            raise Exception("Oups") # (Déclenche une exception)
            
        mlflow.log_metric("m1", 0.9)
        
        # (Si le 'with' se termine SANS exception,
        #  MLflow met le statut Ă  'FINISHED')
        
except Exception as e:
    # (Si le 'with' se termine AVEC une exception,
    #  MLflow met le statut Ă  'FAILED')
    print("Run a échoué.")
4.1 Projects : Concept (Reproductibilité)

MLflow Projects est une convention (un standard) pour empaqueter (packager) du code (Data Science) afin de le rendre reproductible.

Le ProblĂšme

Un Data Scientist (Alice) vous envoie son script train.py (et un Run ID MLflow). Vous (Bob) essayez de le lancer (python train.py).

Échec : "ModuleNotFoundError: No module named 'tensorflow'".

(Bob n'a pas le bon conda env, les bonnes versions de libs, ou les bons paramÚtres qu'Alice a utilisés).

Solution (MLproject)

Un "MLflow Project" est un dossier (ou un dépÎt Git) qui contient :

  1. Le Code (ex: train.py).
  2. Un Fichier MLproject (4.2) : (Le "manifeste") Définit les "points d'entrée" (main) et les commandes.
  3. Un Fichier d'Environnement (ex: conda.yaml) : (Le "lockfile") Définit les dépendances (tensorflow==2.10, scikit-learn==1.2).

(Voir 4.3) Bob n'exécute plus python train.py. Il exécute mlflow run .... MLflow lit conda.yaml, crée l'environnement (isolé), puis exécute le code (reproductible).

4.2 Projects : Fichier MLproject (Le Manifeste)

Le fichier MLproject (un YAML à la racine du projet) définit les points d'entrée (entry points).

# Fichier: MLproject (YAML)

# (Nom du projet)
name: MonProjetExample

# (Environnement requis)
# (Peut ĂȘtre 'conda.yaml', 'python_env.yaml'
#  ou 'docker_env')
conda_env: conda.yaml

# (Points d'entrée = commandes 'exec')
entry_points:
  
  # (Point d'entrée 'main')
  main:
    # (ParamĂštres attendus)
    parameters:
      data_file: {type: string, default: "data.csv"}
      learning_rate: {type: float, default: 0.01}
    
    # (La commande à exécuter)
    command: "python train.py --data {data_file} --lr {learning_rate}"

  # (Point d'entrée 'validate')
  validate:
    command: "python validate.py"
4.3 CLI : mlflow run

La commande mlflow run est l'exécuteur de "MLflow Projects" (4.1).

Flux d'Exécution (mlflow run ...)
  1. mlflow run . -e main -P learning_rate=0.05
  2. MLflow lit MLproject (4.2).
  3. Il lit conda.yaml (défini dans MLproject).
  4. Il crée un environnement conda (isolé) (ex: ./mlflow-env/) et installe les dépendances (tensorflow...).
  5. Il active l'environnement conda.
  6. Il exécute la command: du point d'entrée "main" (en passant les -P).
    python train.py --data data.csv --lr 0.05
Exécution (DépÎt Git)

mlflow run peut exécuter un projet directement depuis Git (pour la reprod.) :

# (Clone le dépÎt, crée l'env, exécute)
$ mlflow run https://github.com/mon-repo/mon-projet-ml \
    --version main \
    -P alpha=0.5
5.1 Models : Concept (Le "Format")

MLflow Models est une convention (un format standard) pour empaqueter (packager) un modĂšle ML (issu de n'importe quel framework) afin qu'il puisse ĂȘtre rĂ©utilisĂ© (ex: servi en API REST, chargĂ© dans Spark).

Le Dossier "ModĂšle"

Un "ModĂšle MLflow" n'est pas 1 fichier. C'est un dossier qui contient :

  1. MLmodel (Le Manifeste) : Un fichier YAML (crucial) qui définit le modÚle, ses "Flavors" (5.2), et ses dépendances (conda.yaml).
  2. Les Fichiers du ModĂšle : (ex: model.pkl (Scikit), saved_model.pb (TensorFlow)).
  3. conda.yaml : L'environnement exact (dépendances) requis pour *exécuter* ce modÚle.
5.2 Models : Flavors (Saveurs)

Les "Flavors" (Saveurs) sont la clĂ© du format MLmodel (5.1). Elles dĂ©crivent les diffĂ©rentes façons dont ce modĂšle peut ĂȘtre compris (chargĂ©).

Exemple (Fichier MLmodel d'un modĂšle Scikit-learn)
# Fichier: /.../mon-modele/MLmodel (YAML)

artifact_path: model_sklearn
flavors:
  
  # Flavor 1 : "scikit-learn" (Natif)
  # (Sait qu'il faut utiliser 'pickle.load()')
  sklearn:
    pickled_model: model.pkl
    sklearn_version: 1.2.0
    
  # Flavor 2 : "python_function" (pyfunc) (Générique)
  # (Le "wrapper" universel)
  python_function:
    loader_module: mlflow.sklearn
    python_version: 3.9
    env: conda.yaml
    
# Dépendances requises pour exécuter ce modÚle
conda_env: conda.yaml 
Le "Flavor" pyfunc (Le plus important)

python_function (pyfunc) est le "format universel". Il garantit que *n'importe quel* modĂšle (Scikit, TF, PyTorch) expose la mĂȘme API (signature) : une fonction .predict(dataframe).

Usage : Permet au MLflow Model Server (7.1) de servir (API REST) n'importe quel type de modĂšle, sans connaĂźtre sa technologie sous-jacente.

5.3 API : log_model() (Sauvegarde)

L'API log_model() (ex: mlflow.sklearn.log_model) est la fonction (utilisée dans un "Run" (2.2)) qui crée le Dossier ModÚle (5.1) (MLmodel, conda.yaml, model.pkl) et l'enregistre (upload) dans l'Artifact Store (1.3).

import mlflow.sklearn
from sklearn.ensemble import RandomForestClassifier

# (EntraĂźner le modĂšle)
model = RandomForestClassifier()
model.fit(X_train, y_train)

# (Commencer un Run)
with mlflow.start_run() as run:
    
    # ... (log_param, log_metric) ...
    
    # 1. Sauvegarder (Logguer) le ModĂšle
    mlflow.sklearn.log_model(
        sk_model = model,
        # (Nom du dossier dans les "Artifacts")
        artifact_path = "model_rf", 
        
        # (Optionnel) (Enregistre aussi
        #  le 'conda.yaml' actuel)
        conda_env = "conda.yaml"
    )
    
    run_id = run.info.run_id

# (Résultat : Le modÚle est dans
#  s3://.../[exp_id]/[run_id]/artifacts/model_rf/)
6.1 Registry : Concept (Gouvernance)

ProblÚme : MLflow Tracking (2.1) est un "chaos" (des milliers de "Runs" expérimentaux). Comment savoir quel "Run" (ex: run_id=abc123) est le meilleur, et lequel est actuellement utilisé en Production ?

Solution : MLflow Model Registry (Registre)

Le Model Registry (Registre de ModÚles) est le systÚme de gouvernance (Dev -> Staging -> Prod) de MLflow. C'est le "catalogue" centralisé des modÚles "promus" (approuvés).

Il nécessite un Tracking Server (2.3) distant (ex: Postgres + S3). (Ne fonctionne pas avec file://).

Workflow (Conceptuel)
  1. (Data Scientist) Exécute 100 "Runs" (Tracking).
  2. (DS) (UI) Trouve le "Run" (abc123) (Meilleur score).
  3. (DS) (UI) Clique "Register Model" (Enregistrer). (Crée Modele_A, Version 1).
  4. (Manager) (UI) Reçoit une demande, valide, et passe Version 1 au "Stage" (Étape) "Staging".
  5. (CI/CD) Le systÚme (ex: Jenkins) déploie automatiquement la Version 1 (Staging).
  6. (Manager) (UI) Valide les tests, et passe Version 1 au "Stage" "Production".
6.2 Registry : Registered Model, Version, Stage

Le Registre (Registry) utilise 3 objets :

[ 1. Registered Model ] (ex: "Prediction_Churn")
  (Le "Nom" du modĂšle)
  │
  ├─ [ 2. Version 1 ] (ex: 'run_id=abc123')
  │    (Stage: "Archived")
  │
  ├─ [ 2. Version 2 ] (ex: 'run_id=def456')
  │    (Stage: "Staging")
  │
  └─ [ 2. Version 3 ] (ex: 'run_id=ghi789')
       (Stage: "Production")
  • 1. Registered Model (ModĂšle EnregistrĂ©) : Le "nom" unique (global) du modĂšle (ex: "Prediction_Churn").
  • 2. Version : Un "snapshot" (pointeur) vers un Run ID (2.1) (Tracking) spĂ©cifique. (ex: "Version 1", "Version 2"...).
  • 3. Stage (Étape) : (Legacy) Une "Ă©tiquette" (Tag) assignĂ©e Ă  une Version (Staging, Production, Archived).
    Note : Les "Stages" (Production/Staging) sont obsolĂštes (deprecated) au profit des "Tags" (key=value) et des "Aliases" (Pointeurs) (plus flexibles).
6.3 Registry : Workflow (API)
1. Enregistrer un ModĂšle (Tracking -> Registry)

Lier un "Run" (Tracking) Ă  un "Nom" (Registry).

(Python)
# (Option A : En 1 fois, pendant le 'log_model')
with mlflow.start_run() as run:
    mlflow.sklearn.log_model(
        model,
        "model",
        # (Crée "Version 1" de "MonModele")
        registered_model_name="MonModele" 
    )

# (Option B : AprĂšs le Run)
run_id = "abc123..."
model_uri = f"runs:/{run_id}/model"
mlflow.register_model(model_uri, "MonModele")
2. Promouvoir un ModĂšle (Staging/Prod)
(Python)
client = mlflow.tracking.MlflowClient()

# (Passer la "Version 5" du modĂšle en "Production")
client.transition_model_version_stage(
    name="MonModele",
    version=5,
    stage="Production"
)
7.1 Déploiement : mlflow models serve

MLflow inclut un serveur web (REST API) (basé sur Flask) intégré, pour le prototypage rapide (non-recommandé pour la haute performance en production).

Il sert (sert) n'importe quel modÚle (loggé) qui a un "Flavor" pyfunc (5.2).

# (Syntaxe)
mlflow models serve -m [URI_MODELE] -p [PORT]

# 1. Servir un modĂšle depuis un "Run"
$ mlflow models serve \
    -m "runs:/[run_id]/model_rf" \
    -p 5001

# 2. Servir un modĂšle depuis le "Registry" (Prod)
$ mlflow models serve \
    -m "models:/MonModele/Production" \
    -p 5001
    
# (Le serveur démarre sur http://127.0.0.1:5001)

# 3. RequĂȘter (POST /invocations)
$ curl http://127.0.0.1:5001/invocations \
    -H 'Content-Type: application/json' \
    -d '{"dataframe_split": {"columns": ["col1"], "data": [[1.0]]}}'
7.2 Déploiement : pyfunc.load_model (API Custom)

Pour la production (haute performance), au lieu d'utiliser mlflow models serve, on utilise mlflow.pyfunc.load_model à l'intérieur de notre propre serveur web (ex: FastAPI, Flask + Gunicorn).

Exemple (API FastAPI + MLflow)
import mlflow
import pandas as pd
from fastapi import FastAPI

# 1. Définir l'URI du modÚle (Production)
model_uri = "models:/MonModele/Production"

# 2. Charger le modÚle (pyfunc) au démarrage
# (MLflow gĂšre (conda) l'environnement)
model = mlflow.pyfunc.load_model(model_uri)

app = FastAPI()

@app.post("/predict")
def predict(data: dict):
    # (data = {"col1": [1.0], "col2": [0.5]})
    
    # 3. Convertir en DataFrame
    df = pd.DataFrame(data)
    
    # 4. Prédire
    predictions = model.predict(df)
    
    return {"predictions": predictions.tolist()}
7.3 ÉcosystĂšme : Databricks (IntĂ©gration Native)

Databricks (fondateur de MLflow) est la plateforme managée (SaaS) pour MLflow. Elle fournit une version "HÎte" (Hosted) et intégrée de MLflow.

CritÚreMLflow Open Source (DIY)MLflow sur Databricks (Managé)
Tracking ServerManuel (VM, BDD, S3, Sécurité).Automatique (Intégré à chaque Workspace).
Model RegistryManuel (Installation BDD...).Automatique (Intégré, UI améliorée, ACLs).
UI (Interface)mlflow ui (Basique).Intégrée (Rich UI, Comparaison avancée, Notebooks).
Déploiementmlflow models serve (Basique)."Serverless Real-Time Inference" (Managé, Auto-scale).
AutologgingManuel (mlflow.autolog()).Automatique (Activé par défaut dans les Notebooks ML).