1. Introduction
Merci d'avoir ouvert cet atelier de programmation. Prêt à faire des calculs sur Compute Engine ?
Dans cet atelier de programmation, nous allons voir comment démarrer une nouvelle machine virtuelle et exécuter un programme pour calculer pi.
Vous allez créer une instance Compute Engine, puis télécharger, compiler et exécuter un programme pour calculer le nombre de pi. Vous pouvez créer une instance Compute Engine depuis la console ou la ligne de commande. Dans cet atelier, vous allez découvrir comment utiliser les outils de ligne de commande.
Compute Engine propose des machines virtuelles qui s'exécutent sous différentes formes, telles que le nombre de cœurs, la taille de la mémoire et l'espace de stockage. Vous pouvez utiliser une machine avec plus de 100 cœurs et plusieurs centaines de Go de mémoire si nécessaire. Toutefois, dans cet exemple, nous allons lancer une machine virtuelle prédéfinie avec 2 processeurs virtuels et 8 Go de mémoire.
Dans cet atelier de programmation, nous utiliserons la série de machines N2. Il s'agit d'une VM d'une famille de machines à usage général qui cible la plupart des charges de travail standards et cloud natives. La série N2 offre des performances par thread supérieures et toute la flexibilité qu'offre la famille de machines à usage général.
C'est parti !
2. Préparation
Configuration de l'environnement au rythme de chacun
- Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)
- Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pouvez le modifier à tout moment.
- L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique. généralement, vous ne vous souciez
pas de ce que c’est. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet (il est généralement identifié comme
PROJECT_ID
). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre au hasard. Vous pouvez également essayer la vôtre pour voir si elle est disponible. Il ne peut pas être modifié après cette étape et restera actif pendant toute la durée du projet. - Pour votre information, il existe une troisième valeur, le numéro de projet, utilisé par certaines API. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour arrêter les ressources afin d'éviter que des frais ne vous soient facturés au-delà de ce tutoriel, vous pouvez supprimer les ressources que vous avez créées ou l'ensemble du projet. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai gratuit pour bénéficier d'un crédit de 300 $.
Google Cloud Shell
Google Cloud et Compute Engine peuvent être utilisés à distance depuis votre ordinateur portable. Toutefois, dans cet atelier de programmation, nous allons utiliser Google Cloud Shell, un environnement de ligne de commande exécuté dans le cloud.
Cette machine virtuelle basée sur Debian contient tous les outils de développement dont vous aurez besoin. Elle intègre un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Cela signifie que tout ce dont vous avez besoin pour cet atelier de programmation est un navigateur (oui, tout fonctionne sur un Chromebook).
- Pour activer Cloud Shell à partir de Cloud Console, cliquez simplement sur Activer Cloud Shell (l'opération de provisionnement et la connexion à l'environnement ne devraient prendre que quelques minutes).
Une fois connecté à Cloud Shell, vous êtes normalement déjà authentifié et le projet PROJECT_ID
est sélectionné :
gcloud auth list
Résultat de la commande
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Résultat de la commande
[core] project = <PROJECT_ID>
Si, pour une raison quelconque, le projet n'est pas défini, exécutez simplement la commande suivante :
gcloud config set project <PROJECT_ID>
Vous recherchez votre PROJECT_ID
? Vérifiez l'ID que vous avez utilisé pendant les étapes de configuration ou recherchez-le dans le tableau de bord Cloud Console :
Par défaut, Cloud Shell définit certaines variables d'environnement qui pourront s'avérer utiles pour exécuter certaines commandes dans le futur.
echo $GOOGLE_CLOUD_PROJECT
Résultat de la commande
<PROJECT_ID>
- Pour finir, définissez la configuration du projet et de la zone par défaut :
gcloud config set compute/zone us-central1-f
Vous pouvez choisir parmi différentes zones. Pour en savoir plus, consultez la page Régions et zones.
3. Créer une instance Compute Engine
Nous allons commencer par créer une machine virtuelle avec l'outil de ligne de commande gcloud. Si vous préférez, vous pouvez également utiliser la console, mais la ligne de commande est plus facile à répéter et à expliquer.
Commençons par créer une instance n2-standard-2 nommée "pi-codelab" avec le système d'exploitation Debian 11. Nous utiliserons également le disque persistant avec équilibrage pour le volume de démarrage. Les disques persistants équilibrés reposent sur des disques durs SSD, ce qui permet d'équilibrer les performances et les coûts. Vous serez invité à choisir la zone à utiliser si vous n'avez pas sélectionné la zone par défaut dans la section Configuration et conditions requises.
gcloud compute instances create pi-codelab \ --machine-type=n2-standard-2 \ --image-project=debian-cloud \ --image-family=debian-11 \ --boot-disk-type=pd-balanced
Le résultat de la commande doit se présenter comme suit:
Created [https://www.googleapis.com/compute/v1/projects/xxx/zones/us-central1-f/instances/pi-codelab]. NAME: pi-codelab ZONE: us-central1-f MACHINE_TYPE: n2-standard-2 PREEMPTIBLE: INTERNAL_IP: 10.128.X.XX EXTERNAL_IP: XX.XX.XX.XX STATUS: RUNNING
Notez que les champs INTERNAL_IP et EXTERNAL_IP changent chaque fois que vous créez une VM.
Pour en savoir plus sur la commande gcloud compute instances create
, consultez la page de référence.
4. Se connecter en SSH à l'instance
Pour vous connecter en SSH à l'instance à partir de la ligne de commande, exécutez la commande suivante.
gcloud compute ssh pi-codelab
Et voilà ! Vous vous trouvez maintenant sur la machine virtuelle. Vous pouvez confirmer votre hôte actuel en exécutant la commande hostname.
hostname
La commande affiche le nom d'hôte de l'environnement de shell actuel.
pi-codelab
5. Installer des dépendances
Nous allons maintenant installer les dépendances nécessaires à la compilation du programme afin de calculer pi.
sudo apt update sudo apt -y install build-essential libgmp-dev libmpfr-dev libfmt-dev
Ce processus prend quelques minutes. Vérifions maintenant si vous disposez d'un compilateur C++ fonctionnel.
c++ --version
Cette commande affichera les informations de version du compilateur s'il est installé correctement.
c++ (Debian 10.2.1-6) 10.2.1 20210110 Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
6. Compiler le programme
Compilons maintenant le programme C++ pour calculer pi. C'est plus simple qu'il n'y paraît, même si vous n'avez jamais développé en C++ auparavant. Toutes les conditions préalables ont été installées à l'étape précédente. Il nous suffit donc d'extraire et de compiler le code source.
Commencez par récupérer et enregistrer le code source. Cette étape permet de télécharger un fichier source à partir de GitHub et de l'enregistrer au format pi.cc dans le répertoire actuel.
curl -OL https://raw.githubusercontent.com/GoogleCloudPlatform/pi-delivery/main/codelab/pi.cc
Ensuite, exécutez le compilateur C++ pour compiler le code source enregistré.
c++ -opi pi.cc -std=c++17 -O3 -march=native -lgmp -lmpfr -lpthread -lfmt
Le compilateur ne génère rien en cas de réussite. Vérifions que vous disposez du fichier exécutable:
ls pi
Cette commande ls doit générer le nom de fichier du programme s'il existe.
pi
7. Calculer pi
Le programme pi
utilise un argument, le nombre de chiffres à calculer. Par exemple, calculons les 100 premières décimales de pi.
./pi 100
Le programme se termine en moins d'une seconde et produit un résultat semblable à celui-ci:
Calculating 100 digits of pi... Internal precision = 348 bits Number of terms = 9, digits per term = 14.181647462725477 Summation series complete. Final steps... 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
La dernière ligne correspond aux 100 premières décimales de pi. Félicitations, vous venez de demander à l'ordinateur de faire le calcul pour vous !
Le programme peut calculer davantage de chiffres (actuellement, le nombre maximal est limité à 100 milliards). Calculons à présent 10 millions de chiffres et mesurons le temps nécessaire. Nous redirigeons la sortie vers un fichier, car 10 millions de chiffres de pi sont un peu trop longs pour être affichés dans la console de ligne de commande.
time ./pi 10000000 > pi10m.txt
Le programme produit quelque chose comme ceci:
Calculating 10000000 digits of pi... Internal precision = 33219296 bits Number of terms = 705138, digits per term = 14.181647462725477 Summation series complete. Final steps... real 0m9.702s user 0m14.839s sys 0m0.364s
Cette fois-ci, les chiffres ne sont pas inclus, car ils sont enregistrés dans le fichier pi10m.txt
. Les trois dernières lignes décrivent la durée d'exécution du programme et la quantité de ressources processeur qu'il a utilisée.
- real: la durée réelle du début à la fin, ce qui signifie qu'il a fallu 9,7 secondes pour calculer 10 millions de chiffres de pi dans l'exemple ci-dessus.
- Utilisateur: durée CPU utilisée, ce qui est plus important que le "réel" car la machine dispose de deux cœurs de processeur et chaque cœur est comptabilisé dans le total.
- sys: temps nécessaire au système d'exploitation pour exécuter le programme afin de traiter des tâches système telles que le réseau et les E/S. Cette fois, il a fallu environ 0,4 seconde, c'est-à-dire principalement le temps nécessaire à l'écriture du résultat sur le disque.
Nous pouvons regarder pi10m.txt et voir les 100 premiers et derniers chiffres chacun.
Vérifions les premiers chiffres. Cette commande génère les 100 premières décimales (et les trois premières décimales).
head -c 102 pi10m.txt
Le résultat doit se présenter comme suit :
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
La commande suivante génère les 100 dernières décimales.
tail -c 100 pi10m.txt
Le résultat doit se présenter comme suit :
610515549257985759204553246894468742702504639790565326553194060999469787333810631719481735348955897
8. Nettoyer le cluster
N'oubliez pas d'arrêter votre instance Compute Engine, sinon elle continuera de fonctionner et de générer des coûts.
Si vous vous trouvez sur la VM (connectée via SSH), déconnectez-vous d'abord en exécutant la commande "exit".
exit
Exécutez ensuite la commande gcloud compute instances delete
suivante pour supprimer l'instance et les disques associés. Vous êtes alors invité à confirmer la suppression de la ressource.
gcloud compute instances delete pi-codelab
9. Étape suivante
Félicitations, vous avez terminé cet atelier de programmation sur Compute Engine et calculé 10 millions de chiffres de pi !
Nous avons utilisé la même infrastructure pour calculer 100 billions de chiffres de pi en 2022. Lisez l'annonce pour connaître nos résultats. L'intégralité des résultats est disponible sur notre site de démonstration pi.delivery.
Tenez-vous informé des dernières actualités concernant le calcul et le calcul hautes performances sur le blog Google Cloud.
Autres fonctionnalités Compute Engine
Compute Engine offre un large éventail de fonctionnalités. Nous vous conseillons de vous intéresser à certains de ces sujets :
- VM préemptives - https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- Nœuds à locataire unique : https://cloud.google.com/compute/docs/nodes/create-nodes
- GPU et TPU : https://cloud.google.com/compute/docs/gpus/add-gpus
- Instances Windows - https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- Ajouter des étiquettes à des ressources : https://cloud.google.com/compute/docs/labeling-resources
- Migrer des VM vers Compute Engine : https://cloud.google.com/compute/docs/vm-migration/
Votre avis nous intéresse !
- Veuillez prendre quelques minutes pour répondre à notre courte enquête.