مدل پیش بینی آب و هوا WRF را با اعداد سیال اجرا کنید' Slurm-GCP

1. مقدمه

قاره آمریکا

آخرین به روز رسانی: 2021-05-05

آنچه را که خواهید ساخت

در این نرم‌افزار، شما می‌خواهید یک خوشه محاسباتی با عملکرد بالا (HPC) با مقیاس خودکار را با زمان‌بندی کار Slurm در Google Cloud استقرار دهید. شما از یک نمونه استقرار Terraform استفاده خواهید کرد که این خوشه را با WRF® نصب شده از طریق Spack اجرا می کند. سپس، از این زیرساخت برای اجرای معیار CONUS 2.5km یا معیار CONUS 12km استفاده خواهید کرد.

آنچه خواهید آموخت

  • نحوه پیکربندی خط‌مشی‌های مدیریت هویت و دسترسی (IAM) برای عملکرد یک خوشه HPC در Google Cloud Platform
  • نحوه استقرار یک خوشه HPC بومی ابری با زمانبندی کار Slurm
  • نحوه اجرای موازی WRF® در Google Cloud با استفاده از یک کار دسته‌ای Slurm

آنچه شما نیاز خواهید داشت

2. پیکربندی

Google Cloud API ها را فعال کنید

برای ایجاد و استفاده از منابع Google Cloud باید APIها فعال باشند.

gcloud services enable compute.googleapis.com 

سیاست های IAM را تنظیم کنید

در HPC، تمایزهای واضحی بین مدیران سیستم و کاربران سیستم وجود دارد. مدیران سیستم به طور کلی دارای "دسترسی ریشه" هستند که آنها را قادر می سازد منابع محاسباتی را مدیریت و اجرا کنند. کاربران سیستم عموماً محققین، دانشمندان و مهندسان برنامه کاربردی هستند که فقط باید از منابع برای اجرای کارها استفاده کنند.

در Google Cloud، OS Login API اطلاعات کاربر POSIX را از Google Workspace، Cloud Identity و حساب‌های Gmail ارائه می‌کند. علاوه بر این، OS Login با سیستم مدیریت هویت و دسترسی (IAM) GCP ادغام می‌شود تا مشخص کند آیا کاربران باید اجازه داشته باشند امتیازات را در سیستم‌های لینوکس افزایش دهند یا خیر.

در این آموزش، فرض می‌کنیم که شما نقش مدیر سیستم و مدیر موتور را محاسبه می‌کنید. ما خط‌مشی‌های IAM را به گونه‌ای پیکربندی می‌کنیم که به شما مجوزهای کافی برای انجام وظایف زیر بدهیم

  • ایجاد/حذف نمونه های ماشین محاسباتی گوگل (GCE).
  • SSH به نمونه های GCE VM

57883cb8acc09653.png

برای اینکه نقش های IAM لازم را برای تکمیل این آموزش به خود بدهید، در Google Cloud Console:

  1. در منوی محصولات و خدمات به IAM & Admin > IAM بروید.
  2. روی «+افزودن» نزدیک بالای صفحه کلیک کنید.
  3. حساب Google Workspace، حساب Cloud Identity یا حساب Gmail خود را در قسمت «اعضای جدید» وارد کنید.
  4. نقش های زیر را اضافه کنید: Compute Admin، Compute OS Login و Service Account User
  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 مقیاس‌پذیر خودکار شامل زمان‌بندی کار Slurm را مستقر خواهید کرد. این گزینه مشابه گزینه High Quota است، با این تفاوت که نوع ماشین مورد استفاده کوچکتر است و تعداد vCPU های استفاده شده کمتر است.

  1. Cloud Shell خود را در GCP باز کنید.
  2. مخزن FluidNumerics/slurm-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 را برای تعیین نام خوشه، پروژه GCP و منطقه ای که می خواهید در آن مستقر شوید، تنظیم کنید.
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. خوشه را مستقر کنید. مراحل نصب و راه اندازی می تواند تا 2 ساعت طول بکشد. در طول استقرار، WRF و تمام وابستگی های آن نصب می شود.
make apply
  1. SSH به گره ورود ایجاد شده در مرحله قبل. می توانید این گره را در مرحله قبل ببینید (احتمالاً wRF-small-login0 نامیده می شود) . می توانید این کار را با کلیک بر روی دکمه SSH در کنار لیست موارد VM در آیتم منوی کنسول Compute Engine -> VM instance انجام دهید.

