تشغيل نموذج توقع الطقس من WRF باستخدام أرقام سائلة' Slurm-GCP

1. مقدمة

الولايات المتحدة القاريّة

تاريخ آخر تعديل: 2021-05-05

ما ستقوم بإنشائه

في هذا الدرس التطبيقي حول الترميز، سيتم نشر مجموعة حوسبة عالية الأداء (HPC) قابلة للتوسّع تلقائيًا على Google Cloud باستخدام أداة جدولة مهام Syrm. ستستخدم نموذجًا لنشر Terraform الذي ينشر هذه المجموعة مع تثبيت WRF® عبر Spack. بعد ذلك، ستستخدم هذه البنية الأساسية لتنفيذ مقياس CONUS لمسافة 2.5 كيلومتر أو مقياس CONUS لمسافة 12 كيلومتر.

المعلومات التي ستتعلّمها

  • كيفية ضبط سياسات "إدارة الهوية والوصول" (IAM) لتشغيل مجموعة HPC على Google Cloud Platform
  • كيفية نشر مجموعة HPC مستندة إلى السحابة الإلكترونية باستخدام أداة جدولة مهام Syrm
  • كيفية تشغيل WRF® بالتوازي على Google Cloud باستخدام مهمة Syrm المجمّعة

المتطلبات

2. الإعداد

تفعيل واجهات Google Cloud API

لإنشاء واستخدام واجهات برمجة التطبيقات لموارد Google Cloud.

gcloud services enable compute.googleapis.com 

ضبط سياسات إدارة الهوية وإمكانية الوصول

في أجهزة HPC، هناك اختلافات واضحة بين مشرفي النظام ومستخدمي النظام. يكون لمشرفي النظام بشكل عام "الوصول إلى الجذر" ما يمكّنهم من إدارة موارد الحوسبة وتشغيلها. يكون مستخدمو النظام عمومًا باحثين وعلماء ومهندسي تطبيقات يحتاجون فقط إلى استخدام الموارد لتنفيذ المهام.

في Google Cloud، توفّر واجهة برمجة التطبيقات لتسجيل الدخول إلى نظام التشغيل معلومات مستخدم POSIX من حسابات Google Workspace وCloud Identity وGmail. بالإضافة إلى ذلك، يتكامل "تسجيل الدخول إلى نظام التشغيل" مع نظام إدارة الهوية وإمكانية الوصول (IAM) في Google Cloud Platform لتحديد ما إذا كان يجب السماح للمستخدمين بتصعيد الامتيازات على أنظمة Linux.

نفترض في هذا البرنامج التعليمي أنك تملأ مشرف النظام وتحتسب أدوار مشرف المحرّك. سنُعدّ سياسات "إدارة الهوية وإمكانية الوصول" لمنحك أذونات كافية لإنجاز المهام التالية

  • إنشاء/حذف مثيلات الأجهزة الافتراضية في Google Compute Engine (GCE)
  • بروتوكول النقل الآمن (SSH) في مثيلات الأجهزة الافتراضية في GCE

57883cb8acc09653.png

لمنح نفسك أدوار "إدارة الهوية وإمكانية الوصول" اللازمة لإكمال هذا الدليل التوجيهي، يُرجى اتّباع الخطوات التالية في Google Cloud Console:

  1. الانتقال إلى "إدارة الهوية وإمكانية الوصول" المشرف > "إدارة الهوية وإمكانية الوصول" في قائمة "المنتجات والخدمات".
  2. انقر على "+إضافة" بالقرب من أعلى الصفحة.
  3. اكتب حسابك على Google Workspace أو حساب Cloud Identity أو Gmail ضمن "الأعضاء الجدد".
  4. أضِف الأدوار التالية : مشرف Compute OS وتسجيل الدخول إلى Compute OS ومستخدم حساب الخدمة
  5. انقر على حفظ

لدى تسجيل الدخول الآن الأذونات المطلوبة لبدء إنشاء مجموعة HPC.

للتأكّد من تعيين الأدوار الصحيحة، يمكنك فتح Cloud Shell وتنفيذ الأمر التالي، مع استبدال YOUR_PROJECT وEMAIL_ADDRESS بمشروعك وعنوان بريدك الإلكتروني.

$ gcloud projects get-iam-policy YOUR_PROJECT --flatten="bindings[].members" --format='table(bindings.role)' --filter="bindings.members=user:EMAIL_ADDRESS"

سينتج عن هذا الأمر الناتج:

ROLE
roles/compute.osLogin
roles/iam.serviceAccountUser
roles/compute.admin

