1. Wprowadzenie
Dziękujemy za otwarcie tego ćwiczenia. Chcesz przetwarzać dane w Compute Engine?
W tym ćwiczeniu pokażemy, jak uruchomić nową maszynę wirtualną i uruchomić program do obliczania liczby Pi.
Utworzysz instancję Compute Engine, pobierzesz, skompilujesz i uruchomisz program do obliczania liczby Pi. Instancję Compute Engine możesz utworzyć w konsoli lub wierszu poleceń. W tym module dowiesz się, jak korzystać z narzędzi wiersza poleceń.

Compute Engine oferuje maszyny wirtualne o różnych konfiguracjach, np. z różną liczbą rdzeni, rozmiarem pamięci i pojemnością pamięci masowej. W razie potrzeby możesz użyć maszyny z ponad 100 rdzeniami i kilkuset gigabajtami pamięci, ale w tym przykładzie uruchomimy wstępnie zdefiniowaną maszynę wirtualną z 2 procesorami wirtualnymi i 8 GB pamięci.
W tym ćwiczeniu użyjemy serii maszyn N2. Jest to maszyna wirtualna z rodziny maszyn do zwykłych obciążeń, która jest przeznaczona do większości standardowych i natywnych dla chmury zbiorów zadań. Seria N2 ma wyższą wydajność na wątek i zapewnia elastyczność, jaką oferuje rodzina maszyn do zwykłych obciążeń.
Zaczynajmy!
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.



- Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Możesz ją zaktualizować w dowolnym momencie.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się nim przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle jest on oznaczony jako
PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i będzie obowiązywać przez cały czas trwania projektu. - Warto wiedzieć, że istnieje też trzecia wartość, czyli numer projektu, z której korzystają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Google Cloud Shell
Z Google Cloud i Compute Engine można korzystać zdalnie na laptopie, ale w tym module użyjemy Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.
Ta maszyna wirtualna oparta na Debianie zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Oznacza to, że do ukończenia tego ćwiczenia potrzebujesz tylko przeglądarki (działa ona na Chromebooku).
- Aby aktywować Cloud Shell w konsoli Cloud, kliknij Aktywuj Cloud Shell
(udostępnienie środowiska i połączenie się z nim powinno zająć tylko kilka chwil).


Po połączeniu z Cloud Shell zobaczysz, że uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu PROJECT_ID.
gcloud auth list
Wynik polecenia
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Wynik polecenia
[core] project = <PROJECT_ID>
Jeśli z jakiegoś powodu projekt nie jest ustawiony, po prostu wydaj to polecenie:
gcloud config set project <PROJECT_ID>
Szukasz urządzenia PROJECT_ID? Sprawdź, jakiego identyfikatora użyto w krokach konfiguracji, lub wyszukaj go w panelu konsoli Cloud:

