Dans cette section, vous naviguerez à travers le code python utilisé pour réentraîner le modèle. Vous adapterez ensuite un pipeline de science des données et l’exécuterez sur Openshift. Enfin, vous visualiserez votre pipeline dans le tableau de bord Openshift AI et récupérerez ses résultats.
ATTENTION: Vous n’exécuterez que les premières étapes de l’entraînement du modèle dans les Notebooks Jupyter. L’entrainement complet se déroulera sur Openshift afin de limiter la RAM nécessaire à chaque participant. Dans le cas contraire, l’exécution du modèle d’apprentissage (transfer-learning.ipynb) plantera pour cause OOM Killed (dépassement de mémoire allouée). Votre pod sur Openshift sera supprimé et recréé automatiquement. Rien de bien méchant mais votre environnement sera indisponible pendant une minute.
Vous avez précédemment cloné un repo git. Vous devriez voir dans le navigateur de fichiers sur la gauche un dossier qui porte le même nom que le projet git : workshop-model-training. Cliquez dessus. A partir de là, vous devriez voir plusieurs objets :
Cliquez sur labeling-extraction.ipynb. Exécutez le notebook en entier en utilisant l’icône en haut et cliquez sur “restart the kernel” quand on vous le demande (voir ci-dessous) :
Vous avez peut-être remarqué que ces scripts ont créé un répertoire dataset. Ce répertoire dataset contient un sous-répertoire labels et un sous-répertoire images. Il contient les images et les annotations extraites. Dans le même Notebook descendez à la section “Select a random image and display its boundind boxes”. Réexécutez cette cellule. Elle choisit une image aléatoire dans le dossier dataset/images et affiche dans le notebook les carrés corrspondant à l’annotation sauvegardés dans le dossier dataset/labels.
Vous pouvez fermer le Notebook précédent et ouvrir le Notebook synthetic-data.ipynb. Ce Notebook génère des données synthétiques de manière aléatoire. Il s’agit de données créées artificiellement qui ajouteront des données supplémentaires à l’entraînement du modèle. Exécutez l’ensemble du Notebook comme expliqué dans la section précédente. Jetez un coup d’œil au code et voyez les exemples dans les sections de visualisation. Exécutez à nouveau l’étape de visualisation pour afficher d’autres exemples de données synthétiques.
Attention à ne pas exécuter le notebook suivant. Il ferait crasher votre environnement car nous avons limité la RAM consommable par environnement.
Ouvrez le Notebook transfer-learning.ipynb et regardez simplement le code.
Attention à ne pas exécuter le notebook suivant. Il ferait crasher votre environnement car nous avons limité la RAM consommable par environnement.
Ouvrez le notebook comparison.ipynb et regardez simplement le code.
Vous allez maintenant adapter un pipeline de science des données pour que votre entraînement soit accéléré au moyen un GPU. Nous avons déployés sur Openshfit quelques petits GPUs partagés où l’entraînement sera exécuté. Cela devrait prendre moins de 8 minutes pour l’ensemble du pipeline.
Vous voyez ici une interface graphique où vous pouvez créer et exécuter vos pipelines de science des données. Le pipeline a été créé en glissant-déposant les Notebooks depuis l’explorateur de fichiers.
Vous pouvez remarquer que ce pipeline a 4 étapes et 2 liaisons. Il manque 1 liaison entre la troisième (transfer-learning) et la quatrième étape (comparison). Cliquez sur le point noir à droite de la troisième étape (transfer-learning). Maintenez la touche de la souris enfoncée jusqu’à ce que vous atteigniez le point noir du côté gauche de la quatrième étape (comparaison).
Vous devriez obtenir le résultat suivant :
Cliquez avec le bouton droit de la souris sur la deuxième étape du pipeline (synthetic-data). Un menu s’ouvre. Cliquez sur “Open Properties”. Elles apparaissent sur le côté droit. Faites défiler vers le bas et voyez quelques propriétés telles que :
Vous pouvez remarquer qu’en haut du menu de droite des propriétés, 3 panneaux différents sont disponibles (pipeline properties, pipeline parameters, node properties). N’hésitez pas à naviguer vers les autres panneaux.
Fermer les propriétés ouvertes à l’étape précédente.
Vous allez maintenant travailler sur la troisième étape. Encore une fois, veillez à modifier les propriéts de l’étape d’entrainement du modèle et non pas les propriétés vues à l’étape précédente.
Cliquez avec le bouton droit de la souris sur la troisième étape du pipeline (transfer-learning). Un menu s’ouvre. Cliquez sur “Open Properties”. Elles apparaissent sur le côté droit. Cherchez la propriété GPU et sélectionnez 1. Cela demandera 1 GPU pour l’entraînement de votre modèle.
Descendez jusqu’en bas.
Les nœuds contenant des GPU ont des “Taints”. Cela signifie que par défaut, aucun conteneur ne peut être executé sur les nœuds avec des taints. Nous devons ajouter une “toleration” pour permettre à l’étape d’entrainement d’utiliser un GPU. Les taints et les “toleration” fonctionnent ensemble pour s’assurer que les pods ne sont pas exexcutés sur des nœuds inappropriés.
Click Add sous la propriété Kubernetes Tolerations (en bas du menu des propriétés du nœud). Remplissez les champs comme suit :
nvidia.com/gpu
Vous devriez avoir à la fin :
Il est maintenant temps d’exécuter le pipeline sur Openshift. Cliquez sur le bouton “Run Pipeline” en haut de l’interface graphique d’Elyra. Voir ci-dessous :
Si vous avez un popup vous avertissant que le pipeline n’est pas sauvegardé, cliquez sur le bouton “Save and Submit”.
Remplissez les configurations. Choisissez 10 epochs comme paramètre du pipeline. On peut définir une epoch comme le nombre de passages d’un dataset d’entraînement par un algorithme. Un nombre insuffisant d’epoch rendra votre modèle inefficace. Trop d’époques entraînera un overfit du modèle (et donc une inefficacité dans la prédiction de nouvelles données) :
Après quelques instants, vous verrez s’afficher une fenêtre popup de succès. Dans ce popup, vous pouvez cliquer sur “Run Details” pour sauter certaines instructions de la prochaine session.
Si vous avez manqué le raccourci de la fenêtre popup d’elyra, suivez ces étapes pour récupérer votre pipeline. Sinon, passez au paragraphe suivant. Vous pouvez maintenant retourner au tableau de bord d’Openshift AI : https://rhods-dashboard-redhat-ods-applications.apps.crazy-train.sandbox1730.opentlc.com Sur le côté gauche cliquez sur “Experiments”, puis sur “Exepriments and runs”. Choisissez l’expérimentation associée au nom de votre pipeline. Cliquer sur le run en cours. Vous pouvez voir ici l’exécution du pipeline. Un run devrait être visible puisque vous en avez créé un dans la section précédente. Cliquez dessus.
Vous pouvez voir le statut de votre pipeline. Si vous cliquez sur un nœud, il affiche des informations telles que le panneau “Logs”. Si vous sélectionnez le conteneur “Main” dans ce panneau, vous verrez les logs associés à l’exécution des notebooks :
Attendez que le pipeline se termine. Vous devriez avoir quelque chose comme ça :
Toutes les output du pipeline sont sauvegardées dans le stockage objet. Connectez-vous à la console S3 en utilisant ce lien : https://minio-console-minio.apps.crazy-train.sandbox1730.opentlc.com. Connectez-vous avec le même nom d’utilisateur que nous vous avons donné au début du lab. Le mot de passe est minio123
. Vous devriez voir plusieurs buckets. Cliquez sur celui qui correspond à votre nom d’utilisateur. Il devrait y avoir un fichier results.csv dans lequel se trouve les métriques liées à l’entrainement du modèle que vous pouvez télécharger si vous le souhaitez. Il devrait également y avoir un répertoire qui correspond à votre pipeline. Il commence par “traffic-sign”. Ouvrez-le. Vous y trouverez des fichiers html, ipynb et des archives. Cliquez sur le fichier comparison.html. Un menu apparaît sur le côté droit. Cliquez sur télécharger et ouvrez ce fichier localement sur votre navigateur. Notez la différence entre les scores du modèle de base et du nouveau modèle. Dans cet exemple, nous avons perdu en précision sur l’ensemble de données original. Mais nous pouvons maintenant détecter les panneaux de signalisation “lego” avec le nouveau modèle.