কম্পিউট ইঞ্জিনে পাই গণনা করুন

১. ভূমিকা

এই কোডল্যাবটি খোলার জন্য ধন্যবাদ! Compute Engine-এ কিছু সংখ্যা নিয়ে কাজ করার জন্য প্রস্তুত?

এই কোডল্যাবে আমরা দেখব কীভাবে একটি নতুন ভার্চুয়াল মেশিন চালু করতে হয় এবং পাই (π) গণনা করার জন্য একটি প্রোগ্রাম চালাতে হয়।

আপনি একটি Compute Engine ইনস্ট্যান্স তৈরি করবেন এবং পাই (π) গণনা করার জন্য একটি প্রোগ্রাম ডাউনলোড, কম্পাইল ও রান করবেন। আপনি কনসোল অথবা কমান্ড লাইন—উভয় জায়গা থেকেই একটি Compute Engine ইনস্ট্যান্স তৈরি করতে পারেন। এই ল্যাবে আপনাকে কমান্ড লাইন টুলগুলো ব্যবহারের পদ্ধতি ধাপে ধাপে দেখানো হবে।

ComputeEngine_128px.png

কম্পিউট ইঞ্জিন বিভিন্ন আকারের ভার্চুয়াল মেশিন সরবরাহ করে, যেমন বিভিন্ন সংখ্যক কোর, মেমরি সাইজ এবং স্টোরেজ। প্রয়োজনে আপনি ১০০টিরও বেশি কোর এবং কয়েকশ জিবি মেমরি সহ একটি মেশিন ব্যবহার করতে পারেন, কিন্তু এই উদাহরণে আমরা একটি পূর্বনির্ধারিত ২ vCPU, ৮ জিবি মেমরির ভার্চুয়াল মেশিন চালু করব।

এই কোডল্যাবে আমরা N2 মেশিন সিরিজ ব্যবহার করব। এটি একটি সাধারণ-উদ্দেশ্যমূলক মেশিন ফ্যামিলি ভিএম যা বেশিরভাগ স্ট্যান্ডার্ড এবং ক্লাউড-নেটিভ ওয়ার্কলোডের জন্য তৈরি। N2 সিরিজের প্রতি-থ্রেড পারফরম্যান্স বেশি এবং এতে সাধারণ-উদ্দেশ্যমূলক মেশিন ফ্যামিলির সমস্ত নমনীয়তা রয়েছে।

এবার শুরু করা যাক!

২. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিতে পরিবেশ সেটআপ

  1. Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে।
  • আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নাম্বার এবং কিছু এপিআই এটি ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
  1. এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর যাতে কোনো বিলিং না হয়, সেজন্য রিসোর্সগুলো বন্ধ করতে আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা পুরো প্রজেক্টটিই ডিলিট করে দিতে পারেন। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

গুগল ক্লাউড শেল

যদিও গুগল ক্লাউড এবং কম্পিউট ইঞ্জিন আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যায়, এই কোডল্যাবে আমরা গুগল ক্লাউড শেল ব্যবহার করব, যা ক্লাউডে চালিত একটি কমান্ড লাইন পরিবেশ।

এই ডেবিয়ান-ভিত্তিক ভার্চুয়াল মেশিনটিতে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এর মানে হলো, এই কোডল্যাবের জন্য আপনার শুধু একটি ব্রাউজার প্রয়োজন হবে (হ্যাঁ, এটি ক্রোমবুকেও কাজ করে)।

  1. ক্লাউড কনসোল থেকে ক্লাউড শেল সক্রিয় করতে, কেবল 'Activate Cloud Shell'-এ ক্লিক করুন। b125d9eb26a46cc5.png (পরিবেশের জন্য ব্যবস্থা করতে এবং সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগা উচিত)।

1067942a9a93f70.png

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

ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনি দেখতে পাবেন যে আপনাকে ইতিমধ্যেই প্রমাণীকৃত করা হয়েছে এবং প্রজেক্টটি আপনার 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 খুঁজছেন? সেটআপের ধাপগুলিতে আপনি কোন আইডি ব্যবহার করেছিলেন তা দেখে নিন অথবা ক্লাউড কনসোল ড্যাশবোর্ডে এটি খুঁজে দেখুন:

cc3895eeac80db2c.png

ক্লাউড শেল ডিফল্টরূপে কিছু এনভায়রনমেন্ট ভেরিয়েবলও সেট করে, যা ভবিষ্যতে কমান্ড চালানোর সময় কাজে লাগতে পারে।

echo $GOOGLE_CLOUD_PROJECT

কমান্ড আউটপুট

