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

1. परिचय

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

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

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

ComputeEngine_128px.png

Compute Engine, अलग-अलग आकार में चलने वाली वर्चुअल मशीनें देता है. जैसे, कोर की अलग-अलग संख्या, मेमोरी का साइज़, और स्टोरेज. अगर ज़रूरी हो, तो 100 कोर से ज़्यादा और कई सैकड़ों जीबी मेमोरी वाली मशीन का इस्तेमाल किया जा सकता है. हालांकि, इस उदाहरण में हम पहले से तय दो 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 में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, संसाधनों को बंद करने के लिए कि आपको बिलिंग न करनी पड़े. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या पूरा प्रोजेक्ट मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.

Google Cloud शेल

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

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

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

1067942a9a93f70.png

14-06-2017 को 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 कमांड-लाइन टूल की मदद से एक वर्चुअल मशीन बनाएंगे. अगर आप चाहें, तो कंसोल का भी इस्तेमाल किया जा सकता है. हालांकि, कमांड लाइन को दोहराना और समझना आसान है.

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

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. इंस्टेंस में एसएसएच

कमांड लाइन से इंस्टेंस में एसएसएच करने के लिए, नीचे दिया गया कमांड चलाएं.

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

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

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 करोड़ अंक बहुत लंबे होते हैं.

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 फ़ाइल में सेव किया गया है. आखिरी तीन लाइनों से पता चलता है कि प्रोग्राम को चलने में कितना समय लगा और कितने सीपीयू का इस्तेमाल हुआ.

  • वास्तविक: शुरू से अंत तक का वास्तविक समय, जिसका मतलब है कि ऊपर दिए गए उदाहरण में पाई के 10 मिलियन अंकों की गणना करने में 9.7 सेकंड लगे.
  • user: इसने कितने सीपीयू समय का इस्तेमाल किया, जो "असल" से ज़्यादा है क्योंकि मशीन में दो सीपीयू कोर होते हैं और हर एक कोर को कुल में गिना जाता है.
  • 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

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

gcloud compute instances delete pi-codelab

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

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

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

Google Cloud के ब्लॉग पर, कंप्यूट और हाई परफ़ॉर्मेंस कंप्यूटिंग की ताज़ा खबरों के बारे में अप-टू-डेट रहें!

Compute Engine की ज़्यादा सुविधाएं

Compute Engine में कई सुविधाएं मौजूद हैं. हो सकता है कि आप इनमें से कुछ के बारे में ज़्यादा जानना चाहें :

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

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