Compute Engine'de Pi'yi hesaplama

1. Giriş

Bu codelab'i açtığınız için teşekkür ederiz. Compute Engine'de bazı sayıları işlemeye hazır mısınız?

Bu codelab'de, yeni bir sanal makine başlatma ve pi sayısını hesaplamak için program çalıştırma adımları açıklanmaktadır.

Compute Engine örneği oluşturacak, pi sayısını hesaplamak için bir program indirip derleyip çalıştıracaksınız. Compute Engine örneğini Console'dan veya komut satırından oluşturabilirsiniz. Bu laboratuvarda, komut satırı araçlarını kullanma konusunda adım adım rehberlik sağlanacaktır.

ComputeEngine_128px.png

Compute Engine, farklı sayıda çekirdek, bellek boyutu ve depolama alanı gibi çeşitli şekillerde çalışan sanal makineler sunar. Gerekirse 100'den fazla çekirdeğe ve birkaç yüz GB belleğe sahip bir makine kullanabilirsiniz ancak bu örnekte önceden tanımlanmış 2 vCPU'lu ve 8 GB bellekli bir sanal makine başlatacağız.

Bu codelab'de N2 makine serisini kullanacağız. Bu, çoğu standart ve buluta özel iş yükünü hedefleyen genel amaçlı bir makine ailesi VM'sidir. N2 serisi, iş parçası başına daha yüksek performansa ve genel amaçlı makine ailesinin sunduğu tüm esnekliğe sahiptir.

Şimdi başlayalım.

2. Kurulum ve Gereksinimler

