1. مقدمة
تاريخ آخر تعديل: 2022-04-25
ما ستنشئه
في هذا الدرس التطبيقي حول الترميز، ستنشر مجموعة حوسبة عالية الأداء (HPC) ذات تدرّج تلقائي على Google Cloud.ينشئ نشر Terraform هذه المجموعة مع تثبيت Gromacs من خلال Spack. ستتم إدارة المجموعة باستخدام أداة جدولة المهام Slurm. بعد إنشاء المجموعة، ستنفّذ مقاييس الأداء benchMEM أو benchPEP أو benchRIB.
ما ستتعلمه
- كيفية نشر مجموعة حوسبة عالية الأداء (HPC) متوافقة مع أداة جدولة المهام Slurm
- كيفية تشغيل عمليات محاكاة ديناميكية جزيئية مُسرَّعة باستخدام وحدة معالجة الرسومات مع Gromacs على Google Cloud باستخدام مهمة دفعية في Slurm
المتطلبات
2. الإعداد
لإكمال هذا الدرس التطبيقي حول الترميز، عليك تفعيل واجهتَي Compute Engine وCloud Build API. لتفعيل واجهات برمجة التطبيقات Compute Engine وCloud Build، افتح Cloud Shell ونفِّذ الأوامر التالية. تذكَّر استبدال project-id بـ أدناه.
gcloud config set project <PROJECT_ID> gcloud services enable compute.googleapis.com gcloud services enable cloudbuild.googleapis.com
تنبيه: إذا كنت تخطّط لاستخدام SSH تابع لجهة خارجية (مثل OpenSSH) للاتصال بمجموعتك، احرص على ربط مفتاح SSH بملف تعريف هوية السحابة الإلكترونية باستخدام ميزة "تسجيل الدخول في نظام التشغيل". مزيد من المعلومات عن إضافة مفاتيح SSH إلى ملف تعريف هوية السحابة الإلكترونية
3. [اختياري] إنشاء صورة جهاز افتراضي على Google Cloud Platform باستخدام Gromacs
في هذا الدرس التطبيقي حول الترميز، وفّرنا لك صورة مُنشأة مسبقًا، لأنّ عملية التصميم قد تستغرق ما يصل إلى ساعتين لتثبيت Gromacs وجميع الاعتماديات. إذا أردت استخدام هذه الصورة المُنشأة مسبقًا لتوفير بعض الوقت، يمكنك الانتقال إلى القسم التالي.
عند تشغيل تطبيقات الأبحاث على Google Cloud، تتوفّر العديد من الخيارات لتثبيت تطبيقك ونشره. في هذا القسم من الدرس التطبيقي حول الترميز، ستنشئ صورة جهاز افتراضي تستند إلى صورة الجهاز الافتراضي slurm-gcp (CentOS7). أثناء عملية الإنشاء، سيتم تثبيت المترجم وجميع التبعيات الخاصة بـ Gromacs وGromacs.
يحتوي مسار إنشاء Gromacs Cloud في مستودع تطبيقات RCC على التعليمات اللازمة لتثبيت Gromacs. تستخدم عملية التثبيت Packer لنشر جهاز افتراضي يثبّت Spack، والذي بدوره يثبّت برنامج التجميع GCC@9.2.0 وGromacs@2021.2 مع تفعيل تسريع وحدة معالجة الرسومات.
- افتح Cloud Shell على Google Cloud Platform.
- إنشاء نسخة طبق الأصل من مستودع FluidNumerics/rcc-apps
cd ~ git clone https://github.com/FluidNumerics/rcc-apps.git
- أنشئ الصورة باستخدام Google Cloud Build.
cd rcc-apps gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async
يمكنك الاطّلاع على حالة عملية الإنشاء في لوحة بيانات Google Cloud Build.
قد تستغرق عملية التصميم مدة تصل إلى ساعتين. لتسريع هذه العملية، يمكنك تعديل مخطط ملف إعدادات التصميم لتغيير نوع الجهاز من أجل تحسين أداء الإصدار. يمكن إجراء ذلك باستخدام متغير الإنشاء _MACHINE_TYPE. على سبيل المثال:
gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async --substitutions=_MACHINE_TYPE=n2-standard-64
بعد انتهاء عملية الإنشاء، سيتوفّر لديك صورة جهاز افتراضي في مشروعك على Google Cloud يمكنك استخدامها لنشر مجموعتك.
4. نشر مجموعة حوسبة عالية الأداء (HPC) قابلة للتوسّع تلقائيًا باستخدام Terraform
في هذا القسم، ستستخدم Terraform لنشر مجموعة حوسبة عالية الأداء (HPC) ذات تدرّج تلقائي، مع تثبيت أداة جدولة المهام Slurm. سيتم نشر هذه المجموعة مع عُقد حسابية تحتوي كل منها على 8 وحدات معالجة مركزية افتراضية ووحدة معالجة رسومات Nvidia® Tesla V100 واحدة.
- افتح Cloud Shell على Google Cloud Platform.
- إنشاء نسخة طبق الأصل من مستودع FluidNumerics/rcc-apps
cd ~ git clone https://github.com/FluidNumerics/rcc-apps.git
- انتقِل إلى دليل gromacs terraform:
cd ~/rcc-apps/gromacs/tf/slurm
- إنشاء خطة Terraform ومراجعتها اضبط متغيرات البيئة
GMX_NAMEوGMX_PROJECTوGMX_ZONEلتحديد اسم مجموعتك ومشروعك على Google Cloud Platform والمنطقة التي تريد النشر فيها. يُرجى مراجعة الملاحظة أدناه إذا لم تكن متأكدًا
export GMX_PROJECT=<PROJECT_ID> export GMX_ZONE=<ZONE> export GMX_NAME="gromacs"
- إذا أنشأت صورة الجهاز الافتراضي في القسم السابق من هذا الدرس العملي، عليك أيضًا ضبط متغيّر بيئة GMX_IMAGE
export GMX_IMAGE="projects/${GMX_PROJECT}/global/images/gromacs-gcp-foss-latest"
- أنشئ الخطة باستخدام الأمر make، الذي سيشغّل
terraform init && terraform plan.
make plan
- تفعيل المجموعة لا تستغرق عملية الإعداد سوى بضع دقائق لأنّ Gromacs والبرامج التابعة له مثبّتة مسبقًا على مجموعتك.
make apply
- استخدِم SSH للوصول إلى عقدة تسجيل الدخول التي تم إنشاؤها في الخطوة السابقة. يمكنك الاطّلاع على هذه العُقدة في الخطوة السابقة (من المحتمل أن يكون اسمها gromacs-login0). يمكنك إجراء ذلك من خلال النقر على زر SSH بجانب قائمة "مثيلات الأجهزة الافتراضية" في عنصر قائمة وحدة التحكّم Compute Engine -> مثيل الجهاز الافتراضي.
الخيار: سيحدّد زوج أوامر gcloud هذا اسم عقدة تسجيل الدخول ويدخل إلى الشبكة الخاصة الافتراضية من خلالها:
export CLUSTER_LOGIN_NODE=$(gcloud compute instances list --zones ${GMX_ZONE} --filter="name ~ .*login" --format="value(name)" | head -n1)
gcloud compute ssh ${CLUSTER_LOGIN_NODE} --zone ${GMX_ZONE}
- بعد الاتصال بعقدة تسجيل الدخول، للتحقّق من إعداد مجموعتك، تأكَّد من تثبيت Gromacs.
$ spack find gromacs ==> In environment /apps/spack-pkg-env ==> Root specs gromacs@2021.2 +cuda~mpi ==> 1 installed package -- linux-centos7-x86_64 / gcc@9.2.0 ----------------------------- gromacs@2021.2
- تأكَّد من أنّ
/opt/share/gromacsيتضمّن المحتوى المدرَج أدناه.
$ ls /opt/share/gromacs/ benchMEM.tpr benchPEP-h.tpr benchPEP.tpr benchRIB.tpr
5. تشغيل أداة قياس الأداء benchRIB
Gromacs هو برنامج بحثي يُستخدَم لمحاكاة ديناميكية الجزيئات وحساب البُنى الجزيئية ضمن قيود تقليل الطاقة. تركز مقاييس الأداء المتوفّرة في صورة الجهاز الافتراضي لهذا الدرس التطبيقي حول الترميز على ديناميكية الجزيئات، أي تطور أنظمة الذرات.
في ديناميكا الجزيئات، تتم محاكاة مواضع الذرات وسرعاتها وتسارعها باستخدام قوانين الحركة الخاصة بـ "نيوتن":

