MLOops!.. I Did it Again. Monter une plateforme AI sur les infras OVHCloud.

A presentation at Very Tech Trip in February 2023 in Paris, France by Jean-Luc Tromparent

Slide 1

Slide 1

MLOops!.. I Did It Again Monter une plateforme AI sur les infras OVHCloud

Slide 2

Slide 2

Jean-Luc Tromparent Bienvenue! Embarquement immédiat pour un voyage vers les réseaux profonds @JLT @jlt@piaille.fr Principal engineer @ hellowork.com Dev & Ops & Data

Slide 3

Slide 3

Hello World ! http://yann.lecun.com/exdb/mnist/

Slide 4

Slide 4

Hello World ! http://yann.lecun.com/exdb/mnist/

Slide 5

Slide 5

Accuracy 𝑝𝑟é𝑑𝑖𝑐𝑡𝑖𝑜𝑛𝑠 𝑐𝑜𝑟𝑟𝑒𝑐𝑡𝑒𝑠 = 𝑛𝑜𝑚𝑏𝑟𝑒 𝑡𝑜𝑡𝑎𝑙 𝑑𝑒 𝑝𝑟é𝑑𝑖𝑐𝑡𝑖𝑜𝑛𝑠 Error rate 𝑝𝑟é𝑑𝑖𝑐𝑡𝑖𝑜𝑛𝑠 𝑒𝑟𝑟𝑜𝑛é𝑒𝑠 = 𝑛𝑜𝑚𝑏𝑟𝑒 𝑡𝑜𝑡𝑎𝑙 𝑑𝑒 𝑝𝑟é𝑑𝑖𝑐𝑡𝑖𝑜𝑛𝑠

Slide 6

Slide 6

Leaderboard MNIST https://paperswithcode.com/sota/imageclassification-on-mnist TIENS… Et si on clonait ce repo ?

Slide 7

Slide 7

❯ git clone https://github.com/ansh941/MnistSimpleCNN.git Clonage dans ‘MnistSimpleCNN’… remote: Enumerating objects: 519, done. remote: Counting objects: 100% (12/12), done. remote: Compressing objects: 100% (9/9), done. remote: Total 519 (delta 6), reused 3 (delta 3), pack-reused 507 Réception d’objets: 100% (519/519), 622.69 Mio | 6.34 Mio/s, fait. Résolution des deltas: 100% (39/39), fait. ~ on master [?] on ☁ (gra) took 1m40s Git clone MnistSimpleCNN ❯ cd 212K 4,0K 625M 116M 742M MnistSimpleCNN ; du -h -d 1 ./code ./logs ./.git ./data .

Slide 8

Slide 8

DVC : Data Version Control Objectif: rendre reproductible la production de modèles

Slide 9

Slide 9

DVC : commandes de base Tracker des fichiers de données en symbiose avec git dvc init dvc add data.csv dvc commit dvc checkout dvc push dvc pull

Slide 10

Slide 10

Exemple : on veut tracker data.csv avec dvc dvc init dvc add data.csv dvc commit dvc checkout dvc push dvc pull git ./.git ./data.csv ./train.py

Slide 11

Slide 11

Initialisation du cache /.dvc dvc init dvc add data.csv dvc commit dvc checkout dvc push dvc pull ./.dvc/config ./.dvc/cache ./.git ./data.csv ./train.py git git

Slide 12

Slide 12

Tracking d’un fichier ou répertoire avec dvc dvc init dvc add data.csv dvc commit dvc checkout dvc push dvc pull ./.dvc/config ./.dvc/cache ./.git ./.gitignore ./data.csv ./data.csv.dvc ./train.py git copie git dvc git git hash

Slide 13

Slide 13

Synchronisation du cache dvc avec un remote storage dvc init dvc add data.csv dvc commit dvc checkout dvc push dvc pull

Slide 14

Slide 14

DVC : remote storage Support de 12 technos différentes (azure storage, S3, google drive..) Config pour Object Storage @OVH ❯ dvc remote add -d myremote s3://mycontainer ❯ dvc remote modify myremote endpointurl https://s3.gra.io.cloud.ovh.net ❯ cat .dvc/config [core] remote = myremote [‘remote “myremote”’] url = s3://mycontainer endpointurl = https://s3.gra.io.cloud.ovh.net Variables d’environnement ❯ export AWS_ACCESS_KEY_ID= c93c571d5214a9482157491bd4a5 ❯ export AWS_SECRET_ACCESS_KEY= **************************** ❯ export AWS_DEFAULT_REGION=gra

Slide 15

Slide 15

DVC : Mise en place d’un pipeline de training Refactoring de l’exemple convnet de la librairie Keras: https://github.com/keras-team/keras-io/blob/master/examples/vision/mnist_convnet.py dataset mnist (helper keras) hyper paramètres mnist_convnet.py metrics

Slide 16

Slide 16

On découpe le code en étape dataset mnist (helper keras) hyper paramètres train.py metrics mnist_convnet.py model.h5 evaluate.py metrics

Slide 17

Slide 17

On place les hyperparamètres dans un fichier yaml dataset mnist (helper keras) ❌ hyper paramètres metrics mnist_convnet.py params.yaml train.py model.h5 evaluate.py metrics

Slide 18

Slide 18

On charge les datasets depuis le filesystem ❌ dataset mnist (helper keras) ❌ hyper paramètres metrics mnist_convnet.py params.yaml train.py model.h5 evaluate.py data/train data/test metrics

