Des pipelines CI/CD transparents avec GitHub Actions sur GCP vos outils pour un MLOps efficace.

GitHub Actions sur GCP pour MLOps efficace.

LE CADRE MLOPS EN 7 ÉTAPES COMPLET

Leçon 7 : Déployer tous les composants ML sur GCP. Construire une pipeline CI/CD en utilisant Github Actions.

Photo de Hassan Pasha sur Unsplash

Ce tutoriel représente la leçon 7 sur 7 d’un cours qui vous guidera pas à pas sur la façon de concevoir, implémenter et déployer un système ML en utilisant les bonnes pratiques MLOps. Au cours du cours, vous construirez un modèle prêt pour la production pour prévoir les niveaux de consommation d’énergie pour les 24 prochaines heures dans plusieurs types de consommateurs du Danemark.

À la fin de ce cours, vous comprendrez tous les fondamentaux de la conception, de la programmation et du déploiement d’un système ML utilisant une architecture de batch-serving.

Ce cours s’adresse aux ingénieurs en machine learning intermédiaires/avancés qui souhaitent améliorer leurs compétences en construisant leurs propres projets de bout en bout.

De nos jours, les certificats sont partout. Construire des projets avancés de bout en bout que vous pouvez ensuite montrer est le meilleur moyen d’obtenir une reconnaissance en tant qu’ingénieur professionnel.

Table des matières :

  • Introduction au cours
  • Leçons du cours
  • Source de données
  • Leçon 7 : Déployer tous les composants ML sur GCP. Construire une pipeline CI/CD en utilisant Github Actions.
  • Leçon 7 : Code
  • Conclusion
  • Références

Introduction au cours

À la fin de ce cours de 7 leçons, vous saurez comment :

  • concevoir une architecture de batch-serving
  • utiliser Hopsworks comme magasin de fonctionnalités
  • concevoir une pipeline d’ingénierie de fonctionnalités qui lit les données à partir d’une API
  • construire une pipeline de formation avec des réglages d’hyperparamètres
  • utiliser W&B comme plateforme ML pour suivre vos expériences, modèles et métadonnées
  • implémenter une pipeline de prédiction de batch
  • utiliser Poetry pour construire vos propres packages Python
  • déployer votre propre serveur PyPi privé
  • orchestrer tout avec Airflow
  • utiliser les prédictions pour coder une application web en utilisant FastAPI et Streamlit
  • utiliser Docker pour conteneuriser votre code
  • utiliser Great Expectations pour assurer la validation et l’intégrité des données
  • surveiller les performances des prédictions dans le temps
  • déployer tout sur GCP
  • construire une pipeline CI/CD en utilisant GitHub Actions

Si cela semble beaucoup, ne vous inquiétez pas. Après avoir suivi ce cours, vous comprendrez tout ce que j’ai dit avant. Le plus important, c’est que vous saurez POURQUOI j’ai utilisé tous ces outils et comment ils fonctionnent ensemble en tant que système.

Si vous voulez tirer le meilleur parti de ce cours, je vous suggère d’accéder au référentiel GitHub contenant tout le code des leçons. Ce cours est conçu pour lire rapidement et reproduire le code le long des articles.

À la fin du cours, vous saurez comment mettre en œuvre le diagramme ci-dessous. Ne vous inquiétez pas si quelque chose ne vous semble pas clair. Je vais tout expliquer en détail.

Diagramme de l'architecture que vous allez construire pendant le cours [Image by the Author].

À la fin de la leçon 7, vous saurez comment déployer manuellement les 3 pipelines ML et l’application web sur GCP. En outre, vous construirez une pipeline CI/CD qui automatisera le processus de déploiement en utilisant GitHub Actions.

Leçons du cours :

  1. Batch Serving. Magasins de fonctionnalités. Pipelines d’ingénierie de fonctionnalités.
  2. Pipelines de formation. Plates-formes ML. Réglage d’hyperparamètres.
  3. Pipeline de prédiction de batch. Empaqueter des modules Python avec Poetry.
  4. Serveur PyPi privé. Orchestrez tout avec Airflow.
  5. Validation des données pour la qualité et l’intégrité à l’aide de GE. Surveillance continue des performances du modèle.
  6. Consommation et visualisation des prédictions de votre modèle à l’aide de FastAPI et Streamlit. Conteneuriser tout avec Docker.
  7. Déployer tous les composants ML sur GCP. Construire une pipeline CI/CD en utilisant Github Actions.

