Viens dompter ta première IA en Python

A presentation at Devoxx Morocco 2023 in October 2023 in Agadir 80000, Morocco by Thierry Chantier

Slide 1

Slide 1

Viens dompter ta première IA en Python 🧠 🐍 󰠁󰳕

Slide 2

Slide 2

Combien de personnes participent au lab ?

Slide 3

Slide 3

MERCI !!!

Slide 4

Slide 4

Thierry Chantier DevRel @OVHcloud TitiMoby@mamot.fr TitiMoby 🔗 https://noti.st/titimoby

Slide 5

Slide 5

Stéphane Philippart 🏷 🥑 DeveloperRelations@OVHCloud 🦄 🏷 Co-creator of TADx (Agile, Dev, DevOps meetups in Tours) 󰞵 A dev in the clouds ☁ 🐦 @wildagsx 🔗 https://philippart-s.github.io/blog 🐙 https://github.com/philippart-s/ 💬 https://www.linkedin.com/in/philippartstephane/

Slide 6

Slide 6

Vous avez des questions ? Levez la main et lancez-vous ! Ou utilisez le Framapad en ligne : ● https://hebdo.framapad.org/p/lab-ia-python-devoxx -maroc-2023-a3q6 ● https://ovh.to/G6f2o3a

Slide 7

Slide 7

📝 Que va-t-on voir aujourd’hui ? 🧠 Les principes dans l’intelligence artificielle 🐍 Le kit de survie Python pour suivre ce workshop 󰠁 Un CDE c’est quoi et ça sert à quoi ? ☁ Les ressources utilisées chez OVHcloud 󰳕 En avant pour le développement : un notebook, un job d’entraînement et une application utilisant le modèle

Slide 8

Slide 8

Qui est êtes vous ? ● ● ● ● ● Dev Dev Python Data Scientist Machine Learning Engineer Autre

Slide 9

Slide 9

Intelligence Artificielle

Slide 10

Slide 10

L’IA dans notre vie 🏞 DALL·E & ChatGPT 📝

Slide 11

Slide 11

Mais bien plus encore !

Slide 12

Slide 12

Ce que l’IA n’est pas (pour l’instant 😅) 👉 Capable de créer à partir de rien 👉 Capable de raisonner, d’avoir de l’intuition, de juger, … 👉 Capable d’avoir des émotions 👉 Ce n’est pas de “l’intelligence” (on verra plus tard ce que c’est) 👉 Ce n’est pas un cerveau / esprit artificiel

Slide 13

Slide 13

Les différentes catégories de l’IA 👉 Actuellement IA ~ Machine Learning 👉 Artificial Narrow Intelligence (ANI) / Weak AI 👉 Artificial General Intelligence (AGI) / Strong AI 👉 Artificial Super Intelligence (ASI)

Slide 14

Slide 14

Apprendre … 👉 IA : Techniques pour simuler les capacités “intelligentes” d’un être humain 👉 ML : Techniques pour qu’une machine apprenne sans algorithme supplémentaire par l’ingestion de données d’exemples 👉 DL : ML utilisant poussée des réseaux de neurones pour améliorer les performances dans les déductions

Slide 15

Slide 15

Le Machine Learning dans le détail 👉 Supervised learning : apprentissage proche de ce que l’on fait avec l’Homme 👉 Unsupervised learning : apprentissage par patterns et regroupements 👉 Reinforcement learning: apprentissage par renforcement avec système de “récompenses”

Slide 16

Slide 16

Quelques exemples de machine learning 📝 Natural Language Processing (aka NLP) : 👉 Traduction, Classification de textes, Génération de textes, chatbot, … 🏞 Computer Vision 👉 Classification d’images, Détection d’images, Segmentation d’images, … 🔊 Audio 👉 Classification de sons, Langage naturel, musique, … 📝 L’IA générative 👉 ChatGPT, Midjourney, Dall·e, …

Slide 17

Slide 17

Et si on sautait dans le terrier ? Valentin Lacoste

Slide 18

Slide 18

Basiquement l’IA ce n’est (presque) que des … Warner Bros Antoine Dautry Mathématiques Probabilités

Slide 19

Slide 19

Sans donnée … pas d’intelligence ! 🧹 La plupart du temps les données sont brutes : il faudra les nettoyer, les pré-traiter, les transformer, … 📀 Il va falloir les transformer en Dataset (en gros une base de données pour IA) et les labelliser 🧪 Un dataset contient les données d’apprentissage, de validations et de tests 🧮 Enfin, ce sont des vecteurs et autres matrices qui seront manipulés par le modèle

Slide 20

Slide 20

Exemple d’un dataset