Yönlendirmesiz ortam kurulumu

  1. Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Dilediğiniz zaman bunu güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğine (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince geçerli kalır.
  • Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projenin tamamını silebilirsiniz. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

Google Cloud Shell

Google Cloud ve Compute Engine, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacağız.

Bu Debian tabanlı sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin bulunur ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu nedenle, bu codelab için ihtiyacınız olan tek şey bir tarayıcıdır (Chromebook'ta da çalışır).

  1. Cloud Shell'i Cloud Console'dan etkinleştirmek için Cloud Shell'i etkinleştir 'i b125d9eb26a46cc5.png tıklamanız yeterlidir (ortamın sağlanması ve bağlantının kurulması yalnızca birkaç saniye sürer).

1067942a9a93f70.png

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

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin, PROJECT_ID'nize ayarlandığını görürsünüz.

gcloud auth list

Komut çıkışı

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

Komut çıkışı

[core]
project = <PROJECT_ID>

Herhangi bir nedenle proje ayarlanmamışsa şu komutu verin:

gcloud config set project <PROJECT_ID>

PROJECT_ID cihazınızı mı arıyorsunuz? Kurulum adımlarında hangi kimliği kullandığınızı kontrol edin veya Cloud Console kontrol panelinde arayın:

cc3895eeac80db2c.png

Cloud Shell, gelecekteki komutları çalıştırırken faydalı olabilecek bazı ortam değişkenlerini de varsayılan olarak ayarlar.

echo $GOOGLE_CLOUD_PROJECT

Komut çıkışı

<PROJECT_ID>
  1. Son olarak, varsayılan alt bölgeyi ve proje yapılandırmasını ayarlayın.
gcloud config set compute/zone us-central1-f

Çeşitli bölgeler arasından seçim yapabilirsiniz. Daha fazla bilgi için Bölgeler ve Alt Bölgeler başlıklı makaleyi inceleyin.

3. Compute Engine örneği oluşturma

İlk olarak, gcloud komut satırı aracıyla bir sanal makine oluşturacağız. İsterseniz Console'u da kullanabilirsiniz ancak komut satırının tekrarı ve açıklaması daha kolaydır.

Öncelikle işletim sistemi olarak Debian 11'in kullanıldığı pi-codelab adlı bir n2-standard-2 örneği oluşturalım. Önyükleme birimi için dengeli kalıcı diski (PD) de kullanırız. Dengeli kalıcı diskler, katı hal sürücüleri (SSD) tarafından desteklenir ve performans ile maliyet arasında denge sağlar. Kurulum ve Gereksinimler bölümünde varsayılan bölgeyi seçmediyseniz hangi bölgenin kullanılacağı sorulur.

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

Komutun sonucu aşağıdaki gibi görünmelidir:

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

INTERNAL_IP ve EXTERNAL_IP alanlarının her yeni sanal makine oluşturduğunuzda değiştiğini lütfen unutmayın.

gcloud compute instances create komutu hakkında daha fazla bilgi edinmek isterseniz lütfen referans sayfasını ziyaret edin.

4. Örneğe SSH ile bağlanma

Komut satırından örneğe SSH ile bağlanmak için aşağıdaki komutu çalıştırın.

gcloud compute ssh pi-codelab

İşte bu kadar. Artık sanal makinedesiniz. Ana makine adı komutunu çalıştırarak mevcut ana makinenizi onaylayabilirsiniz.

hostname

Komut, mevcut kabuk ortamının ana makine adını gösterir.

pi-codelab

5. Bağımlılıkları yükleme

Şimdi, pi sayısını hesaplamak için programı derlemek üzere gereken bağımlılıkları yükleyeceğiz.

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

İşlemin tamamlanması birkaç dakika sürer. Şimdi de çalışan bir C++ derleyiciniz olup olmadığını kontrol edelim.

c++ --version

Bu komut, derleyici doğru şekilde yüklendiyse derleyicinin sürüm bilgilerini verir.

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. Programı Derleme

Şimdi de pi sayısını hesaplamak için C++ programını derleyelim. Daha önce C++ ile geliştirme yapmamış olsanız bile bu işlem, göründüğünden daha basittir. Tüm ön koşullar önceki adımda yüklendiğinden yalnızca kaynak kodu getirmemiz ve derlememiz gerekir.

Öncelikle kaynak kodunu getirip kaydedin. Bu adımda, GitHub'dan bir kaynak dosya indirilir ve geçerli dizine pi.cc olarak kaydedilir.

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

Ardından, kaydedilen kaynak kodu derlemek için C++ derleyicisini çalıştırın.

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

Derleyici, başarılı olması durumunda herhangi bir çıkış vermez. Yürütülebilir dosyanızın olup olmadığını kontrol edelim:

ls pi

Bu ls komutu, varsa programın dosya adını çıkarmalıdır.

pi

7. Pi'yi hesaplama

pi programı, hesaplanacak basamak sayısını içeren bir bağımsız değişken alır. Örneğin, pi sayısının ilk 100 ondalık basamağını hesaplayalım.

./pi 100

Program bir saniyeden kısa bir süre içinde tamamlanır ve aşağıdaki gibi bir çıktı verir:

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

Son satır, pi sayısının ilk 100 ondalık basamağını içerir. Tebrikler, bilgisayar sizin için hesaplamayı yaptı.

Program daha fazla hane hesaplayabilir (şu anda 100 milyar hane ile sınırlıdır). Şimdi 10 milyon basamağı hesaplayalım ve ne kadar sürdüğünü ölçelim. Çıkışı bir dosyaya yönlendiriyoruz. Çünkü pi sayısının 10 milyon basamağı, komut satırı konsolunda görüntülemek için biraz uzun.

time ./pi 10000000 > pi10m.txt

Program aşağıdaki gibi bir çıktı verir:

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

Bu sefer rakamlar pi10m.txt dosyasına kaydedildiği için dahil edilmiyor. Son üç satırda, programın çalışması için ne kadar süre gerektiği ve ne kadar CPU kullandığı açıklanmaktadır.

  • gerçek: Başlangıçtan bitişe kadar geçen süre.Yukarıdaki örnekte, pi sayısının 10 milyon basamağının hesaplanması 9,7 saniye sürmüştür.
  • user: Ne kadar CPU süresi kullandığı. Makinede iki CPU çekirdeği olduğundan ve her çekirdek toplam süreye dahil edildiğinden bu süre "gerçek" süreden daha uzundur.
  • sys: İşletim sisteminin, programı çalıştırmak için ağ ve G/Ç gibi sistem görevlerini işlemesi gereken süre. Bu sefer yaklaşık 0,4 saniye sürdü.Bu süre, sonucu diske yazma süresidir.

pi10m.txt dosyasına göz atıp ilk ve son 100 basamağı görebiliriz.

İlk rakamları kontrol edelim. Bu komut, ilk 100 ondalık basamağı (ve ilk 3 ile ondalık işareti) verir.

head -c 102 pi10m.txt

Sonuç aşağıdaki gibi görünmelidir.

3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Aşağıdaki komut, son 100 ondalık basamağı verir.

tail -c 100 pi10m.txt

Sonuç aşağıdaki gibi görünmelidir.

610515549257985759204553246894468742702504639790565326553194060999469787333810631719481735348955897

8. Kümeyi temizleme

Compute Engine örneğinizi kapatmayı unutmayın. Aksi takdirde, örnek çalışmaya ve maliyet tahakkuk etmeye devam eder.

Sanal makinedeyseniz (SSH ile bağlıysanız) önce exit komutunu çalıştırarak çıkış yapın.

exit

Ardından, örneği ve ilişkili diskleri silmek için aşağıdaki gcloud compute instances delete komutunu çalıştırın. Kaynağın silinmesini onaylamanız istenir.

gcloud compute instances delete pi-codelab

9. Sırada ne var?

Tebrikler! Bu Compute Engine codelab'ini tamamladınız ve pi sayısının 10 milyon basamağını hesapladınız.

2022'de pi sayısının 100 trilyon basamağını hesaplamak için aynı altyapıyı kullandık. Nasıl bir performans sergilediğimizi görmek için duyuruyu okuyun. Sonuçların tamamına pi.delivery adlı demo sitemizden ulaşabilirsiniz.

Google Cloud Blog'da Compute ve Yüksek Performanslı Bilgi İşlem ile ilgili en son haberleri takip edin.

Diğer Compute Engine özellikleri

Compute Engine, zengin bir özellik setine sahiptir. Aşağıdaki konuları inceleyebilirsiniz :

Görüşlerinizi bizimle paylaşın

  • Lütfen birkaç dakikanızı ayırarak çok kısa anketimizi doldurun.