حساب Pi على Compute Engine

1. مقدمة

شكرًا على فتح هذا الدرس التطبيقي حول الترميز. هل أنت على استعداد لتحليل بعض الأرقام في Compute Engine؟

في هذا الدرس التطبيقي حول الترميز، سنتعرف على طريقة بدء جهاز افتراضي جديد وتشغيل برنامج لحساب قيمة pi.

عليك بعد ذلك إنشاء مثيل في Compute Engine وتنزيل برنامج وتجميعه وتشغيله لحساب قيمة pi. يمكنك إنشاء مثيل في Compute Engine من وحدة التحكّم أو سطر الأوامر. سيرشدك هذا التمرين المعملي إلى كيفية استخدام أدوات سطر الأوامر.

ComputeEngine_128px.png

يوفر Compute Engine أجهزة افتراضية تعمل بأشكال مختلفة، مثل الأعداد المختلفة من النوى وحجم الذاكرة وسعة التخزين. يمكنك استخدام جهاز به أكثر من 100 نواة وعدة مئات من غيغابايت من الذاكرة إذا لزم الأمر، ولكن في هذا المثال، سنطلق في هذا المثال جهاز افتراضي ذاكرة افتراضية بسعة 8 غيغابايت ووحدة معالجة مركزية افتراضية ومحددتين مسبقًا.

سنستخدم سلسلة الأجهزة N2 في هذا الدرس التطبيقي حول الترميز. هي جهاز افتراضي لعائلة الأجهزة للأغراض العامة يستهدف معظم أعباء العمل العادية والمستنِدة إلى السحابة الإلكترونية. تتميز سلسلة N2 بأداء أعلى لكل سلسلة محادثات ومرونة كبيرة التي توفّرها مجموعة الأجهزة للأغراض العامة.

لِنَبْدَأِ الِاتِّصَالْ.

2. الإعداد والمتطلبات

إعداد بيئة ذاتية

  1. سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديله في أي وقت.
  • يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد تحديده). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الإشارة إلى رقم تعريف المشروع (يتم تحديده عادةً على أنّه PROJECT_ID). وإذا لم يعجبك المعرّف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. ويمكنك بدلاً من ذلك تجربة طلبك الخاص ومعرفة ما إذا كان متوفّرًا. ولا يمكن تغييره بعد هذه الخطوة وسيبقى طوال مدة المشروع.
  • لمعلوماتك، هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. لإيقاف تشغيل الموارد حتى لا تتحمل الفوترة بعد هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع بالكامل. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.

Google Cloud Shell

يمكن إدارة Google Cloud وCompute Engine عن بُعد من الكمبيوتر المحمول، إلا أننا سنستخدم في هذا الدرس التطبيقي Google Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.

هذا الجهاز الافتراضي المستند إلى نظام دبيان محمل بكل أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتم تشغيله في Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. وهذا يعني أنّ كل ما ستحتاجه في هذا الدرس التطبيقي حول الترميز هو متصفّح (نعم، يعمل على جهاز Chromebook).

  1. لتفعيل Cloud Shell من Cloud Console، ما عليك سوى النقر على تفعيل Cloud Shell b125d9eb26a46cc5.png (من المفترَض أن تستغرق عملية الإعداد والاتصال بالبيئة بضع دقائق فقط).

1067942a9a93f70.png

لقطة شاشة يوم 14-06-2017 في الساعة 10.13.43 مساءً.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. يمكنك أيضًا استخدام وحدة التحكم إذا كنت تفضل ذلك، ولكن من الأسهل تكرار سطر الأوامر وشرحه.