Slide 21

Slide 21

Les modèles dans l’IA 🧠 C’est le cerveau de votre application 🔢 C’est ici que l’on retrouve les formules mathématiques 👉 Différents en fonction des tâches de machine learning

Slide 22

Slide 22

Zoom sur l’apprentissage supervisé 👉 Peut-être le plus simple à comprendre ? 👉 Comment déterminer Y (cible / target) en fonction de X (facteur / feature) 👉 Le modèle va être composé des fonctions qui permettent de relier X à Y 👉 X est souvent une combinaison de facteurs

Slide 23

Slide 23

Zoom sur l’apprentissage supervisé 👉 Peut-être le plus simple à comprendre ? 👉 Comment déterminer Y (cible / target) en fonction de X (facteur / feature) 👉 Le modèle va être composé des fonctions qui permettent de relier X à Y 👉 X est souvent une combinaison de facteurs 👉 La qualité de l’apprentissage dépend du dataset (taille & qualité)

Slide 24

Slide 24

Exemple pour un problème de type régression 🎯 Prédire la valeur d’une variable continue en fonction de 1 à n paramètres 🔢 Variable qui peut prendre une infinité de valeurs

Slide 25

Slide 25

Le coût associé au modèle ✨ C’est ce qui va permettre de connaître la qualité d’un modèle 📏 C’est l’écart entre la valeur rendue et la valeur idéale

Slide 26

Slide 26

Deep learning & Réseau de neurones 💪 L’étape d’après … Plus puissante, plus complexe 🧠 Analogie avec les neurones humain plutôt fausse ↔ Essentiellement due au mécanisme d’inter-connexions ⚖ w* sont les poids et permettent d’ajuster le comportement du réseau 🐛 b* sont les biais pour rendre le modèle “plus réaliste” et influer sur la fonction d’activation 🔀 F* sont les fonctions d’activation

Slide 27

Slide 27

Et bien plus encore 🗃 Encore plus de modèles différents 🧮 Encore plus de mathématiques 󰳓 Apprentissage non supervisé 󰳓 Apprentissage par renforcement … Mais pour ça mieux vaut être Data Scientist ou Machine Learning engineer 😅

Slide 28

Slide 28

La puissance, ça compte ! 🔢 Beaucoup de données et beaucoup de calculs “spécialisés” 🧮 Beaucoup de calculs matriciels et de calculs en parallèles 📈 Constante évolution pour gagner en performances et consommer moins 💰 Il est complexe et coûteux de s’approvisionner

Slide 29

Slide 29

GPU vs CPU �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� CPU �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� GPU �� �� ��

Slide 30

Slide 30

Cloud Development Environment

Slide 31

Slide 31

Cloud Development Environment Le code du projet Un éditeur de code Un environnement d’exécution

Slide 32

Slide 32

A la demande ● ● ● ● Pour tester une idée Expérimenter différentes solutions Partager une session de travail entre collègues … sky is the limit (et le coût de votre offre de CDE 😇 )

Slide 33

Slide 33

Reproductible ● Environnement décrit précisément ● Configuration versionnée avec le code ● Cohérence entre l’environnement et le code lui même

Slide 34

Slide 34

Le CDE pour cet atelier : Gitpod ● ● ● ● Simplement ajouter https://gitpod.io/# devant l’URL de votre repository Deux fichiers 📝 de configuration : .gitpod.dockerfile .gitpod.yml Possibilité d’avoir par projets ou globales : ○ Clés SSH ○ variables d’environnement Tunneling possible avec le poste local

Slide 35

Slide 35

Python : 101 pour cet atelier

Slide 36

Slide 36

Python : pourquoi ce choix ? ● 🛠 Langage simple d’approche mais qui reste complet ● 🔋 “All batteries included” ● 🔬 Choix des communautés data science et data analysis

Slide 37

Slide 37

Python : concepts pour aujourd’hui ● 📁 Les fichiers requirements.txt ● 📝 L’instruction import ● 📚 Notebooks

Slide 38

Slide 38

Faire de l’Intelligence Artificielle à OVHcloud Public Cloud AI Notebooks : JupyterLab et VSCode, images pré-construites AI Training : GPU as a Service AI Deploy : CaaS pour l’IA

Slide 39

Slide 39

Workshop time !

Slide 40

Slide 40

🔀 Fork du repository GitHub Projet à forker : https://github.com/devrel-workshop/101-AI-and-py https://ovh.to/ofPmni6

Slide 41

Slide 41

Démarrage de GitPod

Slide 42

Slide 42

