कंप्यूट इंजन पर पाई की गिनती करना

1. परिचय

इस कोडलैब को खोलने के लिए धन्यवाद! क्या आप Compute Engine पर कुछ नंबरों को प्रोसेस करने के लिए तैयार हैं?

इस कोडलैब में, हम नई वर्चुअल मशीन शुरू करने और पाई की वैल्यू का हिसाब लगाने के लिए प्रोग्राम चलाने का तरीका जानेंगे.

आपको Compute Engine इंस्टेंस बनाना होगा. साथ ही, पाई की वैल्यू का हिसाब लगाने के लिए, एक प्रोग्राम डाउनलोड, कंपाइल, और चलाना होगा. कंसोल या कमांड लाइन से Compute Engine इंस्टेंस बनाया जा सकता है. इस लैब में, कमांड लाइन टूल इस्तेमाल करने का तरीका बताया गया है.

ComputeEngine_128px.png

Compute Engine, अलग-अलग कॉन्फ़िगरेशन वाली वर्चुअल मशीनें उपलब्ध कराता है. जैसे, अलग-अलग कोर, मेमोरी साइज़, और स्टोरेज. ज़रूरत पड़ने पर, 100 से ज़्यादा कोर और कई सौ जीबी मेमोरी वाली मशीन का इस्तेमाल किया जा सकता है. हालांकि, इस उदाहरण में हम पहले से तय की गई 2 vCPU और 8 जीबी मेमोरी वाली वर्चुअल मशीन लॉन्च करेंगे.

इस कोडलैब में, हम N2 मशीन सीरीज़ का इस्तेमाल करेंगे. यह सामान्य कामों के लिए इस्तेमाल की जाने वाली मशीन फ़ैमिली का वीएम है. यह ज़्यादातर स्टैंडर्ड और क्लाउड-नेटिव वर्कलोड को टारगेट करता है. N2 सीरीज़ में, हर थ्रेड की परफ़ॉर्मेंस बेहतर होती है. साथ ही, इसमें सामान्य कामों के लिए इस्तेमाल की जाने वाली मशीन फ़ैमिली की सभी सुविधाएं मिलती हैं.

अब शुरू करते हैं!

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेट अप करना

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, यूनीक स्ट्रिंग अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता कि यह क्या है. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे PROJECT_ID के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास अपना नाम आज़माने का विकल्प भी है. इससे आपको पता चलेगा कि वह नाम उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट की अवधि तक बना रहेगा.
  • आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू भी होती है, जिसे प्रोजेक्ट नंबर कहते हैं. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
  1. इसके बाद, आपको Cloud Console में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, बनाए गए संसाधनों को बंद किया जा सकता है. इसके लिए, बनाए गए संसाधनों को मिटाएं या पूरे प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ताओं को, मुफ़्त में आज़माने के लिए 300 डॉलर का क्रेडिट मिलता है.

Google Cloud Shell

Google Cloud और Compute Engine को अपने लैपटॉप से रिमोटली ऐक्सेस किया जा सकता है. हालांकि, इस कोडलैब में हम Google Cloud Shell का इस्तेमाल करेंगे. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

यह Debian पर आधारित वर्चुअल मशीन है. इसमें डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud में चलता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इसका मतलब है कि इस कोडलैब के लिए, आपको सिर्फ़ एक ब्राउज़र की ज़रूरत होगी. हां, यह Chromebook पर भी काम करता है.

  1. Cloud Console से Cloud Shell चालू करने के लिए, बस Cloud Shell चालू करें b125d9eb26a46cc5.png पर क्लिक करें. इसे चालू होने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा.

1067942a9a93f70.png

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

Cloud Shell से कनेक्ट होने के बाद, आपको दिखेगा कि आपकी पुष्टि पहले ही हो चुकी है और प्रोजेक्ट पहले से ही आपके PROJECT_ID पर सेट है.

gcloud auth list

कमांड आउटपुट

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

कमांड आउटपुट

[core]
project = <PROJECT_ID>

अगर किसी वजह से प्रोजेक्ट सेट नहीं है, तो यह कमांड दें:

gcloud config set project <PROJECT_ID>

क्या आपको PROJECT_ID की तलाश है? देखें कि आपने सेटअप के दौरान किस आईडी का इस्तेमाल किया था या Cloud Console के डैशबोर्ड में जाकर इसे देखें:

cc3895eeac80db2c.png

Cloud Shell, कुछ एनवायरमेंट वैरिएबल को डिफ़ॉल्ट रूप से भी सेट करता है. ये वैरिएबल, आने वाले समय में कमांड चलाने के दौरान आपके काम आ सकते हैं.

echo $GOOGLE_CLOUD_PROJECT