Comme la Leçon 7 se concentre sur l’enseignement de la façon de déployer tous les composants sur GCP et de construire un pipeline CI/CD autour de celui-ci, pour une expérience complète, nous vous recommandons de regarder les autres leçons du cours.

Consultez la Leçon 4 pour apprendre à orchestrer les 3 pipelines ML à l’aide d’Airflow et la Leçon 6 pour voir comment consommer les prévisions du modèle à l’aide de FastAPI et Streamlit.

Source de données

Nous avons utilisé une API gratuite et ouverte qui fournit des valeurs de consommation d’énergie horaires pour tous les types de consommateurs d’énergie au Danemark [1].

Ils fournissent une interface intuitive où vous pouvez facilement interroger et visualiser les données. Vous pouvez accéder aux données ici [1].

Les données ont 4 attributs principaux :

  • Heure UTC : la date et l’heure UTC où le point de données a été observé.
  • Prix de la zone : Le Danemark est divisé en deux zones de prix : DK1 et DK2 – divisées par le Grand Belt. DK1 est à l’ouest du Grand Belt et DK2 est à l’est du Grand Belt.
  • Type de consommateur : Le type de consommateur est le code industriel DE35, détenu et géré par Danish Energy.
  • Consommation totale : Consommation totale d’électricité en kWh

Remarque : Les observations ont un retard de 15 jours ! Mais pour notre cas d’utilisation de démonstration, ce n’est pas un problème, car nous pouvons simuler les mêmes étapes qu’en temps réel.

Capture d'écran de notre application web montrant comment nous avons prévu la consommation d'énergie pour la zone = 1 et le type de consommateur = 212 [Image by the Author].

Les points de données ont une résolution horaire. Par exemple : “2023-04-15 21:00Z”, “2023-04-15 20:00Z”, “2023-04-15 19:00Z”, etc.

Nous modéliserons les données sous forme de plusieurs séries chronologiques. Chaque tuple unique de zone de prix et de type de consommateur représente sa série chronologique unique.

Nous construirons donc un modèle qui prévoit de manière indépendante la consommation d’énergie pour les 24 prochaines heures pour chaque série chronologique.

Consultez la vidéo ci-dessous pour mieux comprendre à quoi ressemblent les données 👇

Présentation du cours et de la source de données [Vidéo par l’auteur].

Leçon 7 : Déployer tous les composants ML sur GCP. Construire un pipeline CI/CD à l’aide de GitHub Actions.

L’objectif de la Leçon 7

Dans la Leçon 7, je vais vous apprendre 2 choses :

  1. Comment déployer manuellement les 3 pipelines ML et l’application web sur GCP.
  2. Comment automatiser le processus de déploiement avec un pipeline CI/CD en utilisant GitHub Actions.
Diagramme de l'architecture finale avec les composants de la Leçon 7 mis en évidence en bleu [Image by the Author].

En d’autres termes, vous prendrez tout ce que vous avez fait jusqu’à présent et le montrerez au monde.

Tant que votre travail est sur votre ordinateur, il peut être la meilleure solution ML au monde, mais malheureusement, il n’ajoutera aucune valeur.

Savoir comment déployer votre code est essentiel pour tout projet.

Alors, souvenez-vous…

Nous utiliserons GCP comme fournisseur de cloud et GitHub Actions comme outil CI/CD.

Concepts théoriques et outils

CI/CD : CI/CD signifie intégration et livraison continues.

L’étape CI consiste principalement à construire et tester votre code chaque fois que vous poussez du code sur git.

L’étape CD déploie automatiquement votre code sur plusieurs environnements : dev, staging et production.

En fonction de vos besoins spécifiques en logiciels, vous avez besoin ou non de toutes les spécifications d’un pipeline standard CI/CD.

Par exemple, vous pourriez travailler sur une preuve de concept. Dans ce cas, un environnement de staging pourrait être superflu. Mais avoir un pipeline CD de dev et de production améliorera considérablement votre productivité.

GitHub Actions : GitHub Actions est l’un des outils CI/CD les plus populaires disponibles. Il est directement intégré à votre dépôt GitHub. La partie intéressante est que vous n’avez pas besoin de VM pour exécuter votre pipeline CI/CD. Tout fonctionne sur les ordinateurs de GitHub.

Vous devez spécifier un ensemble de règles dans un fichier YAML, et GitHub Actions s’occupe du reste. Je vais vous montrer comment ça fonctionne dans cet article.

GitHub Actions est entièrement gratuit pour les dépôts publics. C’est génial, n’est-ce pas ?