⚡ Initialisation de l’environnement GitPod ● ● ● ● ● Créer un compte GitPod (se connecter avec son compte GitHub) Prendre le modèle large Exécuter setup_env.sh Se connecter à SwaggerUI pour récupérer la configuration: http://162.19.64.158/q/swagger-ui/ (attendee / pass) Mettre à jour le fichier .environment ○ ○ ○ ● STUDENT_ID: nombre à partir de 0 REGISTRY_LOGIN: <à récupérer précédemment> REGISTRY_PASSWORD: <à récupérer précédemment> source .environment

Slide 43

Slide 43

🗺 Architecture de l’application

Slide 44

Slide 44

Modèle avec AI Notebook

Slide 45

Slide 45

📄 Instructions https://github.com/devrel-workshop/101-AI-and-py/bl ob/main/docs/notebook.md https://ovh.to/MDaTnP3

Slide 46

Slide 46

🔐 Récupération des comptes IA TODO : mettre la liste ici des comptes / URL vers app de distribution de comptes [ [ “user-fhjWcFUgVsXd”, ], [ “9x5GxtK9VNn4sJKdNPznTZVeyVs92mQg”, ], ]

Slide 47

Slide 47

📀 Récupération de l’object storage TODO : mettre la liste ici des objects storage / URL vers app de distribution ai-objects-storage = [ [ “attendee-0-data”, ], ]

Slide 48

Slide 48

🔐 Authentication via la CLI ovhai ovhai login How do you want to login: > Terminal (login directly inside this terminal) Browser (open a login page on your browser) ℹ Utiliser le compte récupéré à l’étape précédente ℹ

Slide 49

Slide 49

⚡ Création du Notebook ovhai notebook run conda jupyterlab \ —name attendee-$STUDENT_ID-yolov8-rock-paper-scissors-notebook \ —gpu 1 \ —volume attendee-$STUDENT_ID-data@GRA:/workspace/attendee:RW:cache \ —volume https://github.com/devrel-workshop/101-AI-and-py.git:/workspace/101-ai-l ab-sources:RO

Slide 50

Slide 50

📝 Connexion au JupyterLab $ ovhai notebook list ID NAME STATE Xxx attendee-<ID>-yolov8-rock-paper-scissors-notebook RUNNING AGE FRAMEWORK VERSION 6d conda conda-py39-cuda11.8-v22-4 EDITOR URL jupyterlab https://efb3fda1-7b0e-42ed-b6e6-341881071d84.notebook.gra.ai.cloud.ovh.net ℹ Utiliser le compte créé précédemment ℹ

Slide 51

Slide 51

📺 Et dans la console d’admin OVHcloud ?

Slide 52

Slide 52

🗃 Organisation du Notebook Répertoire de sources du workshop - RO Répertoire de sources d’exemples - RO Répertoire des données du workshop - RW ● File > New Terminal ● /workspace/101-ai-lab-sources/ init_ai_env.sh

Slide 53

Slide 53

📀 Data 🗃 Source des données : Roboflow - Rock Paper Scissors SXSW Image Dataset 🗃 Object storage utilisé : ● attendee-$STUDENT_ID-data : ○ ○ ○ ○ ○ Zone de travail pour le / la participant·e Dataset Images de tests Répertoires de travail pour l’entraînement Modèle exporté

Slide 54

Slide 54

🏞 YoloV8 🔡 You Only Look Once 🔗 https://docs.ultralytics.com/ - https://github.com/ultralytics/ultralytics 🏞 Classification / Détection / Segmentation / Détection / Pose 🏞 Entraîné sur le dataset COCO 🐍 Lib python prête à l’emploi 🧠 Utilisation du plus petit modèle avec “seulement” 3.2 millions de paramètres

Slide 55

Slide 55

Un mot sur le transfert learning 🔄 Réutiliser un modèle déjà entraîné 🔎 Le spécialiser dans un domaine bien précis Exemple : détection d’objets divers qui devient une détection de signes

Slide 56

Slide 56

🚀 Exécution du Notebook 1/2 ▶ “Jouer” les cellules du Notebook (bouton ▶) ⤵ Récupération du dataset ⤵ Récupération des dépendances ✅ Vérification de la configuration matérielle (1 GPU) et logicielle (Ultralytics) ⤵ Récupération du modèle yolov8n pré-entraîné sur COCO 🧪 Tester le modèle non entraîné avec une image de joueur

Slide 57

Slide 57

🚀 Exécution du Notebook 2/2 🧠 Entraîner le modèle avec les données du dataset “pierre / feuille / ciseaux” 🔬 Etude de la qualité du modèle 🧪 Tester le nouveau modèle, l’importance des “epochs” 💾 Sauvegarder le modèle

Slide 58

Slide 58