3- الحصة المنخفضة: نشر مجموعة HPC قابلة لتغيير الحجم تلقائيًا باستخدام Terraform

وفي هذا القسم، ستعمل على نشر مجموعة عالية الدقة تلقائيًا (HPC) تشمل وحدة جدولة مهام Syrm. يماثل هذا الخيار خيار "الحصة العالية"، باستثناء أنّ نوع الجهاز المستخدَم أصغر حجمًا وعدد وحدات المعالجة المركزية الافتراضية المستخدَمة أصغر.

  1. افتح Cloud Shell على Google Cloud Platform.
  2. استنساخ مستودع FluidNumerics/sclaimm-gcp
cd ~
git clone https://github.com/FluidNumerics/slurm-gcp.git
  1. التغيير إلى دليل WRF:
cd  ~/slurm-gcp/tf/examples/wrf
  1. إنشاء ومراجعة خطة التضاريس. اضبط متغيّرات البيئة WRF_NAME وWRF_PROJECT وWRF_ZONE لتحديد اسم مجموعتك ومشروعك على Google Cloud Platform والمنطقة التي تريد النشر فيها.
export WRF_PROJECT=<PROJECT ID>
export WRF_ZONE=<ZONE>
export WRF_NAME="wrf-small"
  1. يجب تشغيل الأمر init في المرة الأولى التي يتم فيها تشغيل التحويل الثلاثي:
terraform init
  1. أنشِئ الخطة باستخدام الأمر make الذي سيشغِّل terraform.
make plan
  1. انشر المجموعة. قد تستغرق عملية التثبيت والإعداد ما يصل إلى ساعتين. أثناء النشر، سيتم تثبيت WRF وجميع ملحقاته.
make apply
  1. بروتوكول النقل الآمن إلى عقدة تسجيل الدخول التي تم إنشاؤها في الخطوة السابقة. يمكنك الاطّلاع على هذه العقدة في الخطوة السابقة (ربما تُعرف باسم wrf-small-login0). يمكنك القيام بذلك عن طريق النقر على الزر SSH بجانب قائمة مثيلات الأجهزة الافتراضية في عنصر قائمة وحدة التحكم Compute Engine -> مثيل الجهاز الافتراضي (VM)

الخيار: سيحدّد هذا الزوج من أوامر gcloud اسم عقدة تسجيل الدخول وبروتوكول SSH بداخلها:

export CLUSTER_LOGIN_NODE=$(gcloud compute instances list --zones ${WRF_ZONE} --filter="name ~ .*login" --format="value(name)" | head -n1)

gcloud compute ssh ${CLUSTER_LOGIN_NODE} --zone ${WRF_ZONE}

  1. بعد الاتصال بعقدة تسجيل الدخول، للتحقق من إعداد المجموعة، تحقق من توفر الوحدة wrf.
$ module load gcc && module load openmpi && module avail
-------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/openmpi/4.0.5-eagetxh/gcc/9.2.0 --------------------------------------
   hdf5/1.10.7    netcdf-c/4.7.4    netcdf-fortran/4.5.3    parallel-netcdf/1.12.1    wrf/4.2

------------------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/gcc/9.2.0 -------------------------------------------------
   hwloc/2.2.0      libiconv/1.16          libpng/1.6.37     nasm/2.15.05            openmpi/4.0.5 (L,D)    time/1.9              zlib/1.2.11
   jasper/2.0.16    libjpeg-turbo/2.0.4    libtirpc/1.2.6    ncurses/5.9.20130511    perl/5.16.3            util-macros/1.19.1
   krb5/1.15.1      libpciaccess/0.16      libxml2/2.9.10    numactl/2.0.14          tcsh/6.22.02           xz/5.2.2

--------------------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/Core ----------------------------------------------------
   gcc/9.2.0 (L)

---------------------------------------------------------------------- /apps/modulefiles ----------------------------------------------------------------------
   openmpi/v4.1.x
  1. تأكَّد من أنّ /apps/share/conus-12km يتضمّن المحتوى المدرَج أدناه.
$  ls -1 /apps/share/conus-12km/
FILE:2018-06-17_00
FILE:2018-06-17_03
FILE:2018-06-17_06
FILE:2018-06-17_09
FILE:2018-06-17_12
geo_em.d01.nc
geogrid.log
met_em.d01.2018-06-17_00:00:00.nc
met_em.d01.2018-06-17_03:00:00.nc
met_em.d01.2018-06-17_06:00:00.nc
met_em.d01.2018-06-17_09:00:00.nc
met_em.d01.2018-06-17_12:00:00.nc
metgrid.log
namelist.input
namelist.wps
ungrib.log
wrfbdy_d01
wrfinput_d01

