Viens dompter ta première IA en Python

A presentation at Riviera Dev 2024 in July 2024 in Sophia Antipolis, France by Thierry Chantier

Slide 1

Slide 1

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

Slide 2

Slide 2

MERCI !!! @wildagsx

Slide 3

Slide 3

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

Slide 4

Slide 4

🐻 Stéphane Philippart 🏷 🥑 DeveloperAdvocate@OVHCloud 🦄 🏷 Co-créateur de TADx (meetup à Tours) 🧠 Padawan Intelligence Artificielle 🏕 🐦 @wildagsx 🔗 https://philippart-s.github.io/blog 🐙 https://github.com/philippart-s/ 💬 https://www.linkedin.com/in/philippartstephane/ @wildagsx

Slide 5

Slide 5

�� 📝 Que va-t-on voir aujourd’hui ? 🧠 Les principes dans l’intelligence artificielle 🐍 Le kit de survie Python pour suivre ce deep dive 󰠁 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 @wildagsx

Slide 6

Slide 6

🐼 Qui êtes vous ? ● ● ● ● ● Dev Dev Python Data Scientist Machine Learning Engineer Autre @wildagsx

Slide 7

Slide 7

�� 📝 Pense bête et liens 🔗 https://bit.ly/101-ai-lab @wildagsx

Slide 8

Slide 8

🐻 Intelligence Artificielle @wildagsx

Slide 9

Slide 9

🐻 L’IA dans notre quotidien Recommandations personnalisées de contenu Tags automatique, recherche de contenus Conduite assistée et autonome Assistant vocal Aide aux diagnostics médicaux @wildagsx

Slide 10

Slide 10

🐻 Les champs de l’IA Intelligence Artificielle (IA) 👉 IA : Techniques pour simuler les capacités “intelligentes” d’un être humain • • • • Résolution de problème Apprendre des expériences passées Perception (images, sons) Prise de décision @wildagsx

Slide 11

Slide 11

🐻 Les champs de l’IA Intelligence Artificielle (IA) 👉 IA : Techniques pour simuler les capacités “intelligentes” d’un être humain Artificial Artificial Narrow General Intelligence Narrow Artificial Narrow Artificial Intelligence (ANI) Intelligence Intelligence (AGI) (ANI) (ANI) Strong Weak AI Artificial Super Intelligence (ASI) AI @wildagsx

Slide 12

Slide 12

🐻 Les champs de l’IA Intelligence Artificielle (IA) 👉 IA : Techniques pour simuler les capacités “intelligentes” d’un être humain Artificial Narrow Intelligence Artificial Narrow (ANI) Intelligence (ANI) Weak AI Artificial General Intelligence (AGI) Artificial Super Intelligence (ASI) Strong AI @wildagsx

Slide 13

Slide 13

🐻 Les champs de l’IA Intelligence Artificielle (IA) Machine Learning (ML) Réseaux de neurones Deep Learning (DL) GenAI LLMs 👉 IA : Techniques pour simuler les capacités “intelligentes” d’un être humain 👉 ML : Utilisation d’algorithmes permettant aux machines d’apprendre par l’ingestion de données, sans être explicitement programmées. 👉 DL : Utilisation de réseaux de neurones pour apprendre à partir de données non structurées, et plus complexes @wildagsx

Slide 14

Slide 14

🐻 Les grandes familles d‘algorithmes en ML Apprentissage supervisé Apprentissage non supervisé Classification et régression Clustering La donnée est labellisée Oiseau Chien Chat Apprentissage par renforcement La donnée n’est pas labellisée C’est au modèle d’identifier les relations entre les données Chercher la proximité entre des Les décisions du modèle sont encadrées par un système de récompenses et de pénalités documents, des individus Robots (Jeux vidéo) @wildagsx

Slide 15

Slide 15

🐻 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 @wildagsx

Slide 16

Slide 16

🐻 Exemple d’un dataset Label correspondant : 1 0.650401 0.611884 0.694224 0.75 Classe personne Coordonnées du carré (centre_x, centre_y, largeur, hauteur) @wildagsx

Slide 17