कमांड आउटपुट

<PROJECT_ID>
  1. आखिर में, डिफ़ॉल्ट ज़ोन और प्रोजेक्ट कॉन्फ़िगरेशन सेट करें.
gcloud config set compute/zone us-central1-f

आपके पास अलग-अलग ज़ोन चुनने का विकल्प होता है. ज़्यादा जानकारी के लिए, रीजन और ज़ोन देखें.

3. Compute Engine इंस्टेंस बनाना

सबसे पहले, हम gcloud कमांड-लाइन टूल की मदद से एक वर्चुअल मशीन बनाएंगे. अगर आपको पसंद है, तो Console का भी इस्तेमाल किया जा सकता है. हालांकि, कमांड लाइन को दोहराना और समझाना आसान होता है.

सबसे पहले, pi-codelab नाम का n2-standard-2 इंस्टेंस बनाते हैं. इसमें Debian 11 को ऑपरेटिंग सिस्टम के तौर पर इस्तेमाल किया जाएगा. हम बूट वॉल्यूम के लिए, बैलेंस्ड परसिस्टेंट डिस्क (पीडी) का भी इस्तेमाल करेंगे. बैलेंस्ड पीडी, सॉलिड-स्टेट ड्राइव (एसएसडी) पर काम करते हैं. साथ ही, ये परफ़ॉर्मेंस और लागत के बीच संतुलन बनाए रखते हैं. अगर आपने सेटअप और ज़रूरी शर्तें सेक्शन में डिफ़ॉल्ट ज़ोन नहीं चुना है, तो यह आपसे पूछेगा कि किस ज़ोन का इस्तेमाल करना है.

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

कमांड का नतीजा कुछ ऐसा दिखना चाहिए:

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 और EXTERNAL_IP फ़ील्ड की वैल्यू बदल जाती है.

अगर आपको gcloud compute instances create कमांड के बारे में ज़्यादा जानना है, तो कृपया रेफ़रंस पेज पर जाएं.

4. इंस्टेंस में एसएसएच करना

कमांड लाइन से इंस्टेंस में SSH करने के लिए, यह कमांड चलाएं.

gcloud compute ssh pi-codelab

हो गया! अब आप वर्चुअल मशीन पर हैं. होस्टनेम कमांड चलाकर, अपने मौजूदा होस्ट की पुष्टि की जा सकती है.

hostname

इस कमांड से, मौजूदा शेल एनवायरमेंट का होस्टनेम दिखेगा.

pi-codelab

5. डिपेंडेंसी इंस्टॉल करना

अब हम पाई की वैल्यू का हिसाब लगाने के लिए, प्रोग्राम को कंपाइल करने के लिए ज़रूरी डिपेंडेंसी इंस्टॉल करेंगे.

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

इस प्रोसेस को पूरा होने में कुछ मिनट लगते हैं. अब देखते हैं कि आपके पास काम करने वाला C++ कंपाइलर है या नहीं.

c++ --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. प्रोग्राम कंपाइल करना

अब पाई का हिसाब लगाने के लिए, C++ प्रोग्राम को कंपाइल करते हैं. अगर आपने पहले कभी C++ में डेवलपमेंट नहीं किया है, तो भी यह उतना मुश्किल नहीं है जितना लगता है. पिछले चरण में सभी ज़रूरी शर्तें पूरी कर ली गई हैं. इसलिए, हमें सिर्फ़ सोर्स कोड को फ़ेच और कंपाइल करना है.

सबसे पहले, सोर्स कोड फ़ेच करें और उसे सेव करें. इस चरण में, GitHub से एक सोर्स फ़ाइल डाउनलोड की जाती है और उसे मौजूदा डायरेक्ट्री में pi.cc के तौर पर सेव किया जाता है.

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

इसके बाद, सेव किए गए सोर्स कोड को कंपाइल करने के लिए, C++ कंपाइलर चलाएं.

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

अगर कंपाइलर को कोई गड़बड़ी नहीं मिलती है, तो वह कोई आउटपुट नहीं देता. आइए, देखते हैं कि आपके पास एक्ज़ीक्यूटेबल फ़ाइल है या नहीं:

ls pi

अगर प्रोग्राम मौजूद है, तो ls कमांड से प्रोग्राम का फ़ाइल नाम आउटपुट होना चाहिए.

pi

7. पाई की वैल्यू का हिसाब लगाना

pi प्रोग्राम में एक आर्ग्युमेंट होता है. यह आर्ग्युमेंट, कैलकुलेट किए जाने वाले अंकों की संख्या होती है. उदाहरण के लिए, पाई के पहले 100 दशमलव की गिनती करते हैं.

./pi 100

