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

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

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

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

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

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

❯ 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 .

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

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

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

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

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

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

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

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

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

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

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

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

.. 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

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

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

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

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

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

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

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)

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

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

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

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”

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

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

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

  • 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

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