Skip to content

Commit

Permalink
reorga
Browse files Browse the repository at this point in the history
  • Loading branch information
avouacr committed Dec 15, 2023
1 parent 451f258 commit c370b11
Show file tree
Hide file tree
Showing 5 changed files with 130 additions and 102 deletions.
2 changes: 1 addition & 1 deletion slides/fr/applications/_application3.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ data_path = "https://minio.lab.sspcloud.fr/projet-formation/diffusion/mlops/data
# Charge le fichier Parquet dans un DataFrame pandas
df = pd.read_parquet(data_path)
# Votre API URL
# URL de l'API
api_url = "https://<your_firstname>-<your_lastname>-api.lab.sspcloud.fr/predict"
# Effectue les requêtes
Expand Down
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@ argo submit formation-mlops/hello_world.yaml



## Application 4
## Application 5

:::{.nonincremental}
:::: {.callout-tip collapse="true" icon=false}
## Partie 2 : décentralisation de l'optimisation des hyperparamètres
## Partie 2 : distriubtion de l'optimisation des hyperparamètres

1. Jetez un coup d'œil au fichier `argo_workflows/workflow.yml`. Que pensez-vous qu'il se passera lorsque nous soumettrons ce flux de travail ?
2. Modifiez la ligne surlignée de la même manière que dans l'application 3.
Expand Down
226 changes: 127 additions & 99 deletions slides/fr/index.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -101,19 +101,19 @@ from: markdown+emoji

. . .

:two: Un exemple concret: Prédiction du code APE pour les entreprises
:two: Un exemple concret: prédiction du code APE pour les entreprises

. . .

:three: Déployer un modèle ML via une API
:three: Servir un modèle de ML à des utilisateurs

. . .

:four: Distribuer l'optimisation des hyperparamètres
:four: Maintenance d'un modèle en production

. . .

:five: Maintenance d'un modèle en production
:five: Distribuer l'optimisation des hyperparamètres


## Application 0 {.scrollable #app0}
Expand Down Expand Up @@ -409,7 +409,127 @@ ojs_define(data_raw = df, data_prepro = df_prepro)

{{< include applications/_application3.qmd >}}

## Bilan

- `MLflow` est [**polyvalent**]{.orange}
- Utilisation dee [**frameworks custom**]{.blue2} (modulo une [**classe "interface"**]{.blue2})
- [**Industrialisation**]{.blue2} de l'entraînement (fichier `MLproject`)
- [**Requêtage simple**]{.blue2} des modèles entraînés et stockés

- [**Limite**]{.orange} : le modèle entraîné n'est pas [**accessible**]{.blue2}
- Requêtage simplifié... mais [**format non-pertinent**]{.blue2} pour tous les utilisateurs
- Le modèle n'est [**pas déployé**]{.blue2}











# :four: Machine learning en production

## Cycle de vie d'un modèle ML en production

![Source: [martinfowler.com](martinfowler.com)](../img/ML-model-lifecycle.png){fig-align="center"}

## Le défi de la responsabilité
::: {.nonincremental}

- Le cycle de vie d'un modèle ML est [**complexe**]{.orange}
- Plusieurs [**parties prenantes**]{.orange} impliquées :
- [**Data scientist**]{.blue2}
- [**IT/DevOps**]{.blue2}
- [**Equipes métiers**]{.blue2}

- [**Expertises**]{.orange} et [**vocabulaire**]{.orange} différents entre ces parties prenantes

➡️ [**Communication**]{.orange} essentielle entre les équipes pour [**contrôler**]{.orange} le modèle en production
:::

## Pourquoi surveiller un modèle en production ?
::: {.nonincremental}

- Détecter des [**données biaisées**]{.orange} : adéquation entre les données de production et données d'entrainement
- Anticiper une [**instabilité du modèle**]{.orange} : performance du modèle stable au fil du temps
- [**Améliorer**]{.orange} de manière continue le modèle : ré-entrainements réguliers