<PROJECT_ID>
  1. অবশেষে, ডিফল্ট জোন এবং প্রজেক্ট কনফিগারেশন সেট করুন।
gcloud config set compute/zone us-central1-f

আপনি বিভিন্ন ধরনের জোন বেছে নিতে পারেন। আরও তথ্যের জন্য, অঞ্চল ও জোন দেখুন।

৩. একটি কম্পিউট ইঞ্জিন ইনস্ট্যান্স তৈরি করুন

প্রথমে, আমরা gcloud কমান্ড-লাইন টুল ব্যবহার করে একটি ভার্চুয়াল মেশিন তৈরি করব। আপনি চাইলে কনসোলও ব্যবহার করতে পারেন, কিন্তু কমান্ড লাইন পদ্ধতিটি পুনরাবৃত্তি করা এবং ব্যাখ্যা করা সহজ।

চলুন প্রথমে ডেবিয়ান ১১ অপারেটিং সিস্টেম সহ pi-codelab নামের একটি n2-standard-2 ইনস্ট্যান্স তৈরি করি। আমরা বুট ভলিউমের জন্য ব্যালেন্সড পারসিস্টেন্ট ডিস্ক (PD) ব্যবহার করব। ব্যালেন্সড পিডি সলিড-স্টেট ড্রাইভ (SSD) দ্বারা সমর্থিত এবং এটি পারফরম্যান্স ও খরচের মধ্যে ভারসাম্য রক্ষা করে। আপনি যদি সেটআপ এবং রিকোয়ারমেন্টস বিভাগে ডিফল্ট জোন নির্বাচন না করে থাকেন, তবে এটি কোন জোন ব্যবহার করতে হবে তা জিজ্ঞাসা করবে।

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 কমান্ড সম্পর্কে আরও জানতে চান, তাহলে অনুগ্রহ করে রেফারেন্স পৃষ্ঠাটি দেখুন।

৪. ইনস্ট্যান্সটিতে SSH করুন

কমান্ড লাইন থেকে ইনস্ট্যান্সটিতে SSH করার জন্য, নিম্নলিখিত কমান্ডটি চালান।

gcloud compute ssh pi-codelab

ব্যাস! এখন আপনি ভার্চুয়াল মেশিনে আছেন। hostname কমান্ডটি চালিয়ে আপনি আপনার বর্তমান হোস্ট নিশ্চিত করতে পারেন।

hostname

এই কমান্ডটি বর্তমান শেল এনভায়রনমেন্টের হোস্টনেম প্রদর্শন করবে।

pi-codelab

৫. নির্ভরতা ইনস্টল করুন

এখন আমরা পাই (pi) গণনা করার প্রোগ্রামটি কম্পাইল করার জন্য প্রয়োজনীয় ডিপেন্ডেন্সিগুলো ইনস্টল করব।

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.

৬. প্রোগ্রামটি কম্পাইল করুন

এখন পাই (π) গণনা করার জন্য C++ প্রোগ্রামটি কম্পাইল করা যাক। আপনি আগে C++ এ কাজ না করলেও, এই কাজটি শুনতে যতটা কঠিন মনে হয়, তার চেয়ে অনেক সহজ। আগের ধাপে সমস্ত পূর্বশর্ত ইনস্টল করা হয়েছে, তাই আমাদের শুধু সোর্স কোডটি ফেচ করে কম্পাইল করতে হবে।

প্রথমে, সোর্স কোডটি ফেচ করে সেভ করুন। এই ধাপে গিটহাব থেকে একটি সোর্স ফাইল ডাউনলোড হয়ে বর্তমান ডিরেক্টরিতে 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

৭. পাই (Pi) গণনা করুন।

pi প্রোগ্রামটি একটি আর্গুমেন্ট গ্রহণ করে, যা হলো গণনা করার জন্য অঙ্কের সংখ্যা। উদাহরণস্বরূপ, চলুন পাই-এর প্রথম ১০০ দশমিক স্থান গণনা করি।

./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

শেষ লাইনটি হলো পাই (π)-এর প্রথম ১০০ দশমিক স্থান পর্যন্ত মান। অভিনন্দন, আপনি এইমাত্র কম্পিউটারকে দিয়ে আপনার হয়ে হিসাবটি করিয়ে নিলেন!

