1. مقدمة
شكرًا على فتح هذا الدرس التطبيقي حول الترميز. هل أنت على استعداد لتحليل بعض الأرقام في Compute Engine؟
في هذا الدرس التطبيقي حول الترميز، سنتعرف على طريقة بدء جهاز افتراضي جديد وتشغيل برنامج لحساب قيمة pi.
عليك بعد ذلك إنشاء مثيل في Compute Engine وتنزيل برنامج وتجميعه وتشغيله لحساب قيمة pi. يمكنك إنشاء مثيل في Compute Engine من وحدة التحكّم أو سطر الأوامر. سيرشدك هذا التمرين المعملي إلى كيفية استخدام أدوات سطر الأوامر.
يوفر Compute Engine أجهزة افتراضية تعمل بأشكال مختلفة، مثل الأعداد المختلفة من النوى وحجم الذاكرة وسعة التخزين. يمكنك استخدام جهاز به أكثر من 100 نواة وعدة مئات من غيغابايت من الذاكرة إذا لزم الأمر، ولكن في هذا المثال، سنطلق في هذا المثال جهاز افتراضي ذاكرة افتراضية بسعة 8 غيغابايت ووحدة معالجة مركزية افتراضية ومحددتين مسبقًا.
سنستخدم سلسلة الأجهزة N2 في هذا الدرس التطبيقي حول الترميز. هي جهاز افتراضي لعائلة الأجهزة للأغراض العامة يستهدف معظم أعباء العمل العادية والمستنِدة إلى السحابة الإلكترونية. تتميز سلسلة N2 بأداء أعلى لكل سلسلة محادثات ومرونة كبيرة التي توفّرها مجموعة الأجهزة للأغراض العامة.
لِنَبْدَأِ الِاتِّصَالْ.
2. الإعداد والمتطلبات
إعداد بيئة ذاتية
- سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديله في أي وقت.
- يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد تحديده). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الإشارة إلى رقم تعريف المشروع (يتم تحديده عادةً على أنّه
PROJECT_ID
). وإذا لم يعجبك المعرّف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. ويمكنك بدلاً من ذلك تجربة طلبك الخاص ومعرفة ما إذا كان متوفّرًا. ولا يمكن تغييره بعد هذه الخطوة وسيبقى طوال مدة المشروع. - لمعلوماتك، هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. لإيقاف تشغيل الموارد حتى لا تتحمل الفوترة بعد هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع بالكامل. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.
Google Cloud Shell
يمكن إدارة Google Cloud وCompute Engine عن بُعد من الكمبيوتر المحمول، إلا أننا سنستخدم في هذا الدرس التطبيقي Google Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.
هذا الجهاز الافتراضي المستند إلى نظام دبيان محمل بكل أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتم تشغيله في Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. وهذا يعني أنّ كل ما ستحتاجه في هذا الدرس التطبيقي حول الترميز هو متصفّح (نعم، يعمل على جهاز Chromebook).
- لتفعيل Cloud Shell من Cloud Console، ما عليك سوى النقر على تفعيل Cloud Shell (من المفترَض أن تستغرق عملية الإعداد والاتصال بالبيئة بضع دقائق فقط).
بعد الربط بتطبيق 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:
تضبط Cloud Shell أيضًا بعض متغيرات البيئة تلقائيًا، وهو ما قد يكون مفيدًا عند تشغيل الأوامر المستقبلية.
echo $GOOGLE_CLOUD_PROJECT
مخرجات الأمر
<PROJECT_ID>
- أخيرًا، قم بتعيين تهيئة المنطقة الافتراضية والمشروع.
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 مجموعة واسعة من الميزات. ننصحك بالتعرّف على المزيد من المعلومات التالية :
- الأجهزة الافتراضية الاستباقية: https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- عُقد المستأجر الوحيد: https://cloud.google.com/compute/docs/nodes/create-nodes
- وحدات معالجة الرسومات وحدات معالجة الموتّرات: https://cloud.google.com/compute/docs/gpus/add-gpus
- الأجهزة الافتراضية لنظام التشغيل Windows: https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- تصنيف الموارد: https://cloud.google.com/compute/docs/labeling-resources
- نقل الأجهزة الافتراضية إلى Compute Engine - https://cloud.google.com/compute/docs/vm-migration/
يُرجى إرسال ملاحظاتك إلينا
- يُرجى تخصيص بعض الوقت لإكمال الاستطلاع القصير جدًا.