Slide 17

🐻 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 @wildagsx

Slide 18

Slide 18

🐻 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 @wildagsx

Slide 19

Slide 19

🐻 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 @wildagsx

Slide 20

Slide 20

🐻 GPU vs CPU �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� CPU �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� GPU @wildagsx

Slide 21

Slide 21

🐼 Cloud Development Environment @wildagsx

Slide 22

Slide 22

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

Slide 23

Slide 23

🐼 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 😇 ) @wildagsx

Slide 24

Slide 24

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

Slide 25

Slide 25

🐼 Un exemple de CDE : 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 @wildagsx

Slide 26

Slide 26

🐼 Python : 101 pour cet atelier @wildagsx

Slide 27

Slide 27

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

Slide 28

Slide 28

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

Slide 29

Slide 29

🐻 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 @wildagsx

Slide 30

Slide 30

🐻 Workshop time !! @wildagsx

Slide 31

Slide 31

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

Slide 32

Slide 32

Démarrage de GitPod @wildagsx

Slide 33

Slide 33

⚡ Initialisation de l’environnement GitPod ● ● ● Créer un compte GitPod (se connecter avec son compte GitHub) Prendre le modèle large Plus d’informations : section getting started du README @wildagsx

Slide 34

Slide 34

🐻 🗺 Architecture de l’application @wildagsx

Slide 35

Slide 35

🐻 Modèle avec AI Notebook @wildagsx

Slide 36

Slide 36

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

Slide 37

Slide 37

📺 Et dans la console d’admin OVHcloud ? @wildagsx

Slide 38

Slide 38

🐻 YOLOv8 (You only look once) Classification Détection Suivi Segmentation Personne Estimation de pose Voiture 98% Voiture 96% Plot Voiture 97% Personne Tripod Veste 🔗 https://docs.ultralytics.com/ - https://github.com/ultralytics/ultralytics 🏞 Classification / Détection / Segmentation / Détection / Pose 🏞 Entraîné sur le dataset COCO (>200K images labellisées) 🐍 Lib python prête à l’emploi 🧠 Utilisation du plus petit modèle avec “seulement” 3.2 millions de paramètres @wildagsx

Slide 39

Slide 39

🐻 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 @wildagsx

Slide 40

Slide 40

🐻 🗃 Le dataset utilisé • Dataset Rock Paper Scissors SXSW récupéré de Roboflow • • • Directement au bon format YOLOV8 Pas de traitement sur les images / labels à faire +11 000 images • 10 953 pour l’entraînement (92%) (21% Papier, 29% Pierre, 20% Ciseaux) • 604 pour la validation (5.5%) (24% Papier, 25% Pierre, 20% Ciseaux) • 329 pour les tests (2.5%) (22% Papier, 22% Pierre, 21% Ciseaux) @wildagsx

Slide 41

Slide 41

🐼 🚀 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 @wildagsx

Slide 42

Slide 42

🐼 🚀 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 @wildagsx

Slide 43

Slide 43

⚡ Accès au Notebook 🛠 via le json attendee-conf.json dans le workspace de projet Gitpod 💻 Via la CLI : $ ovhai notebook list —token $AI_TOKEN ID NAME STATE xx-xx-xx-xx-xx blabla_0 RUNNING AGE FRAMEWORK VERSION EDITOR 4h conda-py311-cudaDevel11.8 jupyterlab conda URL https://xx-xx-xx-xx-xx.notebook.bhs.ai.cloud.ovh.net @wildagsx

Slide 44

Slide 44

🐻 📊 Analyse des résultats ● Vrai Positif (TP): Détection correcte par le modèle (Objet x présent dans l’image détecté comme x, avec sa détection dans la même boîte englobante que la groundtruth) ● Faux Positif (FP): Détection incorrecte par le modèle (Objet x présent dans l’image détecté comme y). ● Faux Négatif (FN): Une Ground-truth de loupée par le modèle (pas détectée) (Objet x non détecté alors qu’il est présent dans l’image). ● Vrai Négatif (TN): Images restantes, où aucune détection n’a eu lieu parce qu’il n’y avait pas le signe en question dans l’image. Scissors Vérité Scissors Vérité Scissors Prédiction Rock Prédiction Scissors Vérité Prédiction Vérité Prédiction @wildagsx