প্রোগ্রামটি আরও বেশি অঙ্ক গণনা করতে পারে (বর্তমানে সর্বোচ্চ ১০০ বিলিয়ন অঙ্ক পর্যন্ত)। এখন চলুন ১০ মিলিয়ন অঙ্ক গণনা করে দেখি এতে কত সময় লাগে। আমরা আউটপুটটি একটি ফাইলে পাঠিয়ে দিচ্ছি, কারণ পাই-এর ১০ মিলিয়ন অঙ্ক কমান্ড লাইন কনসোলে দেখার জন্য বেশ দীর্ঘ।

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 ফাইলে সংরক্ষিত আছে। শেষ তিনটি লাইনে বর্ণনা করা হয়েছে প্রোগ্রামটি চলতে কত সময় লেগেছে এবং কী পরিমাণ সিপিইউ ব্যবহার করেছে।

  • প্রকৃত: শুরু থেকে শেষ পর্যন্ত আসল সময়, যার মানে উপরের উদাহরণে পাই-এর ১০ মিলিয়ন অঙ্ক গণনা করতে ৯.৭ সেকেন্ড সময় লেগেছে।
  • ব্যবহারকারী: এটি যে পরিমাণ সিপিইউ সময় ব্যবহার করেছে, যা 'প্রকৃত' সময়ের চেয়ে বেশি, কারণ মেশিনটিতে দুটি সিপিইউ কোর রয়েছে এবং প্রতিটি কোরই মোট সময়ের হিসাবে গণনা করা হয়।
  • sys: নেটওয়ার্ক এবং I/O-এর মতো সিস্টেম টাস্কগুলো প্রসেস করার জন্য প্রোগ্রামটি চালাতে অপারেটিং সিস্টেমের যে সময় লেগেছে। এক্ষেত্রে প্রায় ০.৪ সেকেন্ড সময় লেগেছে, যার বেশিরভাগই ডিস্কে ফলাফলটি লেখার সময়।

আমরা pi10m.txt ফাইলটি দেখে প্রতিটির প্রথম ও শেষ ১০০টি অঙ্ক দেখতে পারি।

চলুন প্রথম অঙ্কগুলো পরীক্ষা করে দেখি। এই কমান্ডটি প্রথম ১০০ দশমিক স্থান (এবং প্রথম ৩ ও দশমিক বিন্দু) আউটপুট হিসেবে দেয়।

head -c 102 pi10m.txt

ফলাফলটি দেখতে এইরকম হওয়া উচিত।

3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

পরবর্তী কমান্ডটি শেষ ১০০ দশমিক স্থান আউটপুট করে।

tail -c 100 pi10m.txt

ফলাফলটি দেখতে এইরকম হওয়া উচিত।

610515549257985759204553246894468742702504639790565326553194060999469787333810631719481735348955897

৮. ক্লাস্টারটি পরিষ্কার করুন

আপনার Compute Engine ইনস্ট্যান্সটি বন্ধ করতে ভুলবেন না, অন্যথায় এটি চলতে থাকবে এবং খরচ জমা করতে থাকবে।

আপনি যদি ভিএম-এ (SSH দিয়ে সংযুক্ত) থাকেন, তাহলে প্রথমে exit কমান্ডটি চালিয়ে লগ আউট করুন।

exit

এরপর, ইনস্ট্যান্স এবং এর সাথে যুক্ত ডিস্কগুলো মুছে ফেলার জন্য নিম্নলিখিত gcloud compute instances delete কমান্ডটি চালান। এটি আপনাকে রিসোর্সটি মুছে ফেলার বিষয়টি নিশ্চিত করতে বলবে।

gcloud compute instances delete pi-codelab

৯. এরপর কী?

অভিনন্দন, আপনি এই কম্পিউট ইঞ্জিন কোডল্যাবটি সম্পন্ন করেছেন এবং পাই-এর ১০ মিলিয়ন অঙ্ক গণনা করেছেন!

আমরা ২০২২ সালে পাই-এর ১০০ ট্রিলিয়ন অঙ্ক গণনা করতে একই পরিকাঠামো ব্যবহার করেছি। আমরা কেমন করেছি তা জানতে ঘোষণাটি পড়ুন। সম্পূর্ণ ফলাফল আমাদের pi.delivery ডেমো সাইটে পাওয়া যাচ্ছে।

গুগল ক্লাউড ব্লগে কম্পিউট এবং হাই পারফরম্যান্স কম্পিউটিং সম্পর্কিত সর্বশেষ খবরের সাথে আপ-টু-ডেট থাকুন!

কম্পিউট ইঞ্জিনের আরও বৈশিষ্ট্য

কম্পিউট ইঞ্জিনে রয়েছে প্রচুর বৈশিষ্ট্য। আপনি এর মধ্যে কয়েকটি বিস্তারিতভাবে দেখতে পারেন:

আপনার মতামত দিন

  • অনুগ্রহ করে একটু সময় নিয়ে আমাদের এই সংক্ষিপ্ত সমীক্ষাটি পূরণ করুন।