Calculer pi sur Compute Engine

1. Introduction

Merci d'avoir ouvert cet atelier de programmation ! Prêt à traiter des données sur Compute Engine ?

Dans cet atelier de programmation, nous allons vous montrer comment démarrer une 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 pi. Vous pouvez créer une instance Compute Engine depuis la console ou la ligne de commande. Dans cet atelier, vous apprendrez à utiliser les outils de ligne de commande.

ComputeEngine_128px.png

Compute Engine propose des machines virtuelles de différentes formes, par exemple avec un nombre de cœurs, une taille de mémoire et un espace de stockage différents. Si nécessaire, vous pouvez utiliser une machine avec plus de 100 cœurs et plusieurs centaines de Go de mémoire. 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 de la 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 plus élevées et toute la flexibilité de la famille de machines à usage général.

C'est parti !

2. Préparation

Configuration de l'environnement au rythme de chacun

  1. 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.)

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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 (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID du projet (généralement identifié par PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet.
  • Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
  1. 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 désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300$.

Google Cloud Shell

Bien que Google Cloud et Compute Engine puissent être utilisés à distance depuis votre ordinateur portable, nous allons utiliser Google Cloud Shell pour cet atelier de programmation, 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).

  1. Pour activer Cloud Shell à partir de Cloud Console, cliquez simplement sur Activer Cloud Shell b125d9eb26a46cc5.png (l'opération de provisionnement et la connexion à l'environnement ne devraient prendre que quelques minutes).

1067942a9a93f70.png

Capture d'écran du 2017-06-14 à 10.13.43 PM.png

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 :

cc3895eeac80db2c.png

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>
  1. 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 d'abord 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 Debian 11 comme système d'exploitation. Nous utiliserons également le disque persistant avec équilibrage pour le volume de démarrage. Les disques persistants avec équilibrage sont sauvegardés par des disques durs SSD et offrent un bon équilibre entre performances et coûts. Il vous demandera quelle zone utiliser si vous n'avez pas sélectionné la zone par défaut dans la section "Configuration et exigences".

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 devrait ressembler à ceci :

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 êtes maintenant sur la machine virtuelle. Vous pouvez confirmer votre hôte actuel en exécutant la commande hostname.

hostname

La commande affichera le nom d'hôte de l'environnement shell actuel.

pi-codelab

5. Installer des dépendances

Nous allons maintenant installer les dépendances nécessaires à la compilation du programme pour calculer pi.

sudo apt update
sudo apt -y install build-essential libgmp-dev libmpfr-dev libfmt-dev

Cette opération prend quelques minutes. Vérifions maintenant si vous disposez d'un compilateur C++ fonctionnel.

c++ --version

Si le compilateur est correctement installé, cette commande affichera des informations sur sa version.

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 que ça n'y paraît, même si vous n'avez jamais développé en C++. Tous les prérequis ont été installés à l'étape précédente. Il ne nous reste plus qu'à récupérer et compiler le code source.

Tout d'abord, récupérez et enregistrez le code source. Cette étape télécharge un fichier source depuis GitHub et l'enregistre sous le nom "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 n'affiche 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 accepte un argument, à savoir 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 génère 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 faire faire les calculs par l'ordinateur !

Le programme peut calculer plus de chiffres (actuellement limité à 100 milliards de chiffres). Calculons maintenant 10 millions de chiffres et mesurons le temps nécessaire. Nous redirigeons la sortie vers un fichier, car 10 millions de décimales de pi sont un peu trop longues à afficher dans la console de ligne de commande.

time ./pi 10000000 > pi10m.txt

Le programme génère un résultat semblable à celui-ci :

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, les chiffres ne sont pas inclus, car ils sont enregistrés dans le fichier pi10m.txt. Les trois dernières lignes décrivent le temps d'exécution du programme et la quantité de processeur utilisée.

  • "real" : temps réel écoulé entre le début et la fin de l'opération.Dans l'exemple ci-dessus, il a fallu 9,7 secondes pour calculer 10 millions de décimales de pi.
  • le temps CPU utilisé, qui est supérieur au temps "réel" car la machine dispose de deux cœurs de processeur et que 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 les tâches système telles que le réseau et les E/S. Cette fois, l'opération a duré environ 0,4 seconde, ce qui correspond principalement au temps nécessaire pour écrire le résultat sur le disque.

Nous pouvons examiner le fichier pi10m.txt et voir les 100 premiers et les 100 derniers chiffres.

Vérifions les premiers chiffres. Cette commande affiche les 100 premières décimales (ainsi que les trois premiers chiffres et le point décimal).

head -c 102 pi10m.txt

Le résultat doit ressembler à ceci.

3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

La commande suivante affiche les 100 dernières décimales.

tail -c 100 pi10m.txt

Le résultat doit ressembler à ceci.

610515549257985759204553246894468742702504639790565326553194060999469787333810631719481735348955897

8. Nettoyer le cluster

N'oubliez pas d'arrêter votre instance Compute Engine, sinon elle continuera de s'exécuter et d'engendrer des coûts.

Si vous êtes sur la VM (connectée avec 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 serez 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 Compute Engine et calculé 10 millions de décimales de pi !

Nous avons utilisé la même infrastructure pour calculer 100 000 milliards de chiffres de pi en 2022. Pour en savoir plus, consultez l'annonce. L'ensemble des résultats est disponible sur notre site de démonstration pi.delivery.

Tenez-vous informé des dernières actualités concernant Compute et le calcul hautes performances sur le blog Google Cloud.

Autres fonctionnalités de Compute Engine

Compute Engine propose un large éventail de fonctionnalités. Voici quelques exemples :

Votre avis nous intéresse !

  • Veuillez prendre quelques minutes pour répondre à notre courte enquête.