4. تشغيل مقياس أداء CONUS عن 12 كم

لتشغيل مقياس أداء CONUS من 12 كيلومتر، عليك إرسال مهمة Sclaimm مجمّعة. يتم تضمين منصات الإدخال الخاصة بمقياس الأداء هذا في صورة wrf-gcp VM ضِمن /apps/share/benchmarks/conus-12km.

في هذا القسم، يجب استخدام بروتوكول النقل الآمن (SSH) متّصل بعقدة تسجيل الدخول في المجموعة.

  1. نسخ مثال الملف المجمّع wrf-conus.sh من /apps/share
cp /apps/share/wrf-conus12.sh ~/
  1. افتح wrf-conus.sh في محرِّر نصوص للتأكّد من ضبط --partition و--ntasks بشكل صحيح. يجب تحديد عدد المهام على عدد ترتيبات MPI التي تريد استخدامها لبدء الوظيفة. في هذا العرض التوضيحي، يعادل عدد المهام عدد وحدات المعالجة المركزية الافتراضية المستخدمة في المهمة، ويجب ألا يتجاوز الحصة المتاحة.
#!/bin/bash
#SBATCH --partition=wrf
#SBATCH --ntasks=24
#SBATCH --ntasks-per-node=8
#SBATCH --mem-per-cpu=2g
#SBATCH --cpus-per-task=1
#SBATCH --account=default
#
# /////////////////////////////////////////////// #

WORK_PATH=${HOME}/wrf-benchmark/
SRUN_FLAGS="-n $SLURM_NTASKS --cpu-bind=threads"

. /apps/share/spack.sh
module load gcc/9.2.0
module load openmpi
module load hdf5 netcdf-c netcdf-fortran wrf