Slide 19

Slide 19

On identifie les dépendances que DVC va tracker ❌ dataset mnist (helper keras) ❌ hyper paramètres metrics mnist_convnet.py params.yaml train.py model.h5 evaluate.py data/train data/test metrics

Slide 20

Slide 20

.. toutes les dépendances (y compris le code) ❌ dataset mnist (helper keras) ❌ hyper paramètres metrics mnist_convnet.py params.yaml train.py model.h5 evaluate.py data/train data/test metrics

Slide 21

Slide 21

Définition du pipeline ❯ dvc stage add -n train \ -p epochs,depth,dropout \ -d src/train.py \ -d data \ -o models/model.h5 \ python src/train.py On peut ensuite lancer le pipeline avec « dvc repro » dvc.yaml stages: train: cmd: python src/train.py deps: - data - src/train.py params: - epochs - depth - dropout outs: - models/model.h5

Slide 22

Slide 22

Continous Machine Learning • Gitflow for datascience • Auto report for ML experiment • Unifier le pilotage des ressources de différents cloud providers

Slide 23

Slide 23

CML –Continous Machine Learning gitlab-ci.yaml stages: - launch - train launch-runner: stage: launch image: iterativeai/cml:0-dvc2-base1 script: - | cml runner launch \ —cloud=aws \ –cloud-region=eu-west1 \ —cloud-type=xl \ —labels=cml-gpu train-and-report: stage: train needs: [launch-runner] tags: [cml-gpu] image: iterativeai/cml:0-dvc2-base1-gpu script: - dvc pull - dvc repro - dvc metrics diff —show-md > report.md - cml comment create report.md

Slide 24

Slide 24

Le plan est prêt ! Déploiement d’un cluster k8s ovh avec IAC: terraform puis helm pour l’operateur GPU de nvidia Lancement du runner dans un container k8s en utilisant cml runner launch Pipeline d’entrainement exploitant dvc repro

Slide 25

Slide 25

Je ne dirais pas que c’est un échec…

Slide 26

Slide 26

Je ne dirais pas que c’est un échec… 🤔 Temps de démarrage k8s

Slide 27

Slide 27

Je ne dirais pas que c’est un échec… 🤔 😨 Temps de démarrage k8s CML mis à dispo sous forme d’image docker peu stable 0-dvc2-base1 == latest (cml 0.18.17)

Slide 28

Slide 28

Je ne dirais pas que c’est un échec… 🤔 😨 😱 Temps de démarrage k8s CML mis à dispo sous forme d’image docker peu stable 0-dvc2-base1 == latest (cml 0.18.17) Le runner qui s’enregistre et qui stop tout de suite … sans logs

Slide 29

Slide 29

Je ne dirais pas que c’est un échec… 🤔 😨 😱 Temps de démarrage k8s CML mis à dispo sous forme d’image docker peu stable 0-dvc2-base1 == latest (cml 0.18.17) Le runner qui s’enregistre et qui stop tout de suite … sans logs

Slide 30

Slide 30

Introducing AIRunner https://gitlab.com/verytechtrip/airunner AIRunner = tensorflow-gpu + dvc 2.42.0 + cml 0.18.17 + gitlab-runner Merci aux Équipes d’OVHcloud AI Training Inspiré de: • https://github.com/ovh/ai-training-examples • https://github.com/MaximeWeyl/ai-images-sources

Slide 31

Slide 31

AIRunner gitlab-ci.yaml launch-runner: stage: launch before_script: - curl https://cli.gra.training.ai.cloud.ovh.net/install.sh | bash - /root/bin/ovhai login -u ${OVHAI_USER} -p ${OVHAI_PASSWORD} script: - | /root/bin/ovhai job run \ —flavor ai1-1-gpu \ —gpu 1 \ —env CI_SERVER_URL=”$CI_SERVER_URL” \ —env CI_API_V4_URL=”$CI_API_V4_URL” \ —env CI_PROJECT_ID=”$CI_PROJECT_ID” \ —env REPO_TOKEN=”$REPO_TOKEN” \ —env RUNNER_TAG=”airunner” \ “registry.gitlab.com/verytechtrip/airunner:1.0.0”

Slide 32

Slide 32

Démo https://gitlab.com/verytechtrip/mlops It’s DEMO TIME!

Slide 33

Slide 33

Démo https://gitlab.com/verytechtrip/mlops It’s DEMO TIME! • • • • • • • • DVC: stocker et versionner un dataset DVC: définir un pipeline d’apprentissage … lancé depuis gitlab … sur une infra GPU … que l’on peut paralléliser … pour obtenir rapidement un rapport … partagé avec l’équipe … qui va pouvoir collaborer sur la mise au point du modèle via des merge requests

Slide 34

Slide 34

  • orienté datascience DVC
  • Meilleure intégration gitlab & github + Pas d’install supplémentaire (plugin git) git LFS

Slide 35

Slide 35

  • Coût (1 gpu =1.65€/h) cml runner
  • Temps d’init + Design pour usage CI/CD + Multi-cloud ⚠ Maturité
  • Coût (1 gpu = 1.93€/h) + Init très rapide OVH AI training

Slide 36

Slide 36

We are hiring ! Find me online : @JLT @jlt@piaille.fr jltrom Take out the good stuff : https://gitlab.com/verytechtrip/

Slide 37

Slide 37