🎉 Bravo vous avez créé votre premier modèle d’intelligence artificielle !! 🎉

Slide 59

Slide 59

Entraînement avec AI Training Clique Images

Slide 60

Slide 60

📄 Instructions https://github.com/devrel-workshop/101-AI-and-py/bl ob/main/docs/training.md https://ovh.to/z84huKC

Slide 61

Slide 61

ℹ Rappels ● ● C’est le même compte que celui du Notebook C’est le même object storage que celui du Notebook

Slide 62

Slide 62

🐳 Création de l’image 📂 Répertoire de travail : src/training - Dockerfile: le dockerfile pour construire l’image Requirements.txt : fichier de gestion des dépendances Python Train.py : script Python pour l’entraînement du modèle 🐳 Fabrication de l’image 🐛 (Optionnel) Run / debug locallement ⬆ Push de l’image dans la registry : <user>/ <pass>

Slide 63

Slide 63

Docker Docker image build 🌠 push 📝 Docker file Registry ⚙ Conteneur d’exécution pull

Slide 64

Slide 64

⚡ Création du Job ovhai job run \ —name attendee-$STUDENT_ID-yolov8-rock-paper-scissors-training-job \ —gpu 1 \ —env NB_OF_EPOCHS=50 \ —volume attendee-$STUDENT_ID-data@GRA:/workspace/attendee:RW:cache \ —unsecure-http \ $REGISTRY_NAME/$STUDENT_ID/yolov8-rock-paper-scissors-training-job:1.0.0

Slide 65

Slide 65

🚑 Plan B ovhai job run \ —name attendee-$STUDENT_ID-yolov8-rock-paper-scissors-training-job \ —gpu 1 \ —env NB_OF_EPOCHS=50 \ —volume attendee-$STUDENT_ID-data@GRA:/workspace/attendee:RW:cache \ —unsecure-http \ $REGISTRY_NAME/backup/yolov8-rock-paper-scissors-training-job:1.0.0

Slide 66

Slide 66

🪵 Suivi des logs ovhai job logs -f <job id>

Slide 67

Slide 67

📺 Et dans la console d’admin OVHcloud ?

Slide 68

Slide 68

🎉 Bravo vous avez entrainé votre premier modèle d’intelligence artificielle !! 🎉

Slide 69

Slide 69

Application avec AI Deploy

Slide 70

Slide 70

📄 Instructions https://github.com/devrel-workshop/101-AI-and-py/bl ob/main/docs/application.md https://ovh.to/4tu9bxc

Slide 71

Slide 71

🐳 Création de l’image 📂 Répertoire de travail : src/app - Dockerfile: le dockerfile pour construire l’image Requirements.txt : fichier de gestion des dépendances Python App.py : script Python pour la création de l’application 🗑 Si nécessaire supprimer les images d’entraînement 🐳 Fabrication de l’image 🐛 (Optionnel) Run / debug locallement ⬆ Push de l’image dans la registry : lab-user / Passw0rd

Slide 72

Slide 72

⚡ Création de l’application ovhai app run \ —name attendee-$STUDENT_ID-yolov8-rock-paper-scissors-app \ —cpu 1 \ —default-http-port 8501 \ —volume attendee-$STUDENT_ID-data@GRA:/workspace/attendee:RW:cache \ —unsecure-http \ $REGISTRY_NAME/$STUDENT_ID/yolov8-rock-paper-scissors-app:1.0.0

Slide 73

Slide 73

🚑 Plan B ● ● Copie du modèle entraîné: ovhai bucket object copy attendee-backup-data@GRA —container attendee-$STUDENT_ID-data best.torchscript best.torchscript Exécution de l’image backup: ovhai app run \ —name attendee-$STUDENT_ID-yolov8-rock-paper-scissors-app \ —cpu 1 \ —default-http-port 8501 \ —volume attendee-$STUDENT_ID-data@GRA:/workspace/attendee:RW:cache \ —unsecure-http \ $REGISTRY_NAME/backup/yolov8-rock-paper-scissors-app:1.0.0

Slide 74

Slide 74

🔗 Accéder à l’application $ ovhai app list ID STATE IMAGE <app id> RUNNING xxxxxx/lab/0/yolov8-rock-paper-scissors-app:1.0.0 REPLICAS SCALING_STRATEGY 1 fixed (1) $ ovhai app <app id> Status: State: RUNNING Available Replicas: 0 Url: https://<app id>.app.gra.ai.cloud.ovh.net Info Url: https://ui.gra.ai.cloud.ovh.net/app/<app id> Monitoring Url: https://monitoring.gra.ai.cloud.ovh.net/d/app?var-app=<app id>&from=1695898895255