Slide 45

Slide 45

�� 📊 Matrice de confusion Vue résumée des classifications (Nombre de TP, TN, FP, FN) La diagonale représente les bonnes prédictions, tandis que les autres sont des erreurs. @wildagsx

Slide 46

Slide 46

�� 📊 Précision Plus le seuil de confiance sera bas, plus on aura de prédictions, avec de nombreuses erreurs (FP) -> la précision sera basse Mais attention à ne pas en fixer un trop haut non plus (très peu de TP détectés) Elle est utile lorsque le coût d’un FP est élevé *Confidence: Détermine le score de confiance minimum requis pour qu’une prédiction soit considérée comme valide @wildagsx

Slide 47

Slide 47

�� 📊 Rappel (Recall) Nombre de fois où le modèle a correctement prédit un exemple positif sur le nombre total d’exemples positifs. Il est utile lorsque le coût d’un FN est élevé *Confidence: Détermine le score de confiance minimum requis pour qu’une prédiction soit considérée comme valide @wildagsx

Slide 48

Slide 48

�� 📊 Score F1 Une combinaison de la précision et du rappel en une seul et même métrique *Confidence: Détermine le score de confiance minimum requis pour qu’une prédiction soit considérée comme valide @wildagsx

Slide 49

Slide 49

🎉 Bravo on a créé notre premier modèle d’intelligence artificielle !! 🎉 @wildagsx

Slide 50

Slide 50

🐼 Entraînement avec AI Training Clique Images @wildagsx

Slide 51

Slide 51

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

Slide 52

Slide 52

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

Slide 53

Slide 53

🐼 Docker Docker image build 🐳 push 📝 Docker file Registry pull Conteneur d’exécution @wildagsx

Slide 54

Slide 54

🐼 🐳 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 @wildagsx

Slide 55

Slide 55

⚡ Création du Job 💻 Avec la CLI : ovhai job run \ —token $AI_TOKEN \ —name $STUDENT_ID-yolov8-rock-paper-scissors-training-job \ —gpu 1 \ —env NB_OF_EPOCHS=10 \ —volume $STUDENT_ID@S3GRA:/workspace/attendee:RW:cache \ —unsecure-http \ wilda/yolov8-rock-paper-scissors-training-job:1.0.0 @wildagsx

Slide 56

Slide 56

📺 Et dans la console d’admin OVHcloud ? @wildagsx

Slide 57

Slide 57

🚑 Plan B ovhai job run \ —token $AI_TOKEN \ —name $STUDENT_ID-yolov8-rock-paper-scissors-training-job \ —gpu 1 \ —env NB_OF_EPOCHS=10 \ —volume $STUDENT_ID@S3GRA:/workspace/attendee:RW:cache \ —unsecure-http \ wilda/yolov8-rock-paper-scissors-training-job:1.0.0 @wildagsx

Slide 58

Slide 58

🪵 Suivi des logs ovhai job logs -f <job id> —token $AI_TOKEN @wildagsx

Slide 59

Slide 59

🎉 Bravo on a entrainé notre premier modèle d’intelligence artificielle !! 🎉 @wildagsx

Slide 60

Slide 60

🐻 Application avec AI Deploy @wildagsx

Slide 61

Slide 61

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

Slide 62

Slide 62

📄 Instructions https://github.com/devrel-workshop/101-AI-and-py/bl ob/main/docs/02-application.md https://ovh.to/DGoWaJ @wildagsx

Slide 63

Slide 63

🐻 🐳 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 @wildagsx

Slide 64

Slide 64

⚡ Création de l’application 💻 Avec la CLI : ovhai app run \ —token $AI_TOKEN \ —name $STUDENT_ID-yolov8-rock-paper-scissors-app \ —cpu 1 \ —default-http-port 8501 \ —volume $STUDENT_ID@S3GRA:/workspace/attendee:RW:cache \ —unsecure-http \ $REGISTRY_NAME/$STUDENT_ID/yolov8-rock-paper-scissors-app:1.0.0 @wildagsx