À titre de remarque. En utilisant GitHub Actions, vous pouvez déclencher n’importe quelle tâche en fonction de divers événements du dépôt, mais l’utilisation en tant qu’outil CI/CD est le cas d’utilisation le plus courant.

Leçon 7 : Code

Vous pouvez accéder au dépôt GitHub ici.

Remarque : Toutes les instructions d’installation se trouvent dans les fichiers README du dépôt. Ici, vous passerez directement au code.

Le code et les instructions de la leçon 7 se trouvent sous les éléments suivants :

  • deploy/ — Fichiers de déploiement Docker et shell
  • .github/workflows — Workflows CI/CD de GitHub Actions
  • README_DEPLOY — README dédié au déploiement du code sur GCP
  • README_CICD — README dédié à la mise en place du pipeline CI/CD

Préparer les identifiants

Stocker directement des identifiants dans votre dépôt git est un énorme risque pour la sécurité. C’est pourquoi vous injecterez des informations sensibles à l’aide d’un fichier .env.

Le fichier .env.default est un exemple de toutes les variables que vous devez configurer. Il est également utile de stocker des valeurs par défaut pour les attributs qui ne sont pas sensibles (par exemple, le nom du projet).

Capture d'écran du fichier .env.default [Image par l'auteur].

Pour reproduire cet article, vous devez configurer toute l’infrastructure et les services utilisés pendant le cours.

Deux composants principaux peuvent être déployés séparément.

#1. Les 3 pipelines de ML :

  • Pipeline de fonctionnalités
  • Pipeline d’entraînement
  • Pipeline de prédiction en batch

Pour le #1., vous devez configurer ce qui suit :

  • Hopsworks (gratuit) — Feature Store : Leçon 1
  • W&B (gratuit) — Plateforme de ML : Leçon 2
  • Buckets GCS (gratuits) — Stockage sur GCP : Leçon 3
  • Airflow (gratuit) — Outil d’orchestration open source : Leçon 4

#2. Application web :

  • Backend FastAPI (gratuit) : Leçon 6
  • Tableau de bord de prévisions Streamlit (gratuit) : Leçon 6
  • Tableau de bord de surveillance Streamlit (gratuit) : Leçon 6

Heureusement, pour le #2., vous n’avez qu’à configurer les buckets GCP GCS utilisés comme stockage.

Mais notez que si vous ne réalisez que la section #2., vous n’aurez aucune donnée à consommer dans votre application web.

Nous ne voulons pas surcharger cet article avec des choses ennuyeuses, telles que la configuration des identifiants. Mais heureusement, si vous souhaitez implémenter et reproduire l’ensemble du cours, vous disposez d’instructions étape par étape dans les articles précédents et le README de GitHub.

Si vous voulez voir (et non pas reproduire) comment nous avons déployé notre code sur GCP et construit les workflows GitHub Actions, vous n’avez pas à vous soucier des identifiants. Passez simplement aux sections suivantes ✌️

REMARQUE: Le seul service qui n’a pas de plan freemium se trouve dans cette leçon. Lorsque j’ai écrit ce cours, le déploiement et les tests de l’infrastructure sur GCP m’ont coûté environ 20$. Mais j’avais un tout nouveau compte GCP qui m’a offert 300$ de crédits GCP, ce qui l’a rendu indirectement gratuit. N’oubliez pas de supprimer toutes les ressources GCP lorsque vous avez terminé, et tout ira bien.

Déploiement manuel sur GCP

Alors, déployons manuellement les 2 composants principaux sur GCP :

  • Pipeline ML
  • Application Web

Mais, en premier lieu, configurons toutes les ressources GCP dont nous avons besoin pour le déploiement. Ensuite, vous vous connecterez en SSH à vos machines et déployerez votre code.

Pour plus d’informations, accédez au README de déploiement sur GitHub.

Configurer les ressources

Allons sur votre projet energy_consumption GCP et créons les ressources suivantes :

  1. Compte de service VM administratif avec accès IAP
  2. Règle de pare-feu d’exposition de ports
  3. Règle de pare-feu IAP pour le tunneling TCP
  4. VM pour le pipeline
  5. VM pour l’application Web
  6. Adresse IP statique externe

Ne vous laissez pas décourager par les noms fantaisistes. Vous aurez accès à des guides étape par étape en utilisant cet article + la documentation GCP que je fournirai.