⚠️ Le mot [**surveillance**]{.red2} d'une application/modèle a des définitions différentes en fonction de l'équipe où l'on se trouve.
:::

## Surveillance selon l'informaticien
::: {.nonincremental}

- Surveiller une application est partie intégrante de l'approche [**DevOps**]{.orange}
- Contrôle [**technique**]{.orange} du modèle :
- Latence
- Mémoire
- Utilisation disque
- ...
:::

## Surveillance selon le data scientist
::: {.nonincremental}

- Surveiller un modèle ML est partie intégrante de l'approche [**MLOps**]{.orange}
- Contrôle [**méthodologique**]{.orange} du modèle
- Performance en [**temps réel**]{.orange} du modèle souvent impossible, utilisation de proxys :
- [**Data drift**]{.blue2} : la distribution des données d'entrée change dans le temps
- [**Concept drift**]{.blue2} : la relation modélisée change dans le temps
:::

## Comment surveiller un modèle en production ?
::: {.nonincremental}

- Intégration de [**logs**]{.orange} dans l'API
- Récupération et mise en forme des logs
- Suivi de [**métriques**]{.orange} de ML
- Mise en place d'un système d'[**alertes**]{.orange}
:::

## Application 4 {.scrollable}

{{< include applications/_application4a.qmd >}}

## Observabilité du modèle grâce à un tableau de bord