حيث
هو موضع الذرة i، وt هو الوقت، و
هي كتلة الذرة i، و
هي القوة غير المرتبطة بالذرة i بسبب الذرة j، و
هي القوى الناتجة عن التفاعلات المرتبطة. وبالنظر إلى درجة الحرارة والضغط ومواضع الذرات وسرعاتها، يتم احتساب القوى ودمج النظام عدديًا للحصول على سرعات ومواضع جديدة للذرات. يتم تكرار هذه العملية لمحاكاة ديناميكية الجزيئات لفترة زمنية محددة.
تتضمّن صورة Gromacs (إما الصورة التي أنشأتها أو الصورة المقدَّمة) ثلاثة مقاييس أداء
- benchMEM
- benchRIB
- benchPEP
تستند هذه المقاييس إلى مجموعة مقاييس الأداء المجانية من Gromacs التي أعدّها الدكتور Kutzner ، وهي مجموعة عادية من عمليات محاكاة ديناميكية جزيئية عابرة. يختلف كل معيار في عدد الذرات ومدة المحاكاة. يتم عرض الإعدادات ذات الصلة لكل محاكاة في الجدول أدناه.
المقياس / مقياس الأداء | benchMEM | benchRIB | benchPEP |
عدد الذرات | 81,743 | 2,136,412 | 12,495,503 |
حجم النظام / نانومتر | 10.8 × 10.2 × 9.6 | 31.2 × 31.2 × 31.2 | 50.0 × 50.0 × 50.0 |
الخطوة الزمنية / fs | 2 | 4 | 2 |
نصف قطر القطع / نانومتر | 1 | 1 | 1.2 |
تباعد شبكة PME / نانومتر | 0.12 | 0.135 | 0.16 |
لتشغيل مقياس الأداء، عليك إرسال مهمة مجمّعة في Slurm. تلقائيًا، ينفّذ نص البرنامج المجمّع المقدَّم معيار benchRIB. يتم تضمين حِزم الإدخال التي تحدّد إعدادات مقاييس الأداء المتوفّرة في صورة الجهاز الافتراضي Gromacs ضمن /opt/share/gromacs. بالإضافة إلى ذلك، يتوفّر مثال على نص برمجي bash لتشغيل Gromacs ضمن /opt/share.
بالنسبة إلى هذا القسم، يجب استخدام SSH للوصول إلى عقدة تسجيل الدخول في المجموعة
- إرسال مهمة مجمّعة باستخدام الأمر sbatch
$ sbatch --ntasks=1 --cpus-per-task=8 --gres=gpu:1 --out=gromacs.out /opt/share/gromacs_bench.sh
سيؤدي ذلك إلى وضع المهمة في قائمة الانتظار لتنفيذها، وستوفّر لك Slurm عقدة حوسبة. عند تشغيل sinfo، ستلاحظ أنّ عقدة الحوسبة في الحالة alloc#، ما يعني أنّه تم تخصيص عقدة الحوسبة لمهمتك، ولكنّها في طور التوفير. بعد بدء تشغيل مهمتك، سيتم ضبط العُقدة على الحالة alloc.
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
gromacs* up infinite 1 alloc# gromacs-compute-0-0
$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
2 gromacs gromacs_ joe R 0:02 1 gromacs-compute-0-0
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
gromacs* up infinite 1 alloc gromacs-compute-0-0
انتظِر إلى أن تكتمل المهمة. يحاكي معيار الأداء التلقائي (benchRIB) حوالي 8 ملايين ذرة، وتم إعداده لتنفيذ 5000 خطوة زمنية (مع 4 خطوات زمنية/fs) ويستغرق حوالي 6 دقائق لإكماله. يمكنك مراقبة حالة مهمتك باستخدام الأمر التالي:
watch squeue
عندما تتم إزالة مهمتك من قائمة الانتظار، يمكنك الخروج باستخدام ctrl-C.
- عند اكتمال المهمة، سيظهر لك دليل باسم
run/يحتوي على نتائج المحاكاة (ضمنrun/MEM) وملف سجلّ في الدليل الحالي باسمgromacs.out. يحتوي الدليلrun/MEMعلى الملفَّينener.edrوmd.log. يخزّن ملفener.edrطاقات النظام ودرجة الحرارة والضغط وحجم الصندوق والكثافة والكميات الفيروسية بتنسيق ثنائي قابل للنقل. كما يوحي الاسم، يحتوي ملفmd.logعلى سجلّات لمحاكاة Gromacs ويتضمّن معلومات حول أداء المحاكاة بالإضافة إلى معلومات التسجيل من أدوات حلّ الجسيمات والجسيمات وPME. يجب أن تبدو محتويات الملف gromacs.out التي تتضمّن الناتج العادي منgmx mdrunمشابهة لما هو معروض أدناه.
$ tail -n9 gromacs.out
step 5000, remaining wall clock time: 0 s
Core t (s) Wall t (s) (%)
Time: 3085.342 385.683 800.0
(ns/day) (hour/ns)
Performance: 4.481 5.356
GROMACS reminds you: "I never thought of stopping, and I just hated sleeping. I can't imagine having a better life." (Barbara McClintock)
OK
6. تهانينا
في هذا الدرس التطبيقي حول الترميز، أنشأت مجموعة حوسبة عالية الأداء (HPC) أصلية على السحابة الإلكترونية وقابلة للتدرّج تلقائيًا، وشغّلت محاكاة ديناميكية جزيئية مُسرَّعة باستخدام وحدة معالجة رسومات (GPU) مع Gromacs على Google Cloud.
تنظيف
لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا الدرس العملي:
إجراء يُنصح به: حذف مجموعة الحوسبة عالية الأداء باستخدام Terraform
- افتح Cloud Shell وانتقِل إلى دليل المثال
gromacs/tf/slurm
cd ~/rcc-apps/gromacs/tf/slurm
- نفِّذ الأمر make destroy لحذف جميع الموارد.
make destroy
أو، احذف المشروع (هذه الطريقة هي الأكثر فعالية وتدميرًا)
أسهل طريقة لإيقاف الفوترة هي حذف المشروع الذي أنشأته من أجل درس تطبيقي حول الترميز.
تنبيه: يؤدي حذف مشروع إلى ما يلي:
- يتم حذف كل المحتوى في المشروع. إذا كنت قد استخدمت مشروعًا حاليًا في هذا الدرس العملي، سيؤدي حذفه إلى حذف أي عمل آخر أجريته في المشروع.
- فقدان أرقام تعريف المشاريع المخصّصة: عند إنشاء هذا المشروع، ربما أنشأت معرّف مشروع مخصّصًا تريد استخدامه في المستقبل. للحفاظ على عناوين URL التي تستخدم رقم تعريف المشروع، مثل عنوان URL appspot.com، احذف الموارد المحدّدة داخل المشروع بدلاً من حذف المشروع بأكمله.
إذا كنت تخطّط لاستكشاف العديد من الدروس التطبيقية حول الترميز والبدايات السريعة، يمكن أن يساعدك إعادة استخدام المشاريع في تجنُّب تجاوز حدود حصص المشاريع.
- في Cloud Console، انتقِل إلى صفحة إدارة الموارد. الانتقال إلى صفحة "إدارة الموارد"
- في قائمة المشاريع، اختَر المشروع الذي تريد حذفه، ثم انقر على حذف
. - في مربّع الحوار، اكتب رقم تعريف المشروع، ثم انقر على إيقاف لحذف المشروع.