Remarque: Si vous ne prévoyez pas de reproduire l’infrastructure sur votre infrastructure GCP, passez la section “Configurer les ressources” et allez directement à “Déployer le pipeline ML”.

#1. Compte de service VM administratif avec accès IAP

Nous avons besoin d’un nouveau compte de service GCP avec des droits d’administrateur et un accès IAP aux VM GCP.

Vous devez créer un nouveau compte de service et lui attribuer les rôles suivants :

  • Administrateur d’instance de calcul (v1)
  • Utilisateur de tunnel IAP sécurisé
  • Créateur de jeton de compte de service
  • Utilisateur de compte de service

IAP signifie Identity-Aware Proxy. C’est une façon de créer des tunnels qui acheminent le trafic TCP à l’intérieur de votre réseau privé. Pour votre information, vous pouvez en savoir plus sur ce sujet en utilisant les documents suivants (vous n’avez pas besoin de le comprendre pour passer aux étapes suivantes) :

  • Utilisation de IAP pour le transfert TCP [2]
  • Aperçu du transfert TCP [3]

#2. Règle de pare-feu d’exposition de ports

Créez une règle de pare-feu qui expose les ports TCP suivants : 8501, 8502 et 8001.

Ajoutez également une étiquette cible appelée energy-forecasting-expose-ports.

Voici 2 documents qui nous ont aidés à créer et configurer les ports pour la règle de pare-feu :

  • Comment ouvrir un port spécifique tel que 9090 dans Google Compute Engine [4]
  • Comment ouvrir des ports de pare-feu sur une instance GCP Compute Engine [5]

Voici à quoi ressemble notre règle de pare-feu 👇

#3. Règle de pare-feu IAP pour le tunneling TCP

Nous allons maintenant créer une règle de pare-feu permettant IAP pour le tunneling TCP sur toutes les VM connectées au réseau par défaut.

Guide étape par étape sur la création de la règle de pare-feu IAP pour le tunneling TCP [6].

Voici à quoi ressemble notre règle de pare-feu 👇

#4. VM pour le Pipeline

Accédez à votre projet GCP energy_consumption -> Instances de VM -> Créer une instance.

Choisissez e2-standard-2: 2 cœurs vCPU – 8 Go de RAM comme type d’instance VM.

Renommez-le : ml-pipeline

Changez le disque pour 20 Go de stockage.

Choisissez la région europe-west3 (Francfort) et la zone europe-west3-c. Ici, vous pouvez choisir n’importe quelle autre région et zone, mais si c’est la première fois que vous le faites, nous vous suggérons de le faire comme nous.

Réseau : par défaut

Aussi, cochez les cases HTTP et HTTPS et ajoutez la règle de pare-feu personnalisée energy-forecasting-expose-ports que nous avons créée quelques étapes plus tôt.

Voici 2 documents qui m’ont aidé à créer et configurer les ports pour la règle de pare-feu :

  • Comment ouvrir un port spécifique tel que 9090 dans Google Compute Engine [4]
  • Comment ouvrir les ports de pare-feu sur une instance GCP Compute Engine [5]

#5. VM pour l’application Web

Maintenant, répétons un processus similaire pour la VM de l’application Web, mais avec des paramètres légèrement différents.

Cette fois, choisissez e2-micro: 0,25 2 vCPU – 1 Go de mémoire comme type d’instance VM.

Renommez-le : app

Changez le disque pour un disque persistant standard de 15 Go.

Choisissez la région europe-west3 (Francfort) et la zone europe-west3-c.

Réseau : par défaut

Aussi, cochez les cases HTTP et HTTPS et ajoutez la règle de pare-feu personnalisée energy-forecasting-expose-ports que nous avons créée quelques étapes plus tôt.

#6. IP statique externe

C’est la dernière pièce du puzzle.

Si nous voulons que l’adresse IP externe de notre application Web soit statique (c’est-à-dire qu’elle ne change pas), nous devons attacher une adresse statique à notre VM d’application Web.

Nous vous suggérons de l’ajouter uniquement à la VM de l’application que nous avons créée quelques étapes plus tôt.

Ajouter également une adresse IP externe statique à la VM ml-pipeline est parfaitement acceptable.

Documents sur la réservation d’une adresse IP externe statique [7].

Maintenant que la partie ennuyeuse est terminée, commençons à déployer le code 👇

Déployer le pipeline ML

En tant que première étape, nous devons installer l’outil gcloud GCP CLI pour communiquer entre notre ordinateur et les VM GCP.

