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

1. مقدمة

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

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

ما ستنشئه

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

ما ستتعلمه

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

المتطلبات

2. التهيئة

تفعيل واجهات برمجة التطبيقات في Google Cloud

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

gcloud services enable compute.googleapis.com 

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

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

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

في هذا البرنامج التعليمي، نفترض أنّك ستتولّى دورَي مشرف النظام ومشرف Compute Engine. سنضبط سياسات "إدارة الهوية وإمكانية الوصول" (IAM) لمنحك الأذونات الكافية لإنجاز المهام التالية

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

57883cb8acc09653.png

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

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

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

للتأكّد من أنّك قد خصّصت الأدوار الصحيحة، افتح 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) بتدرّج تلقائي تتضمّن أداة جدولة المهام Slurm. هذا الخيار مطابق لخيار "الحصة العالية"، باستثناء أنّ نوع الجهاز المستخدَم أصغر وعدد وحدات المعالجة المركزية الافتراضية المستخدَمة أقل.

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

الخيار: سيحدّد زوج أوامر gcloud هذا اسم عقدة تسجيل الدخول ويدخل إلى الشبكة الخاصة الافتراضية من خلالها:

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 12km

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

بالنسبة إلى هذا القسم، يجب أن تكون متصلاً عبر بروتوكول النقل الآمن بعقدة تسجيل الدخول في المجموعة

  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.
sbatch wrf-conus12.sh
  1. انتظِر إلى أن تكتمل المهمة. تم ضبط مقياس الأداء هذا على عرض توقّعات لمدة 6 ساعات، ويستغرق إكماله حوالي 3 ساعات مع 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- حصة عالية: نشر مجموعة حوسبة عالية الأداء (HPC) بتدرّج تلقائي باستخدام Terraform

في هذا القسم، ستنشئ مجموعة حوسبة عالية الأداء (HPC) بتدرّج تلقائي، بما في ذلك أداة جدولة مهام Slurm في Google Cloud Platform.

  1. افتح Cloud Shell على Google Cloud Platform.
  2. استنساخ مستودع FluidNumerics/slurm-gcp
cd ~
git clone https://github.com/FluidNumerics/slurm-gcp.git
  1. انتقِل إلى دليل WRF:
cd  ~/slurm-gcp/tf/examples/wrf
  1. إنشاء خطة Terraform ومراجعتها اضبط متغيّرات البيئة WRF_NAME وWRF_PROJECT وWRF_ZONE وWRF_MAX_NODE وWRF_MACHINE_TYPE لتحديد اسم مجموعتك ومشروعك على GCP والمنطقة التي تريد نشر التطبيق فيها والحد الأقصى لعدد العُقد ونوع الجهاز. بالنسبة إلى مقياس الأداء CONUS 2.5km، ننصح باستخدام مثيلات 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. استخدِم بروتوكول SSH للوصول إلى عقدة تسجيل الدخول التي تم إنشاؤها في الخطوة السابقة. يمكنك الاطّلاع على هذه العُقدة في الخطوة السابقة (من المحتمل أن يكون اسمها wrf-large-login0). يمكنك إجراء ذلك من خلال النقر على زر بروتوكول النقل الآمن (SSH) بجانب قائمة مثيلات الأجهزة الافتراضية في عنصر في القائمة لوحدة التحكّم Compute Engine -> مثيل الجهاز الافتراضي.

الخيار: سيحدّد زوج أوامر gcloud هذا اسم عقدة تسجيل الدخول ويدخل إلى الشبكة الخاصة الافتراضية من خلالها:

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}

يجب أن يؤدي الأمر الثاني إلى ربطك بعقدة تسجيل الدخول إلى Slurm.

  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.5km

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

بالنسبة إلى هذا القسم، يجب أن تكون متصلاً عبر بروتوكول النقل الآمن بعقدة تسجيل الدخول في المجموعة

  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.
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 لحذف جميع الموارد.
make destroy