گزینه: این جفت دستور 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 12km را اجرا کنید

برای اجرای معیار CONUS 12km، یک کار دسته‌ای Slurm ارسال می‌کنید. عرشه‌های ورودی این معیار در تصویر 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 که می‌خواهید برای راه‌اندازی کار استفاده کنید، تنظیم شود. برای این نمایش، تعداد کارها معادل تعداد vCPU های استفاده شده برای کار است و نباید از سهمیه موجود شما بیشتر شود.
#!/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 ساعته پیکربندی شده است که تکمیل آن با 24 رتبه حدود 3 ساعت طول می کشد. شما می توانید وضعیت کار خود را با 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. High Quota: یک خوشه HPC مقیاس پذیر خودکار را با Terraform مستقر کنید

در این بخش، یک خوشه HPC مقیاس‌پذیر خودکار شامل زمان‌بندی کار Slurm در GCP را مستقر خواهید کرد.

  1. Cloud Shell خود را در GCP باز کنید.
  2. مخزن FluidNumerics/slurm-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 را تنظیم کنید تا نام خوشه، پروژه 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. خوشه را مستقر کنید. مراحل نصب و راه اندازی می تواند تا 2 ساعت طول بکشد. در طول استقرار، WRF و تمام وابستگی های آن نصب می شود.
make apply
  1. SSH به گره ورود ایجاد شده در مرحله قبل. می توانید این گره را در مرحله قبل ببینید (احتمالاً wRF-large-login0 نامیده می شود) . شما می توانید این کار را با کلیک بر روی دکمه SSH در کنار لیست موارد VM در آیتم منوی کنسول Compute Engine -> VM instance انجام دهید.

گزینه: این جفت دستور 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}

فرمان دوم باید منجر به اتصال شما به گره Slurm Login شود.

  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 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 که می‌خواهید برای راه‌اندازی کار استفاده کنید، تنظیم شود. برای این نمایش، تعداد کارها معادل تعداد vCPU های استفاده شده برای کار است و نباید از سهمیه موجود شما بیشتر شود.
#!/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 رتبه حدود 1 ساعت طول می کشد. شما می توانید وضعیت کار خود را با 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 برای منابع استفاده شده در این کد لبه:

پروژه را حذف کنید

ساده ترین راه برای حذف صورتحساب، حذف پروژه ای است که برای Codelab ایجاد کرده اید.

احتیاط : حذف یک پروژه دارای اثرات زیر است:

  • همه چیز در پروژه حذف می شود. اگر از یک پروژه موجود برای این کد لبه استفاده کرده اید، وقتی آن را حذف می کنید، هر کار دیگری را که در پروژه انجام داده اید نیز حذف می کنید.
  • شناسه های پروژه سفارشی گم می شوند. وقتی این پروژه را ایجاد کردید، ممکن است یک ID پروژه سفارشی ایجاد کرده باشید که می خواهید در آینده از آن استفاده کنید. برای حفظ URL هایی که از شناسه پروژه استفاده می کنند، مانند URL appspot.com ، به جای حذف کل پروژه، منابع انتخابی داخل پروژه را حذف کنید.

اگر قصد کاوش چندین کد و شروع سریع را دارید، استفاده مجدد از پروژه‌ها می‌تواند به شما در جلوگیری از تجاوز از محدودیت‌های سهمیه پروژه کمک کند.

  1. در Cloud Console، به صفحه مدیریت منابع بروید. به صفحه مدیریت منابع بروید
  2. در لیست پروژه، پروژه ای را که می خواهید حذف کنید انتخاب کنید و سپس روی Delete کلیک کنید dc096e8341a05fec.png .
  3. در گفتگو، ID پروژه را تایپ کنید و سپس بر روی Shut down کلیک کنید تا پروژه حذف شود.

منابع فردی را حذف کنید

  1. پوسته ابری خود را باز کنید و به دایرکتوری نمونه wrf بروید
cd  ~/slurm-gcp/tf/examples/wrf
  1. برای حذف همه منابع، make kill را اجرا کنید.
make destroy