Pour vous authentifier, nous utiliserons le compte de service configuré avec des droits d’administrateur pour les VM et l’accès IAP à SSH.

Maintenant, nous devons dire à gcloud GCP CLI d’utiliser ce compte de service.

Pour ce faire, vous devez créer une clé pour votre compte de service et la télécharger sous forme de fichier JSON. Tout comme vous l’avez fait pour les comptes de service des compartiments – voici quelques documents pour rafraîchir votre mémoire [8].

Après avoir téléchargé le fichier, vous devez exécuter la commande gcloud suivante dans votre terminal :

gcloud auth activate-service-account SERVICE_A[email protected] - key-file=/path/key.json - project=PROJECT_ID

Consultez ce document pour plus de détails sur la commande gcloud auth.

Maintenant, chaque fois que vous exécutez des commandes avec gcloud, il utilisera ce compte de service pour s’authentifier.

Maintenant, connectons-nous via SSH à la VM ml-pipeline GCP que vous avez créée quelques étapes plus tôt :

gcloud compute ssh ml-pipeline - zone europe-west3-c - quiet - tunnel-through-iap - project <your-project-id>
  • REMARQUE 1 : Changez la zone si vous n’avez pas créé de VM dans la même zone que nous.
  • REMARQUE 2 : Votre ID de projet n’est PAS le nom de votre projet. Accédez à la liste de vos projets GCP et trouvez l’ID du projet.

À partir de ce point, si vous avez configuré les pare-feu et le compte de service correctement, comme tout est dockerisé, toutes les étapes seront à 99% similaires à celles des autres articles.

Consultez le Github README – Configuration d’outils supplémentaires et sections d’utilisation pour des instructions étape par étape.

Vous pouvez suivre les mêmes étapes pendant que vous êtes connecté avec SSH à la machine ml-pipeline GCP.

Notez que la machine GCP utilise Linux comme système d’exploitation. Ainsi, vous pouvez copier et coller directement les commandes du README, indépendamment du système d’exploitation que vous utilisez sur votre appareil local.

Vous pouvez répéter en toute sécurité toutes les étapes que vous avez effectuées en configurant le pipeline localement en utilisant cette connexion SSH, mais vous devez garder à l’esprit les 3 cas particuliers suivants :

#1. Clonez le code dans le répertoire principal de la machine virtuelle

Il suffit de se connecter en SSH à la machine virtuelle et d’exécuter :

git clone https://github.com/iusztinpaul/energy-forecasting.gitcd energy-forecasting

#2. Installez Docker en utilisant les commandes suivantes :

Installez Docker :

sudo apt updatesudo apt install --yes apt-transport-https ca-certificates curl gnupg2 software-properties-commoncurl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"sudo apt updatesudo apt install --yes docker-ce

Ajoutez un accès sudo à Docker :

sudo usermod -aG docker $USERlogout 

Connectez-vous à nouveau à votre machine :

gcloud compute ssh ml-pipeline --zone europe-west3-c --quiet --tunnel-through-iap --project <your-project-id>

Consultez ces documents pour les instructions complètes [9].

#3. Remplacez toutes les commandes cp par gcloud compute scp :

Cette commande vous aidera à copier des fichiers de votre machine locale vers la machine virtuelle.

Par exemple, au lieu d’exécuter :

cp -r /path/to/admin/gcs/credentials/admin-buckets.json credentials/gcp/energy_consumption

Exécutez dans un terminal différent (pas celui connecté en SSH à votre machine virtuelle) :

gcloud compute scp --recurse --zone europe-west3-c --quiet --tunnel-through-iap --project <your-project-id> /local/path/to/admin-buckets.json ml-pipeline:~/energy-forecasting/airflow/dags/credentials/gcp/energy_consumption/

Cette commande copiera votre fichier admin-buckets.json local sur la machine virtuelle ml-pipeline.

Après avoir configuré votre code sur la machine virtuelle GCP ml-pipeline, allez dans votre vue de machine virtuelle depuis GCP et la section des balises réseau. Vous y trouverez la colonne Adresse IP externe, comme indiqué dans l’image ci-dessous. Copiez cette adresse IP et attachez-y le port 8080.

Par exemple, en fonction de l’adresse IP externe de l’image ci-dessous, j’ai accédé à Airflow en utilisant cette adresse : 35.207.134.188:8080 .

Félicitations ! Vous vous êtes connecté à votre propre application Airflow auto-hébergée.

Remarque : Si cela ne se connecte pas, donnez-lui quelques secondes pour se charger correctement.