Cloud Shell domyślnie ustawia też niektóre zmienne środowiskowe, które mogą być przydatne podczas wykonywania kolejnych poleceń.
echo $GOOGLE_CLOUD_PROJECT
Wynik polecenia
<PROJECT_ID>
- Na koniec ustaw domyślną strefę i konfigurację projektu.
gcloud config set compute/zone us-central1-f
Możesz wybrać różne strefy. Więcej informacji znajdziesz w artykule Regiony i strefy.
3. Tworzenie maszyny Compute Engine
Najpierw utworzymy maszynę wirtualną za pomocą narzędzia wiersza poleceń gcloud. Możesz też użyć konsoli, ale wiersz poleceń jest łatwiejszy do powtórzenia i wyjaśnienia.
Najpierw utwórzmy instancję n2-standard-2 o nazwie pi-codelab z systemem operacyjnym Debian 11. W przypadku woluminu rozruchowego użyjemy też zrównoważonego dysku stałego. Zrównoważone dyski PD są oparte na dyskach SSD i zapewniają równowagę między wydajnością a kosztami. Jeśli w sekcji Konfiguracja i wymagania nie wybierzesz strefy domyślnej, pojawi się pytanie, której strefy chcesz użyć.
gcloud compute instances create pi-codelab \ --machine-type=n2-standard-2 \ --image-project=debian-cloud \ --image-family=debian-11 \ --boot-disk-type=pd-balanced
Wynik polecenia powinien wyglądać tak:
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
Pamiętaj, że pola INTERNAL_IP i EXTERNAL_IP zmieniają się za każdym razem, gdy tworzysz nową maszynę wirtualną.
Więcej informacji o poleceniu gcloud compute instances create znajdziesz na stronie referencyjnej.
4. Nawiązywanie połączenia z instancją przez SSH
Aby połączyć się z instancją przez SSH z wiersza poleceń, uruchom to polecenie.
gcloud compute ssh pi-codelab
To wszystko. Teraz jesteś na maszynie wirtualnej. Aby sprawdzić bieżącego hosta, uruchom polecenie hostname.
hostname
Polecenie wyświetli nazwę hosta bieżącego środowiska powłoki.
pi-codelab
5. Instalowanie zależności
Teraz zainstalujemy zależności potrzebne do skompilowania programu obliczającego liczbę pi.
sudo apt update sudo apt -y install build-essential libgmp-dev libmpfr-dev libfmt-dev
Proces trwa kilka minut. Sprawdźmy teraz, czy masz działający kompilator C++.
c++ --version
Jeśli kompilator jest zainstalowany prawidłowo, to polecenie wyświetli informacje o jego wersji.
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. Kompilowanie programu
Teraz skompilujmy program w C++, aby obliczyć liczbę pi. Jest to prostsze, niż się wydaje, nawet jeśli nie masz doświadczenia w programowaniu w C++. Wszystkie wymagania wstępne zostały zainstalowane w poprzednim kroku, więc musimy tylko pobrać i skompilować kod źródłowy.
Najpierw pobierz i zapisz kod źródłowy. Ten krok pobiera plik źródłowy z GitHuba i zapisuje go jako pi.cc w bieżącym katalogu.
curl -OL https://raw.githubusercontent.com/GoogleCloudPlatform/pi-delivery/main/codelab/pi.cc
Następnie uruchom kompilator C++, aby skompilować zapisany kod źródłowy.
c++ -opi pi.cc -std=c++17 -O3 -march=native -lgmp -lmpfr -lpthread -lfmt
W przypadku powodzenia kompilator nie generuje żadnych danych wyjściowych. Sprawdźmy, czy masz plik wykonywalny:
ls pi
To polecenie ls powinno wyświetlić nazwę pliku programu, jeśli istnieje.
pi
7. Obliczanie liczby Pi
Program pi przyjmuje 1 argument – liczbę cyfr do obliczenia. Obliczmy na przykład pierwsze 100 miejsc po przecinku liczby pi.
./pi 100
Program zakończy się w mniej niż sekundę i wygeneruje dane wyjściowe podobne do tych poniżej:
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
Ostatnia linia to pierwsze 100 cyfr po przecinku liczby pi. Gratulacje! Komputer właśnie wykonał za Ciebie obliczenia.
Program może obliczać więcej cyfr (obecnie limit wynosi 100 miliardów cyfr). Teraz obliczmy 10 milionów cyfr i zobaczmy, ile to zajmie. Przekierowujemy dane wyjściowe do pliku, ponieważ 10 milionów cyfr liczby pi to zbyt dużo, aby wyświetlić je w konsoli wiersza poleceń.
time ./pi 10000000 > pi10m.txt
Program wyświetli dane podobne do tych:
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
Tym razem nie zawiera cyfr, ponieważ są one zapisane w pliku pi10m.txt. Ostatnie 3 wiersze opisują, ile czasu zajęło uruchomienie programu i ile wykorzystał procesor.
- rzeczywisty: rzeczywisty czas od początku do końca, co oznacza, że w podanym wyżej przykładzie obliczenie 10 milionów cyfr liczby pi zajęło 9,7 sekundy.
- użytkownik: ile czasu procesora wykorzystał, co jest większe niż „rzeczywiste”, ponieważ maszyna ma 2 rdzenie procesora, a każdy rdzeń jest wliczany do sumy.
- sys: czas, którego system operacyjny potrzebował na uruchomienie programu w celu przetworzenia zadań systemowych, takich jak sieć i wejście/wyjście. Tym razem zajęło to około 0,4 sekundy, co w większości przypadków jest czasem potrzebnym na zapisanie wyniku na dysku.
Możemy przyjrzeć się plikowi pi10m.txt i zobaczyć pierwsze i ostatnie 100 cyfr.
Sprawdźmy pierwsze cyfry. To polecenie wyświetla pierwsze 100 miejsc po przecinku (oraz pierwsze 3 cyfry i przecinek).
head -c 102 pi10m.txt
Wynik powinien wyglądać tak.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Następne polecenie wyświetla ostatnie 100 miejsc po przecinku.
tail -c 100 pi10m.txt
Wynik powinien wyglądać tak.
610515549257985759204553246894468742702504639790565326553194060999469787333810631719481735348955897
8. Zwalnianie miejsca w klastrze
Nie zapomnij wyłączyć instancji Compute Engine, w przeciwnym razie będzie ona nadal działać i generować koszty.
Jeśli jesteś na maszynie wirtualnej (połączonej przez SSH), najpierw wyloguj się, uruchamiając polecenie exit.
exit
Następnie uruchom to polecenie gcloud compute instances delete, aby usunąć instancję i powiązane z nią dyski. Pojawi się prośba o potwierdzenie usunięcia zasobu.
gcloud compute instances delete pi-codelab
9. Co dalej?
Gratulacje! Udało Ci się ukończyć to ćwiczenie z Compute Engine i obliczyć 10 milionów cyfr liczby pi.
W 2022 roku użyliśmy tej samej infrastruktury do obliczenia 100 bilionów cyfr liczby pi. Przeczytaj ogłoszenie, aby dowiedzieć się, jak nam poszło. Pełne wyniki są dostępne w naszej witrynie demonstracyjnej pi.delivery.
Bądź na bieżąco z najnowszymi wiadomościami o Compute i komputerach o dużej mocy obliczeniowej na blogu Google Cloud.
Więcej funkcji Compute Engine
Compute Engine ma bogaty zestaw funkcji. Możesz zapoznać się z tymi artykułami :
- Maszyny wirtualne z możliwością wywłaszczania – https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- Węzły dzierżawione na wyłączność – https://cloud.google.com/compute/docs/nodes/create-nodes
- GPU i TPU – https://cloud.google.com/compute/docs/gpus/add-gpus
- Instancje Windows – https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- Etykietowanie zasobów – https://cloud.google.com/compute/docs/labeling-resources
- Przenoszenie maszyn wirtualnych do Compute Engine – https://cloud.google.com/compute/docs/vm-migration/
Prześlij nam swoją opinię
- Poświęć chwilę na wypełnienie naszej krótkiej ankiety.