यह प्रोग्राम एक सेकंड से भी कम समय में पूरा हो जाएगा और इसका आउटपुट कुछ ऐसा होगा:

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

आखिरी लाइन में, पाई के पहले 100 दशमलव दिए गए हैं. बधाई हो, आपने अभी-अभी कंप्यूटर से गणित के सवाल हल करवाए हैं!

यह प्रोग्राम, ज़्यादा अंकों की गिनती कर सकता है. फ़िलहाल, यह 100 अरब अंकों तक की गिनती कर सकता है. अब हम 1 करोड़ अंकों को कैलकुलेट करते हैं और देखते हैं कि इसमें कितना समय लगता है. हम आउटपुट को किसी फ़ाइल पर रीडायरेक्ट करते हैं, क्योंकि पाई के 1 करोड़ अंकों को कमांड लाइन कंसोल में देखना थोड़ा मुश्किल होता है.

time ./pi 10000000 > pi10m.txt

प्रोग्राम का आउटपुट कुछ इस तरह दिखता है:

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

इसमें इस बार अंक शामिल नहीं हैं, क्योंकि वे फ़ाइल pi10m.txt में सेव हैं. आखिरी तीन लाइनों में बताया गया है कि प्रोग्राम को चलने में कितना समय लगा और इसने कितना सीपीयू इस्तेमाल किया.

  • असली: शुरू से लेकर आखिर तक का असल समय. इसका मतलब है कि ऊपर दिए गए उदाहरण में, पाई के 1 करोड़ अंकों की गिनती करने में 9.7 सेकंड लगे.
  • उपयोगकर्ता: इसने सीपीयू का कितना समय इस्तेमाल किया. यह "असली" समय से ज़्यादा है, क्योंकि मशीन में दो सीपीयू कोर हैं और हर कोर को कुल समय में गिना जाता है.
  • sys: यह वह समय है जो ऑपरेटिंग सिस्टम को प्रोग्राम चलाने के लिए चाहिए होता है. इससे सिस्टम के टास्क प्रोसेस किए जाते हैं. जैसे, नेटवर्क और I/O. इस बार इसमें करीब 0.4 सेकंड लगे. इसमें से ज़्यादातर समय, नतीजे को डिस्क पर लिखने में लगा.

हम pi10m.txt फ़ाइल को देख सकते हैं. इसमें पहले और आखिरी 100 अंक दिखते हैं.

आइए, पहले अंकों की जांच करें. इस कमांड से, पहले 100 दशमलव (और पहले 3 और दशमलव) आउटपुट होते हैं.

head -c 102 pi10m.txt

नतीजा कुछ इस तरह दिखना चाहिए.

3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

अगली कमांड, आखिरी 100 दशमलव दिखाती है.

tail -c 100 pi10m.txt

नतीजा कुछ इस तरह दिखना चाहिए.

610515549257985759204553246894468742702504639790565326553194060999469787333810631719481735348955897

8. क्लस्टर को साफ़ करना

अपने Compute Engine इंस्टेंस को बंद करना न भूलें. ऐसा न करने पर, यह चलता रहेगा और इसकी लागत बढ़ती रहेगी.

अगर आप एसएसएच से कनेक्ट की गई वर्चुअल मशीन पर हैं, तो सबसे पहले exit कमांड चलाकर लॉग आउट करें.

exit

इसके बाद, इंस्टेंस और उससे जुड़े डिस्क को मिटाने के लिए, यह gcloud compute instances delete कमांड चलाएं. इसमें आपसे संसाधन को मिटाने की पुष्टि करने के लिए कहा जाएगा.

gcloud compute instances delete pi-codelab

9. आगे क्या करना है?

बधाई हो, आपने Compute Engine का यह कोडलैब पूरा कर लिया है. साथ ही, पाई के 1 करोड़ अंकों का हिसाब लगा लिया है!

हमने 2022 में पाई के 100 ट्रिलियन अंकों का हिसाब लगाने के लिए, इसी इन्फ़्रास्ट्रक्चर का इस्तेमाल किया था. हमने यह कैसे किया, यह जानने के लिए एलान पढ़ें. पूरे नतीजे हमारी डेमो साइट pi.delivery पर उपलब्ध हैं.

Google Cloud Blog पर, Compute और हाई परफ़ॉर्मेंस कंप्यूटिंग से जुड़ी ताज़ा खबरें पाएं!

Compute Engine की अन्य सुविधाएं

Compute Engine में कई तरह की सुविधाएं उपलब्ध हैं. इनके बारे में ज़्यादा जानें :

हमें सुझाव/राय दें या शिकायत करें

  • कृपया थोड़ा समय निकालकर, हमारे छोटे से सर्वे में हिस्सा लें