Pi in Compute Engine berechnen

1. Einführung

Vielen Dank, dass Sie dieses Codelab geöffnet haben. Sie möchten einige Zahlen in Compute Engine verarbeiten?

In diesem Codelab erfahren Sie, wie Sie eine neue virtuelle Maschine starten und ein Programm zum Berechnen von Pi ausführen.

Sie erstellen eine Compute Engine-Instanz, laden ein Programm zum Berechnen von Pi herunter, kompilieren es und führen es aus. Sie können eine Compute Engine-Instanz entweder über die Console oder über die Befehlszeile erstellen. In diesem Lab lernen Sie, wie Sie die Befehlszeilentools verwenden.

ComputeEngine_128px.png

Compute Engine bietet virtuelle Maschinen in verschiedenen Formen, z. B. mit unterschiedlicher Anzahl von Kernen, Arbeitsspeichergröße und Speicher. Sie können bei Bedarf eine Maschine mit mehr als 100 Kernen und mehreren Hundert GB Arbeitsspeicher verwenden. In diesem Beispiel starten wir jedoch eine vordefinierte virtuelle Maschine mit 2 vCPUs und 8 GB Arbeitsspeicher.

In diesem Codelab verwenden wir die N2-Maschinenserie. Es handelt sich um eine VM der Maschinenfamilie für allgemeine Zwecke, die auf die meisten Standard- und cloudnativen Arbeitslasten ausgerichtet ist. Die N2-Serie bietet eine höhere Leistung pro Thread und die Flexibilität, die die Maschinenfamilie für allgemeine Zwecke bietet.

Los gehts!

2. Einrichtung und Anforderungen