Déployez l’application Web

Connectons-nous en SSH à la machine virtuelle “app” GCP que vous avez créée quelques étapes auparavant :

gcloud compute ssh app --zone europe-west3-c --quiet --tunnel-through-iap --project <your-project-id>
  • REMARQUE 1 : Changez la zone si vous n’avez pas créé de machine virtuelle dans la même zone que nous.
  • REMARQUE 2 : Votre identifiant de projet n’est PAS votre nom de projet. Accédez à la liste de vos projets GCP et trouvez l’identifiant du projet.

Ici, le processus est similaire à celui décrit dans la section “Déployer le pipeline ML”.

Vous pouvez déployer l’application web en suivant les étapes décrites dans la leçon 6 ou dans les sections “Set Up Additional Tools & Usage” du référentiel GitHub.

Mais n’oubliez pas de prendre en compte les 3 cas limites décrits dans la section “Déployer le pipeline ML”.

Je vous prie de m’excuser de vous renvoyer à une documentation externe pour installer tout ça. L’article est trop long et je ne voulais pas reproduire la documentation Google GCP ici.

Pipeline CI/CD en utilisant les actions GitHub (gratuit)

Les fichiers YAML des actions GitHub sont sous le répertoire .github/workflows.

Tout d’abord, laissez-moi vous expliquer les principaux composants que vous devez connaître dans un fichier d’actions GitHub 👇

Avec la section ” on -> push -> branches:“, vous spécifiez la branche à écouter pour les événements. Dans ce cas, l’action GitHub est déclenchée lorsque du nouveau code est validé sur la branche “main”.

Dans la section ” env: “, vous pouvez déclarer les variables d’environnement dont vous avez besoin dans le script.

Dans la section “jobs -> ci_cd -> steps:”, vous déclarez les étapes du pipeline CI/CD, qui s’exécuteront séquentiellement.

Dans la section “jobs -> ci_cd -> runs-on:”, vous spécifiez l’image de la VM sur laquelle vous voulez que les étapes s’exécutent.

Maintenant, examinons quelques fichiers d’actions GitHub réels 🔥

Fichier d’actions GitHub pour le pipeline ML

L’action sera déclenchée lorsque du nouveau code est validé sur la branche “main”, à l’exception des répertoires de l’application web et des fichiers YAML et Markdown.

Nous avons ajouté des variables d’environnement contenant des informations sur le projet GCP et la VM.

Pour les étapes du pipeline CI/CD, nous faisons principalement 2 choses :

  1. configurer les informations d’identification et s’authentifier à GCP,
  2. se connecter en SSH à la VM GCP donnée et exécuter une commande qui : se rend dans le répertoire de code, tire les derniers changements, construit les packages Python et les déploie dans le registre PyPi. Maintenant, Airflow utilisera les nouveaux packages Python la prochaine fois qu’il sera exécuté.

Fondamentalement, cela fait ce que vous auriez fait manuellement, mais maintenant, tout est joliment automatisé en utilisant les actions GitHub.

Notez que vous n’avez pas à vous souvenir ou à savoir comment écrire un fichier d’actions GitHub à partir de zéro, car vous pouvez trouver des modèles déjà écrits pour la plupart des cas d’utilisation. Par exemple, voici le référentiel google-github-actions/ssh-compute [11] que nous avons utilisé pour écrire le fichier YAML ci-dessous.

Vous trouverez des modèles similaires pour presque tous les cas d’utilisation que vous avez en tête.

Fichier d’actions GitHub pour l’application web

Le fichier d’actions de l’application Web est à 90 % identique à celui utilisé pour le pipeline ML, sauf pour les éléments suivants :

  • nous ignorons les fichiers de pipeline ML;
  • nous exécutons une commande Docker qui construit et exécute l’application web.

Mais d’où vient la syntaxe étrange ” ${{ vars… }}” ? Je vais vous l’expliquer dans un instant, mais ce que vous devez savoir maintenant, c’est ce qui suit :

  • ${{ vars.<name> }}“: variables définies dans GitHub;

  • ${{ secrets.<name> }}”: secrets définis dans GitHub. Une fois qu’un secret est défini, vous ne pouvez plus le voir (vous pouvez voir les variables) ;

  • ${{ env.<name> }}”: variables d’environnement définies dans la section “env:”.

Observation importante

Le fichier YAML ci-dessus ne contient pas la partie CI, seulement la partie CD.