Slide 75

Slide 75

🪵 Suivi des logs ovhai app logs -f <job id>

Slide 76

Slide 76

📺 Et dans la console d’admin OVHcloud ?

Slide 77

Slide 77

🎉 Bravo vous avez créé votre première application basée sur l’intelligence artificielle !! 🎉

Slide 78

Slide 78

🧳 Take away / Next ? 🧳

Slide 79

Slide 79

Un workflow typique dans l’IA 📀 Il faut une très grande quantité de données 📀 La plupart du temps la donnée est brute ⚠ Attention aux coûts (stockage, lecture / écriture)

Slide 80

Slide 80

Un workflow typique dans l’IA 🎛 Créer des datasets nettoyés (Valeurs manquantes, Normalisation, …) 🎛 Il existe des datasets pré-créés (gratuits ou payants) 🎯 Le but est de traduire les données brutes dans un langage compréhensible par le modèle

Slide 81

Slide 81

Un workflow typique dans l’IA 🧠 Le “cerveau” de l’application 󰳘 Fait par les Data Scientist 🧮 Basé sur des opérations mathématiques 📝 Utilise des éditeurs (JupyterLab, complexes Matlab, VSCode, …) 🧠 Réseaux de neurones artificiels

Slide 82

Slide 82

Un workflow typique dans l’IA ✨ Permet d’optimiser le modèle 📀 Il faut une grande quantité de données 🔋 Nécessite de la puissance de calcul 💰 Il existe des modèles pré-entrainés (payants ou gratuits)

Slide 83

Slide 83

Un workflow typique dans l’IA 📝 Utilise le modèle pour faire l’inférence 🎨 Peut exposer une API ou une interface utilisateur

Slide 84

Slide 84

Les métiers Jason Leung

Slide 85

Slide 85

La ou le Data Scientist 🔎 Analyse et manipulation des données 󰳕 Développement 🧠 Machine Learning 🧮 Mathématiques % Statistiques

Slide 86

Slide 86

La ou le Machine Learning engineer 󰳘 Data Science 🧮 Mathématiques % Statistiques 󰳕 Développement 🧰 Frameworks & outillages IA ☁ Cloud et conteneurisation 󰳗 Ops

Slide 87

Slide 87

La développeuse ou le développeur 🐍 Python 󰳘 Concepts IA 󰳕 Développement 🧰 Frameworks et outillages IA ☁ Cloud et conteneurisation

Slide 88

Slide 88

Goh Rhy Yan

Slide 89

Slide 89

Les biais 🤷 Les IA sont créées par des humains 📀 Les données sont de plus ou moins bonne qualité 🏷 La labellisation des données est souvent faite par des humains

Slide 90

Slide 90

L’IA n’est pas source de vérité % Cela ne reste que des statistiques 🤔 C’est une estimation 🤖 Cela n’est qu’une aide à la décision et ne remplace pas un·e humain·e

Slide 91

Slide 91

La course à la puissance 📀 Toujours plus de données 🧮 De modèles toujours plus gros avec plus de couches 🔋 Plus de puissance de calcul 📈 Des consommations qui augmentent 🧠 Utiliser l’IA de manière “intelligente” 📉 Avoir de la performance avec moins de consommation

Slide 92

Slide 92

La diversité des CDE ● ● ● Un éditeur Le code du projet Un conteneur d’execution Gitpod GitHub Codespaces Jetbrains Space Amazon Dev environments

Slide 93

Slide 93

Python ● ● ● Facile à apprendre Complet pour votre futur Langage de prédilection du monde de l’IA aujourd’hui … ● ● ● … d’autres langages sont prêts pour demain Chaque contexte mérite son langage Pas de langage miracle universel Golearn Langchain pour Java Tensorflow js

Slide 94

Slide 94

Merci !!!! Slides https://ovh.to/Zz5AnPw Feedbacks https://ovh.to/tFHguZM Code source https://ovh.to/ofPmni6

Slide 95

Slide 95

OVHcloud recrute : https://ovh.to/4tu91L6 Eric Prouzet

Slide 96

Slide 96

🔗 Ressources (liens, …) 🔗

Slide 97

Slide 97

Liens 🔗 Documentations OVHcloud univers IA 🔗 Repository GitHub du workshop 🔗 https://unsplash.com/ 🔗 https://deepai.org/machine-learning-glossary-and-terms/weight-artificial-neural-network 🔗 https://medium.com/mlearning-ai/introduction-to-neural-networks-weights-biases-and-activation-270ebf2545aa 📽 https://www.youtube.com/@MachineLearnia 🔗 https://gitpod.io