- Les logs de l'API contiennent maintenant des [**informations métier**]{.orange}
- Pour le [**traitement/stockage**]{.orange} des logs : pipeline [**ETL**]{.blue2}
- Pour analyser le comportement du moteur de codification : création d'un [**tableau de bord**]{.orange}
- Solutions multiples pour le [**tableau de bord**]{.orange} : [[**Grafana**]{.blue2}](https://grafana.com/), [[**Quarto Dashboards**]{.blue2}](https://quarto.org/docs/dashboards/), [[**Apache Superset**]{.blue2}](https://superset.apache.org/), ...

## Un exemple de stack

- [**ETL**]{.orange} sous forme d'un cron job qui parse les logs et les stocke au format `.parquet`
- Utilisation de [[**DuckDB**]{.orange}](https://duckdb.org/) pour requêter les fichiers `.parquet`
- ... et créer les composants d'un [**Quarto Dashboards**]{.orange}
- Le tableau de bord est un site statique à actualiser tous les jours par exemple

## Un exemple de stack

&nbsp;
&nbsp;
&nbsp;
![](../img/dashboard-fr.png){fig-align="center"}


## Application 4 {.scrollable}

{{< include applications/_application4b.qmd >}}

## Bilan

- `MLflow` est [**polyvalent**]{.orange}
- Utilisation dee [**frameworks custom**]{.blue2} (modulo une [**classe "interface"**]{.blue2})
- [**Industrialisation**]{.blue2} de l'entraînement (fichier `MLproject`)
- [**Requêtage simple**]{.blue2} des modèles entraînés et stockés

- [**Limite**]{.orange} : le modèle entraîné n'est pas [**accessible**]{.blue2}
- Requêtage simplifié... mais [**format non-pertinent**]{.blue2} pour tous les utilisateurs
- Le modèle n'est [**pas déployé**]{.blue2}



Expand All @@ -418,7 +538,8 @@ ojs_define(data_raw = df, data_prepro = df_prepro)



# :four: Distribuer l'optimisation des hyperparamètres

# :five: Distribuer l'optimisation des hyperparamètres

## Entraînement distribué

Expand Down Expand Up @@ -579,108 +700,16 @@ spec:
- Autres outils d'orchestration natifs de Python : [**Apache Airflow**]{.orange}, [**Metaflow**]{.orange}, [**Prefect**]{.orange}


## Application 4 {.scrollable}

{{< include applications/_application4.qmd >}}










# :five: Machine learning en production

## Cycle de vie d'un modèle ML en production

![Source: [martinfowler.com](martinfowler.com)](../img/ML-model-lifecycle.png){fig-align="center"}

## Le défi de la responsabilité
::: {.nonincremental}

- Le cycle de vie d'un modèle ML est [**complexe**]{.orange}
- Plusieurs [**parties prenantes**]{.orange} impliquées :
- [**Data scientist**]{.blue2}
- [**IT/DevOps**]{.blue2}
- [**Equipes métiers**]{.blue2}

- [**Expertises**]{.orange} et [**vocabulaire**]{.orange} différents entre ces parties prenantes

➡️ [**Communication**]{.orange} essentielle entre les équipes pour [**contrôler**]{.orange} le modèle en production
:::

## Pourquoi surveiller un modèle en production ?
::: {.nonincremental}

- Détecter des [**données biaisées**]{.orange} : adéquation entre les données de production et données d'entrainement
- Anticiper une [**instabilité du modèle**]{.orange} : performance du modèle stable au fil du temps
- [**Améliorer**]{.orange} de manière continue le modèle : ré-entrainements réguliers

⚠️ Le mot [**surveillance**]{.red2} d'une application/modèle a des définitions différentes en fonction de l'équipe où l'on se trouve.
:::

## Surveillance selon l'informaticien
::: {.nonincremental}

- Surveiller une application est partie intégrante de l'approche [**DevOps**]{.orange}
- Contrôle [**technique**]{.orange} du modèle :
- Latence
- Mémoire
- Utilisation disque
- ...
:::

## Surveillance selon le data scientist
::: {.nonincremental}

- Surveiller un modèle ML est partie intégrante de l'approche [**MLOps**]{.orange}
- Contrôle [**méthodologique**]{.orange} du modèle
- Performance en [**temps réel**]{.orange} du modèle souvent impossible, utilisation de proxys :
- [**Data drift**]{.blue2} : la distribution des données d'entrée change dans le temps
- [**Concept drift**]{.blue2} : la relation modélisée change dans le temps
:::

## Comment surveiller un modèle en production ?
::: {.nonincremental}

- Intégration de [**logs**]{.orange} dans l'API
- Récupération et mise en forme des logs
- Suivi de [**métriques**]{.orange} de ML
- Mise en place d'un système d'[**alertes**]{.orange}
:::

## Application 5 {.scrollable}

{{< include applications/_application5a.qmd >}}

## Observabilité du modèle grâce à un tableau de bord

- Les logs de l'API contiennent maintenant des [**informations métier**]{.orange}
- Pour le [**traitement/stockage**]{.orange} des logs : pipeline [**ETL**]{.blue2}
- Pour analyser le comportement du moteur de codification : création d'un [**tableau de bord**]{.orange}
- Solutions multiples pour le [**tableau de bord**]{.orange} : [[**Grafana**]{.blue2}](https://grafana.com/), [[**Quarto Dashboards**]{.blue2}](https://quarto.org/docs/dashboards/), [[**Apache Superset**]{.blue2}](https://superset.apache.org/), ...
{{< include applications/_application5.qmd >}}

## Un exemple de stack

- [**ETL**]{.orange} sous forme d'un cron job qui parse les logs et les stocke au format `.parquet`
- Utilisation de [[**DuckDB**]{.orange}](https://duckdb.org/) pour requêter les fichiers `.parquet`
- ... et créer les composants d'un [**Quarto Dashboards**]{.orange}
- Le tableau de bord est un site statique à actualiser tous les jours par exemple

## Un exemple de stack

&nbsp;
&nbsp;
&nbsp;
![](../img/dashboard-fr.png){fig-align="center"}


## Application 5 {.scrollable}

{{< include applications/_application5b.qmd >}}

# Conclusion

Expand All @@ -698,4 +727,3 @@ spec:
- Stratégie : [**changement incrémental**]{.orange}
- [**Formation**]{.blue2}
- Application à des [**projets pilotes**]{.blue2}

0 comments on commit c370b11

Please sign in to comment.