Pour suivre de bonnes pratiques pour un pipeline CI robuste, vous devez exécuter une action qui construit les images Docker et les pousse vers un registre Docker.

Ensuite, vous vous connecterez en SSH à un environnement de test et exécuterez votre suite de tests. Enfin, vous vous connecterez en SSH à la VM de production, récupérerez les images et les exécuterez.

La série est devenue trop longue, et nous voulions la simplifier, mais la bonne nouvelle est que vous avez appris tous les outils et principes nécessaires pour faire ce que nous avons décrit ci-dessus.

Définir les secrets et les variables

À ce stade, vous devez forker le dépôt energy-consumption pour configurer les informations d’identification GitHub Actions avec les vôtres.

Consultez ce document pour voir comment forker un dépôt sur GitHub [10].

Définir les variables d’action

Accédez à votre dépôt forké. Ensuite, cliquez sur : “Paramètres -> Secrets et variables -> Actions.”

Maintenant, cliquez sur “Variables”. Vous pouvez créer une nouvelle variable en cliquant sur “Nouvelle variable de dépôt”. Voir l’image ci-dessous 👇

Capture d'écran de la création d'une nouvelle variable de dépôt [Image par l'auteur].

Vous devez créer 5 variables que les scripts GitHub Actions utiliseront :

  • APP_INSTANCE_NAME : le nom de la VM de l’application web. Dans notre cas, il s’appelle “app”. La valeur par défaut devrait être OK si vous utilisez nos conventions de nommage recommandées.
  • GCLOUD_PROJECT : l’ID de votre projet GCP. Ici, vous devez le modifier avec votre ID de projet.
  • ML_PIPELINE_INSTANCE_NAME : le nom de la VM de pipeline ML. Dans notre cas, il s’agit de “ml-pipeline”. La valeur par défaut devrait être OK si vous utilisez nos conventions de nommage recommandées.
  • USER: l’utilisateur que vous avez utilisé pour vous connecter aux VM lors de la configuration de la machine en utilisant la connexion SSH. Le mien était “pauliusztin”, mais vous devez le changer avec le vôtre. Allez sur la VM et exécutez echo $USER.
  • ZONE : la zone où vous avez déployé les VM. La valeur par défaut devrait être OK si vous utilisez nos conventions de nommage recommandées.

Définir les secrets d’action

Dans la même section “Secrets et variables/Actions”, cliquez sur l’onglet “Secrets”.

Vous pouvez créer un nouveau secret en appuyant sur le bouton “Nouveau secret de dépôt”.

Ceux-ci sont similaires aux variables que nous venons de remplir, mais après avoir rempli leurs valeurs, vous ne pouvez plus les voir. C’est pourquoi on les appelle secrets.

C’est ici que vous ajoutez toutes vos informations sensibles. Dans notre cas, les informations d’identification GCP et les clés privées. Voir l’image ci-dessous 👇

Capture d'écran de la création d'un nouveau secret de dépôt [Image par l'auteur].

Le secret GCP_CREDENTIALS contient le contenu de la clé JSON de votre compte de service d’administration de VM. En configurant cela, le pipeline CI/CD utilisera ce compte de service pour s’authentifier auprès des VM.

Comme le contenu du fichier est au format JSON, pour le formater correctement, vous devez effectuer les étapes suivantes :

Installez l’outil CLI jq :

sudo apt updatesudo apt install -y jqjq - version

Formattez votre fichier clé JSON :

jq -c . /chemin/vers/votre/admin-vm.json

Prenez la sortie de cette commande et créez votre secret GCP_CREDENTIALS avec celle-ci.

La GCP_SSH_PRIVATE_KEY est votre clé SSH privée GCP (pas votre clé personnelle – GCP en crée automatiquement une supplémentaire) qui a été créée sur votre ordinateur local lorsque vous avez utilisé SSH pour vous connecter aux VM GCP.

Pour le copier, exécutez la commande suivante:

cd ~/.sshcat google_compute_engine

Copiez la sortie du terminal et créez la variable GCP_SSH_PRIVATE_KEY.

Exécuter la pipeline CI/CD

Maintenant, apportez n’importe quelle modification au code, poussez-le dans la branche principale et les fichiers GitHub Actions devraient se déclencher automatiquement.

Vérifiez l’onglet “Actions” de votre référentiel GitHub pour voir leurs résultats.

Capture d'écran des journaux d'exécution des actions GitHub sur GitHub [Image by the Author].

Deux actions seront déclenchées. L’une construira et déploiera les modules ml-pipeline sur votre machine virtuelle ml-pipeline GCP, et l’autre construira et déploiera l’application web sur votre machine virtuelle app GCP.

Conclusion

Félicitations! Vous avez terminé la dernière leçon du cours Full Stack 7-Steps MLOps Framework. Cela signifie que vous êtes maintenant un ingénieur ML Full-stack 🔥

Je m’excuse à nouveau pour l’article très technique. Ce n’est pas une lecture très divertissante, mais c’est une étape cruciale pour finaliser cette série.

Dans la leçon 7, vous avez appris comment:

  • déployer manuellement les 3 pipelines ML sur GCP;
  • déployer manuellement l’application web sur GCP;
  • construire une pipeline CI/CD pour automatiser le processus de déploiement à l’aide de GitHub Actions.

Maintenant que vous comprenez comment ajouter une réelle valeur commerciale en déployant votre système ML et en le mettant au travail, il est temps de construire votre projet ML impressionnant.

Aucun projet n’est parfaitement construit, et celui-ci ne fait pas exception.

Jetez un coup d’œil à notre leçon bonus de The Full Stack 7-Steps MLOps Framework, où nous discuterons ouvertement des autres choix de conception que nous aurions pu prendre pour améliorer davantage le système ML construit au cours de ce cours.

Je suis sincèrement reconnaissant que vous ayez choisi mon cours pour apprendre MLE & MLOps, et j’espère que cela vous a aidé dans votre parcours d’apprentissage ✌️

Connectons-nous sur LinkedIn et faites-moi savoir si vous avez des questions et partagez les grands projets que vous avez construits après avoir terminé le cours The Full Stack 7-Steps MLOps Framework.

Accédez ici au référentiel GitHub.

💡 Mon objectif est d’aider les ingénieurs en apprentissage automatique à améliorer la conception et la production de systèmes ML. Suivez-moi sur LinkedIn ou abonnez-vous à ma newsletter hebdomadaire pour plus d’informations !

🔥 Si vous aimez lire des articles comme celui-ci et que vous souhaitez soutenir mon écriture, envisagez de devenir membre IPGirl. En utilisant mon lien de parrainage, vous pouvez me soutenir sans frais supplémentaires tout en profitant d’un accès illimité à la riche collection d’histoires d’IPGirl.

🤖 Rejoignez pour obtenir du contenu exclusif sur la conception et la construction de systèmes ML prêts pour la production 🚀 Débloquez l’accès complet à…

pauliusztin.medium.com

Merci ✌🏼 !

Références

[1] Consommation d’énergie par code DE35 de l’API du Danemark, Service de données énergétiques du Danemark

[2] Utilisation de l’IAP pour la redirection TCP, Docs GCP

[3] Aperçu de la redirection TCP, Docs GCP

[4] Google Cloud Collective, Comment ouvrir un port spécifique tel que 9090 dans Google Compute Engine (2017), Stackoverflow

[5] ANTHONY HEDDINGS, Comment ouvrir les ports du pare-feu sur une instance Compute Engine GCP (2020), How-To Geek

[6] Préparer votre projet pour la redirection TCP IAP, Docs GCP

[7] Réserver une adresse IP externe statique, Docs GCP

[8] Créer et supprimer des clés de compte de service, Docs GCP

[9] Tom Roth, Installer Docker sur une machine virtuelle Google Cloud (2018), Blog de Tom Roth

[10] Cloner un dépôt (fork), Documentation GitHub

[11] Répertoire GCP GitHub Actions, GitHub

We will continue to update IPGirl; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

AI

Perspectives d'experts sur le développement de cadres d'IA sûrs, sécurisés et fiables

Conformément à l'Ordre Exécutif récent du Président Biden mettant l'accent sur l'IA sûre, sécurisée et fiable, nous p...

AI

Apprentissage automatique dans les tests logiciels

L'apprentissage automatique dans les tests logiciels consiste à utiliser des algorithmes avancés et des approches bas...

AI

Vectara lance un modèle révolutionnaire à code source ouvert pour évaluer et résoudre les hallucinations dans les modèles de langage d'IA.

Dans une démarche sans précédent visant à favoriser la responsabilisation dans le domaine en constante évolution de l...

AI

Des informaticiens de l'Université du Massachusetts Amherst ont développé Scalene un outil d'IA open-source pour accélérer de manière spectaculaire la programmation Python.

La popularité de Python a récemment explosé, grâce à sa convivialité et à ses nombreuses bibliothèques. Cependant, l&...