Slide 65

Slide 65

📺 Et dans la console d’admin OVHcloud ? @wildagsx

Slide 66

Slide 66

🚑 Plan B ovhai app run \ —token $AI_TOKEN \ —name $STUDENT_ID-yolov8-rock-paper-scissors-app \ —cpu 1 \ —default-http-port 8501 \ —volume $STUDENT_ID@S3GRA:/workspace/attendee:RW:cache \ —unsecure-http \ wilda/yolov8-rock-paper-scissors-app:1.0.0 @wildagsx

Slide 67

Slide 67

🪵 Suivi des logs ovhai app logs -f <app id> —token $AI_TOKEN @wildagsx

Slide 68

Slide 68

🔗 Accéder à l’application 💻 Avec la CLI : $ ovhai app get <AppId> —token $AI_TOKEN https://ovh.to/fRZW8kp Status: State: SCALING Internal Service Ip: ~ Available Replicas: 0 Url: https://<AppId>.app.gra.ai.cloud.ovh.net Grpc Address: <AppId>.app-grpc.gra.ai.cloud.ovh.net:443 Info Url: https://ui.gra.ai.cloud.ovh.net/app/<AppId> Monitoring Url: https://monitoring.gra.ai.cloud.ovh.net/d/app?var-app=<AppId>&from=1704720216889 @wildagsx

Slide 69

Slide 69

🐻 🎉 Bravo on a créé notre première application basée sur l’intelligence artificielle !! 🎉 @wildagsx

Slide 70

Slide 70

🐻 🧳 Take away / Next ? 🧳 @wildagsx

Slide 71

Slide 71

🐻 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) @wildagsx

Slide 72

Slide 72

🐻 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 @wildagsx

Slide 73

Slide 73

🐻 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 @wildagsx

Slide 74

Slide 74

🐻 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) @wildagsx

Slide 75

Slide 75

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

Slide 76

Slide 76

🐻 🧠 AI Endpoints en quelques mots 🤝 LLM as a Service 💰 Alpha ~ juin 2024 (gratuit) 🧩 Dispo des LLM via des API 🧠 Catégories des modèles • • • • • • Assistants : CodeLlama 13b, Llama 3 70b, Mixtral 8x22b, … Embedding : BGE base, Multilingual E5, … NLP: Bart, Bert, … Translation : T5 large, … Audio : Nvidia RIVA ASR Vision : Yolo V8, … 🔗 https://endpoints.ai.cloud.ovh.net @wildagsx

Slide 77

Slide 77

🐻 🦜 LangChain … et ses variantes 🦜 Le projet originel : LangChain • • • • • • • Technologies : Python et Javascript SDK / Librairie Faciliter l’adoption et l’utilisation des LLM Accès par API aux modèles Templating de prompt RAG …. 🔀 Les projets dérivés : LangChain4j, LangChainGo, … • • • Aucun lien avec la communauté LangChain existante Base commune mais qui (peut) diverger du LangChain d’origine Mêmes objectifs de simplification que le LangChain d’origine @wildagsx

Slide 78

Slide 78

🐼 Les métiers Jason Leung @wildagsx

Slide 79

Slide 79

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

Slide 80

Slide 80

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

Slide 81

Slide 81

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

Slide 82

Slide 82

🐻 Goh Rhy Yan @wildagsx

Slide 83

Slide 83

🐻 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 @wildagsx

Slide 84

Slide 84

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

Slide 85

Slide 85

🐻 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 @wildagsx

Slide 86

Slide 86

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

Slide 87

Slide 87

🐼 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 @wildagsx

Slide 88

Slide 88

🐼 Merci !!!! Slides https://ovh.to/Zz5mfBB Feedbacks https://ovh.to/FEMVsTz Code source https://ovh.to/ofPmni6 Time to play ! https://ovh.to/G6fxCNB @wildagsx

Slide 89

Slide 89

🔗 Ressources (liens, …) 🔗 @wildagsx

Slide 90

Slide 90

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 @wildagsx