Umgebung zum selbstbestimmten Lernen einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können ihn jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (sie wird in der Regel als PROJECT_ID angegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen versuchen und sehen, ob es verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Wenn Sie Ressourcen herunterfahren möchten, damit Ihnen nach Abschluss dieser Anleitung keine Kosten mehr in Rechnung gestellt werden, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neue Nutzer von Google Cloud kommen für das Programm für kostenlose Testversionen mit einem Guthaben von 300$ infrage.

Google Cloud Shell

Während Sie Google Cloud und Compute Engine von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Google Cloud Shell verwendet, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Diese Debian-basierte virtuelle Maschine verfügt über alle Entwicklungstools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Für dieses Codelab benötigen Sie also nur einen Browser (es funktioniert auch auf einem Chromebook).

  1. Klicken Sie zum Aktivieren von Cloud Shell in der Cloud Console einfach auf Cloud Shell aktivieren b125d9eb26a46cc5.png. Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Augenblicke dauern.

1067942a9a93f70.png

Screen Shot 2017-06-14 at 10.13.43 PM.png

Sobald die Verbindung mit der Cloud Shell hergestellt ist, sehen Sie, dass Sie bereits authentifiziert sind und für das Projekt schon Ihre PROJECT_ID eingestellt ist.

gcloud auth list

Befehlsausgabe

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Befehlsausgabe

[core]
project = <PROJECT_ID>

Wenn das Projekt aus irgendeinem Grund nicht festgelegt ist, führen Sie einfach den folgenden Befehl aus:

gcloud config set project <PROJECT_ID>

Suchst du nach deinem PROJECT_ID? Sehen Sie nach, welche ID Sie in den Einrichtungsschritten verwendet haben, oder suchen Sie sie im Cloud Console-Dashboard:

cc3895eeac80db2c.png

In Cloud Shell werden auch einige Umgebungsvariablen standardmäßig festgelegt, die für zukünftige Befehle nützlich sein können.

echo $GOOGLE_CLOUD_PROJECT

Befehlsausgabe

<PROJECT_ID>
  1. Legen Sie zum Schluss die Standardzone und die Projektkonfiguration fest.
gcloud config set compute/zone us-central1-f

Sie können verschiedene Zonen auswählen. Weitere Informationen finden Sie unter Regionen und Zonen.

3. Compute Engine-Instanz erstellen

Zuerst erstellen wir eine virtuelle Maschine mit dem gcloud-Befehlszeilentool. Sie können auch die Konsole verwenden, aber die Befehlszeile ist einfacher zu wiederholen und zu erklären.

Erstellen wir zuerst eine n2-standard-2-Instanz mit dem Namen „pi-codelab“ und Debian 11 als Betriebssystem. Wir verwenden auch den abgestimmten nichtflüchtigen Speicher (Persistent Disk, PD) für das Bootvolume. Ausgeglichene nichtflüchtige Speicher werden von Solid-State-Laufwerken (SSDs) unterstützt und bieten ein gutes Preis-Leistungs-Verhältnis. Sie werden gefragt, welche Zone verwendet werden soll, wenn Sie im Abschnitt „Einrichtung und Anforderungen“ nicht die Standardzone ausgewählt haben.

gcloud compute instances create pi-codelab \
--machine-type=n2-standard-2 \
--image-project=debian-cloud \
--image-family=debian-11 \
--boot-disk-type=pd-balanced

Das Ergebnis des Befehls sollte so aussehen:

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

Die Felder INTERNAL_IP und EXTERNAL_IP ändern sich jedes Mal, wenn Sie eine neue VM erstellen.

Weitere Informationen zum Befehl gcloud compute instances create finden Sie auf der Referenzseite.

4. SSH-Verbindung zur Instanz herstellen

Führen Sie den folgenden Befehl aus, um über die Befehlszeile eine SSH-Verbindung zur Instanz herzustellen.

gcloud compute ssh pi-codelab

Geschafft! Sie befinden sich jetzt auf der virtuellen Maschine. Sie können Ihren aktuellen Host mit dem Befehl „hostname“ bestätigen.

hostname

Mit dem Befehl wird der Hostname der aktuellen Shell-Umgebung angezeigt.

pi-codelab

5. Abhängigkeiten installieren

Als Nächstes installieren wir die Abhängigkeiten, die zum Kompilieren des Programms zum Berechnen von Pi erforderlich sind.

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

Der Vorgang dauert einige Minuten. Prüfen wir nun, ob Sie einen funktionierenden C++-Compiler haben.

c++ --version

Mit diesem Befehl werden Versionsinformationen des Compilers ausgegeben, sofern er korrekt installiert ist.

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. Programm kompilieren

Kompilieren wir nun das C++-Programm, um Pi zu berechnen. Das ist einfacher, als es klingt, auch wenn Sie noch nie in C++ entwickelt haben. Alle Voraussetzungen wurden im vorherigen Schritt installiert. Wir müssen also nur noch den Quellcode abrufen und kompilieren.

Rufen Sie zuerst den Quellcode ab und speichern Sie ihn. In diesem Schritt wird eine Quelldatei von GitHub heruntergeladen und als „pi.cc“ im aktuellen Verzeichnis gespeichert.

curl -OL https://raw.githubusercontent.com/GoogleCloudPlatform/pi-delivery/main/codelab/pi.cc

Kompilieren Sie als Nächstes den gespeicherten Quellcode mit dem C++-Compiler.

c++ -opi pi.cc -std=c++17 -O3 -march=native -lgmp -lmpfr -lpthread -lfmt

Bei Erfolg gibt der Compiler nichts aus. Prüfen Sie, ob Sie die ausführbare Datei haben:

ls pi

Dieser „ls“-Befehl sollte den Dateinamen des Programms ausgeben, sofern es vorhanden ist.

pi

7. Pi berechnen

Das pi-Programm hat ein Argument, die Anzahl der zu berechnenden Ziffern. Wir berechnen beispielsweise die ersten 100 Dezimalstellen von Pi.

./pi 100

Das Programm wird in weniger als einer Sekunde abgeschlossen und gibt etwa Folgendes aus:

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

Die letzte Zeile enthält die ersten 100 Dezimalstellen von Pi. Herzlichen Glückwunsch, Sie haben gerade den Computer für sich rechnen lassen!

Das Programm kann mehr Stellen berechnen (derzeit auf 100 Milliarden Stellen begrenzt). Nun berechnen wir 10 Millionen Ziffern und messen, wie lange das dauert. Wir leiten die Ausgabe in eine Datei um, da 10 Millionen Ziffern von Pi etwas zu lang sind, um sie in der Befehlszeilenkonsole anzuzeigen.

time ./pi 10000000 > pi10m.txt

Das Programm gibt etwa Folgendes aus:

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

Die Ziffern sind dieses Mal nicht enthalten, da sie in der Datei pi10m.txt gespeichert sind. In den letzten drei Zeilen wird beschrieben, wie viel Zeit das Programm für die Ausführung benötigt hat und wie viel CPU es verwendet hat.

  • „real“: Die tatsächliche Zeit vom Start bis zum Ende.Im obigen Beispiel hat es also 9,7 Sekunden gedauert, um 10 Millionen Ziffern von Pi zu berechnen.
  • user: Wie viel CPU-Zeit wurde verwendet? Dieser Wert ist größer als „real“, da die Maschine zwei CPU-Kerne hat und jeder Kern zum Gesamtwert beiträgt.
  • sys: Die Zeit, die das Betriebssystem zum Ausführen des Programms benötigt hat, um Systemaufgaben wie Netzwerk und E/A zu verarbeiten. Diesmal dauerte es etwa 0,4 Sekunden, was hauptsächlich auf das Schreiben des Ergebnisses auf die Festplatte zurückzuführen ist.

Wir können uns die Datei „pi10m.txt“ ansehen und die ersten und letzten 100 Ziffern anzeigen lassen.

Sehen wir uns die ersten Ziffern an. Mit diesem Befehl werden die ersten 100 Dezimalstellen (sowie die ersten 3 Ziffern und das Dezimalkomma) ausgegeben.

head -c 102 pi10m.txt

Das Ergebnis sollte so aussehen.

3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Der nächste Befehl gibt die letzten 100 Dezimalstellen aus.

tail -c 100 pi10m.txt

Das Ergebnis sollte so aussehen.

610515549257985759204553246894468742702504639790565326553194060999469787333810631719481735348955897

8. Cluster bereinigen

Vergessen Sie nicht, Ihre Compute Engine-Instanz herunterzufahren, da sie sonst weiter ausgeführt wird und Kosten anfallen.

Wenn Sie sich auf der VM befinden (mit SSH verbunden), melden Sie sich zuerst ab, indem Sie den Befehl „exit“ ausführen.

exit

Führen Sie dann den folgenden gcloud compute instances delete-Befehl aus, um die Instanz und die zugehörigen Laufwerke zu löschen. Sie werden aufgefordert, das Löschen der Ressource zu bestätigen.

gcloud compute instances delete pi-codelab

9. Nächste Schritte

Herzlichen Glückwunsch! Sie haben dieses Compute Engine-Codelab abgeschlossen und 10 Millionen Stellen von Pi berechnet.

Wir haben 2022 dieselbe Infrastruktur verwendet, um 100 Billionen Stellen von Pi zu berechnen. Weitere Informationen Die vollständigen Ergebnisse sind auf unserer pi.delivery-Demowebsite verfügbar.

Im Google Cloud-Blog finden Sie die neuesten Nachrichten zu Compute und High Performance Computing.

Weitere Compute Engine-Funktionen

Compute Engine bietet eine Vielzahl von Funktionen. Hier einige Beispiele :

Feedback geben

  • Bitte nehmen Sie sich einen Moment Zeit, um an unserer kurzen Umfrage teilzunehmen.