mkdir -p ${WORK_PATH}
cd ${WORK_PATH}
ln -s ${INSTALL_ROOT}/share/conus-12km/* .
ln -s $(spack location -i wrf)/run/* .

srun $MPI_FLAGS ./wrf.exe
  1. إرسال المهمة المجمّعة باستخدام الدفعة
sbatch wrf-conus12.sh
  1. انتظر حتى تكتمل المهمة. تم ضبط مقياس الأداء لتنفيذ توقعات على مدار 6 ساعات، ويستغرق إكمالها 24 ترتيبًا تقريبًا. يمكنك تتبُّع حالة مهمتك باستخدام "squeue".
  2. عند اكتمال المهمة، تحقق من محتوى rsl.out.0000 للتحقق من ظهور العبارة "wrf: Success COMPLETE WRF". ستكون اللاحقة الرقمية مختلفة إذا نفَّذت المهمة أكثر من مرة، على سبيل المثال، حدث خطأ في أحد إعدادات الضبط وكان عليك إعادة تشغيلها.
$ tail -n1 ${HOME}/wrf-benchmark/rsl.out.0000
d01 2018-06-17_06:00:00 wrf: SUCCESS COMPLETE WRF

5- حصة عالية: نشر مجموعة عالية الدقة تلقائيًا باستخدام Terraform

في هذا القسم، ستنشر مجموعة من أجهزة HPC قابلة للتوسّع تلقائيًا، بما في ذلك أداة جدولة مهام Syrm في Google Cloud Platform.

  1. افتح Cloud Shell على Google Cloud Platform.
  2. استنساخ مستودع FluidNumerics/sclaimm-gcp
cd ~
git clone https://github.com/FluidNumerics/slurm-gcp.git
  1. التغيير إلى دليل WRF:
cd  ~/slurm-gcp/tf/examples/wrf
  1. إنشاء ومراجعة خطة التضاريس. اضبط متغيّرات البيئة WRF_NAME وWRF_PROJECT وWRF_ZONE وWRF_MAX_NODE وWRF_MACHINE_TYPE لتحديد اسم مجموعتك ومشروعك على Google Cloud Platform والمنطقة التي تريد النشر فيها والحد الأقصى لعدد العُقد ونوع الجهاز. بالنسبة إلى مقياس أداء CONUS البالغ 2.5 كيلومتر، ننصح باستخدام مثيلات c2-standard-60 مع ما لا يقل عن 8 عُقد متوفرة في وظائف تشغيل مع ترتيب 480 MPI.
export WRF_PROJECT=<PROJECT ID>
export WRF_ZONE=<ZONE>
export WRF_NAME=wrf-large
export WRF_MAX_NODE=5
export WRF_MACHINE_TYPE="c2-standard-60"
  1. في حال عدم تنفيذ هذه الخطوة أعلاه، يجب تشغيل terraform init لبدء استخدام شكل Terraform:
terraform init
  1. قم بإنشاء الخطة باستخدام أمر make.
make plan
  1. انشر المجموعة. قد تستغرق عملية التثبيت والإعداد ما يصل إلى ساعتين. أثناء النشر، سيتم تثبيت WRF وجميع ملحقاته.
make apply
  1. بروتوكول النقل الآمن إلى عقدة تسجيل الدخول التي تم إنشاؤها في الخطوة السابقة. يمكنك الاطّلاع على هذه العقدة في الخطوة السابقة (ربما تُعرف باسم wrf-large-login0). يمكنك القيام بذلك عن طريق النقر على الزر SSH بجانب قائمة مثيلات الأجهزة الافتراضية في عنصر قائمة وحدة التحكم Compute Engine -> مثيل الجهاز الافتراضي (VM)

الخيار: سيحدّد هذا الزوج من أوامر gcloud اسم عقدة تسجيل الدخول وبروتوكول SSH بداخلها:

export CLUSTER_LOGIN_NODE=$(gcloud compute instances list --zones ${WRF_ZONE} --filter="name ~ .*login" --format="value(name)" | head -n1)

gcloud compute ssh ${CLUSTER_LOGIN_NODE} --zone ${WRF_ZONE}

من المفترض أن يؤدي الأمر الثاني إلى اتصالك بعقدة تسجيل الدخول إلى Sulum.

  1. بعد الاتصال بعقدة تسجيل الدخول، للتحقق من إعداد المجموعة، تحقق من توفر الوحدة wrf.
$ module load gcc && module load openmpi && module avail
-------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/openmpi/4.0.5-eagetxh/gcc/9.2.0 --------------------------------------
   hdf5/1.10.7    netcdf-c/4.7.4    netcdf-fortran/4.5.3    parallel-netcdf/1.12.1    wrf/4.2

------------------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/gcc/9.2.0 -------------------------------------------------
   hwloc/2.2.0      libiconv/1.16          libpng/1.6.37     nasm/2.15.05            openmpi/4.0.5 (L,D)    time/1.9              zlib/1.2.11
   jasper/2.0.16    libjpeg-turbo/2.0.4    libtirpc/1.2.6    ncurses/5.9.20130511    perl/5.16.3            util-macros/1.19.1
   krb5/1.15.1      libpciaccess/0.16      libxml2/2.9.10    numactl/2.0.14          tcsh/6.22.02           xz/5.2.2

--------------------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/Core ----------------------------------------------------
   gcc/9.2.0 (L)

---------------------------------------------------------------------- /apps/modulefiles ----------------------------------------------------------------------
   openmpi/v4.1.x
  1. تأكَّد من أنّ /apps/share/conus-2.5km يتضمّن المحتوى المدرَج أدناه.
$ ls -1 /apps/share/conus-2.5km
FILE:2018-06-17_00
FILE:2018-06-17_03
FILE:2018-06-17_06
FILE:2018-06-17_09
FILE:2018-06-17_12
geo_em.d01.nc
geogrid.log
gfs.0p25.2018061700.f000.grib2
gfs.0p25.2018061700.f003.grib2
gfs.0p25.2018061700.f006.grib2
gfs.0p25.2018061700.f009.grib2
gfs.0p25.2018061700.f012.grib2
met_em.d01.2018-06-17_00:00:00.nc
met_em.d01.2018-06-17_03:00:00.nc
met_em.d01.2018-06-17_06:00:00.nc
met_em.d01.2018-06-17_09:00:00.nc
met_em.d01.2018-06-17_12:00:00.nc
metgrid.log
namelist.input
namelist.wps
ungrib.log
wrfbdy_d01
wrfinput_d01

6- تشغيل معيار CONUS لمسافة 2.5 كم

لتشغيل مقياس أداء CONUS من 2.5 كم، سترسل مهمة Sclaimm مجمّعة. يتم تضمين منصات الإدخال الخاصة بمقياس الأداء هذا في صورة wrf-gcp VM ضِمن /apps/share/benchmarks/conus-2.5km.

في هذا القسم، يجب استخدام بروتوكول النقل الآمن (SSH) متّصل بعقدة تسجيل الدخول في المجموعة.

  1. نسخ مثال الملف المجمّع wrf-conus.sh من /apps/share
cp /apps/share/wrf-conus2p5.sh ~/
  1. افتح wrf-conus.sh في محرِّر نصوص للتأكّد من ضبط --partition و--ntasks بشكل صحيح. يجب ضبط القسم على c2-60. يجب تحديد عدد المهام على عدد ترتيبات MPI التي تريد استخدامها لبدء الوظيفة. في هذا العرض التوضيحي، يعادل عدد المهام عدد وحدات المعالجة المركزية الافتراضية المستخدمة في المهمة، ويجب ألا يتجاوز الحصة المتاحة.
#!/bin/bash
#SBATCH --partition=c2-60
#SBATCH --ntasks=480
#SBATCH --ntasks-per-node=60
#SBATCH --mem-per-cpu=2g
#SBATCH --cpus-per-task=1
#SBATCH --account=default
#
# /////////////////////////////////////////////// #

WORK_PATH=${HOME}/wrf-benchmark/
SRUN_FLAGS="-n $SLURM_NTASKS --cpu-bind=threads"

. /apps/share/spack.sh
module load gcc/9.2.0
module load openmpi
module load hdf5 netcdf-c netcdf-fortran wrf

mkdir -p ${WORK_PATH}
cd ${WORK_PATH}
ln -s ${INSTALL_ROOT}/share/conus-2.5km/* .
ln -s $(spack location -i wrf)/run/* .

srun $MPI_FLAGS ./wrf.exe
  1. إرسال المهمة المجمّعة باستخدام الدفعة
sbatch wrf-conus2p5.sh
  1. انتظر حتى تكتمل المهمة. تم ضبط مقياس الأداء لتنفيذ توقّعات على مدار 6 ساعات، ويستغرق اكتمالها 480 ترتيبًا في غضون ساعة واحدة تقريبًا. يمكنك تتبُّع حالة مهمتك باستخدام "squeue".
  2. عند اكتمال المهمة، تحقق من محتوى rsl.out.0000 للتحقق من ظهور العبارة "wrf: Success COMPLETE WRF". ستكون اللاحقة الرقمية مختلفة إذا نفَّذت المهمة أكثر من مرة، على سبيل المثال، حدث خطأ في أحد إعدادات الضبط وكان عليك إعادة تشغيلها.
$ tail -n1 ${HOME}/wrf-benchmark/rsl.out.0000
d01 2018-06-17_06:00:00 wrf: SUCCESS COMPLETE WRF

7. تهانينا

في هذا الدرس التطبيقي حول الترميز، أنشأت مجموعة من أجهزة HPC تستند إلى السحابة الإلكترونية للتحجيم التلقائي وأجريت محاكاة WRF® موازية على Google Cloud Platform.

التنظيف

لتجنُّب تحمُّل أي رسوم من حسابك على Google Cloud Platform مقابل الموارد المستخدَمة في هذا الدرس التطبيقي حول الترميز:

حذف المشروع

أسهل طريقة لإزالة الفوترة هي حذف المشروع الذي أنشأته للدرس التطبيقي حول الترميز.

تنبيه: يؤدي حذف المشروع إلى التأثيرات التالية:

  • تم حذف كل محتوى المشروع. إذا استخدمت مشروعًا حاليًا لهذا الدرس التطبيقي حول الترميز، سيتم أيضًا حذف أي عمل آخر أنجزته ضمن هذا المشروع.
  • يتم فقدان أرقام تعريف المشاريع المخصّصة. عندما أنشأت هذا المشروع، ربما تكون قد أنشأت رقم تعريف مشروع مخصّصًا تريد استخدامه في المستقبل. للاحتفاظ بعناوين URL التي تستخدم رقم تعريف المشروع، مثل عنوان URL لـ appspot.com، احذف الموارد المحدّدة داخل المشروع بدلاً من حذف المشروع بالكامل.

إذا كنت تخطط لاستكشاف العديد من الدروس التطبيقية حول الترميز وبدايات سريعة، يمكن أن تساعدك إعادة استخدام المشاريع في تجنُّب تجاوز حدود حصة المشروع.

  1. في Cloud Console، انتقِل إلى صفحة إدارة الموارد. الانتقال إلى صفحة "إدارة الموارد"
  2. في قائمة المشاريع، اختَر المشروع الذي تريد حذفه، ثم انقر على رمز حذف dc096e8341a05fec.png.
  3. في مربّع الحوار، اكتب رقم تعريف المشروع ثم انقر على إيقاف التشغيل لحذف المشروع.

حذف الموارد الفردية

  1. افتح Cloud Shell وانتقِل إلى دليل مثال wrf.
cd  ~/slurm-gcp/tf/examples/wrf
  1. قم بتشغيل الإتلاف لحذف جميع الموارد.
make destroy