لنبدأ أولاً بإنشاء مثيل n2-standard-2 يُسمى pi-codelab باستخدام Debian 11 كنظام التشغيل. سنستخدم أيضًا القرص المتوازن (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، يُرجى الانتقال إلى الصفحة المرجعية.

4. SSH في المثيل

لإدخال بروتوكول النقل الآمن في المثيل من سطر الأوامر، شغِّل الأمر التالي.

gcloud compute ssh pi-codelab

هذا كل شيء! أنت الآن على الجهاز الافتراضي. يمكنك تأكيد مضيفك الحالي من خلال تنفيذ أمر اسم المضيف.

hostname

سيعرض الأمر اسم المضيف لبيئة الغلاف الحالية.

pi-codelab

5- تثبيت التبعيات

سنقوم الآن بتثبيت التبعيات اللازمة لتجميع البرنامج لحساب 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.

6- تجميع البرنامج

لنقم الآن بتجميع برنامج C++ لحساب pi. هذا أبسط مما يبدو حتى لو لم تكن قد أنشأت في 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

يستخدم برنامج 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 رقم عشري في pi. تهانينا، لقد استخدمت الكمبيوتر لإجراء العمليات الحسابية نيابة عنك!

يمكن أن يحسب البرنامج المزيد من الأرقام (الحد الأقصى حاليًا هو 100 مليار رقم). لنحسب الآن 10 ملايين رقم ونقيس المدة التي يستغرقها ذلك. نعيد توجيه الإخراج إلى ملف لأن 10 ملايين رقم من أرقام pi طويلة جدًا بحيث لا يمكن عرضها في وحدة التحكم في سطر الأوامر.

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. تصف الأسطر الثلاثة الأخيرة مقدار الوقت الذي استغرقه تشغيل البرنامج ومقدار استخدام وحدة المعالجة المركزية (CPU).

  • حقيقي: الوقت الفعلي من البداية إلى النهاية، مما يعني أن حساب 10 ملايين رقم من باي في المثال أعلاه استغرق 9.7 ثانية.
  • user: مقدار الوقت المُستغرَق في وحدة المعالجة المركزية (CPU)، وهو أكبر من "الحقيقي" لأنّ الآلة تحتوي على وحدة معالجة مركزية (CPU) واحدة وتحتسب كلّ وحدة نواة في العدد الإجمالي.
  • sys: الوقت الذي يحتاجه نظام التشغيل لتشغيل البرنامج لمعالجة مهام النظام مثل الشبكة و وحدات الإدخال والإخراج. هذه المرة استغرقت حوالي 0.4 ثانية، وهو ما يمثل في الغالب وقت كتابة النتيجة على القرص.

يمكننا إلقاء نظرة على ملف pi10m.txt ونطّلِع على أوّل 100 رقم وآخر 100 رقم لكل منهما.

لنتحقق من الأرقام الأولى. ينتج عن هذا الأمر أول 100 علامة عشرية (وأول 3 ونقطة عشرية).

head -c 102 pi10m.txt

من المفترض أن تظهر النتيجة على النحو التالي.

3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

ينتج عن الأمر التالي آخر 100 رقم عشري.

tail -c 100 pi10m.txt

من المفترض أن تظهر النتيجة على النحو التالي.

610515549257985759204553246894468742702504639790565326553194060999469787333810631719481735348955897

8. تنظيف المجموعة

لا تنسَ إيقاف مثيل Compute Engine، وإلّا فسيستمر تشغيل مثيل Compute Engine وسيراكم التكاليف.

إذا كنت تستخدم جهاز افتراضي (VM) (متصل عبر بروتوكول النقل الآمن (SSH)، سجِّل الخروج أولاً من خلال تنفيذ أمر exit أولاً.

exit

بعد ذلك، شغِّل الأمر gcloud compute instances delete التالي لحذف المثيل والأقراص المرتبطة به. سيُطلب منك تأكيد حذف المورد.

gcloud compute instances delete pi-codelab

9. ما هي الخطوات التالية؟

تهانينا، لقد أكملت هذا الدرس التطبيقي حول الترميز في Compute Engine وحساب 10 مليون رقم من أرقام باي.

لقد استخدمنا البنية الأساسية نفسها لحساب 100 تريليون رقم من أرقام pi في عام 2022. يمكنك قراءة الإشعار لمعرفة مستوى أدائنا. تتوفّر النتائج بالكامل على موقع pi.delivery التجريبي.

يمكنك الاطّلاع على آخر الأخبار حول الحوسبة والحوسبة العالية الأداء على مدوّنة Google Cloud.

المزيد من ميزات Compute Engine

يتضمّن Compute Engine مجموعة واسعة من الميزات. ننصحك بالتعرّف على المزيد من المعلومات التالية :

يُرجى إرسال ملاحظاتك إلينا

  • يُرجى تخصيص بعض الوقت لإكمال الاستطلاع القصير جدًا.