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

۱. مقدمه

قاره آمریکا

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

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

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

آنچه یاد خواهید گرفت

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

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

۲. پیکربندی

فعال کردن API های گوگل کلود

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

gcloud services enable compute.googleapis.com 

تنظیم سیاست‌های IAM

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

در گوگل کلود، رابط برنامه‌نویسی کاربردی ورود به سیستم عامل (OS Login API) اطلاعات کاربر POSIX را از حساب‌های کاربری گوگل ورک‌اسپیس، کلود آی‌تی و جی‌میل فراهم می‌کند. علاوه بر این، ورود به سیستم عامل با سیستم مدیریت هویت و دسترسی (IAM) گوگل کلود آی‌تی ادغام می‌شود تا مشخص شود که آیا کاربران باید اجازه افزایش امتیازات در سیستم‌های لینوکس را داشته باشند یا خیر.

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

  • ایجاد/حذف نمونه‌های ماشین مجازی Google Compute Engine (GCE)
  • اتصال SSH به نمونه‌های ماشین مجازی GCE

57883cb8acc09653.png

برای اینکه بتوانید نقش‌های IAM لازم برای تکمیل این آموزش را در کنسول ابری گوگل (Google Cloud Console) به خودتان بدهید:

  1. از منوی محصولات و خدمات، به بخش مدیریت و دسترسی > مدیریت دسترسی بروید.
  2. روی «+افزودن» در بالای صفحه کلیک کنید.
  3. حساب Google Workspace، حساب Cloud Identity یا حساب Gmail خود را در قسمت «اعضای جدید» وارد کنید.
  4. نقش‌های زیر را اضافه کنید: مدیر محاسبات، ورود به سیستم عامل محاسبات و کاربر حساب سرویس
  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

۳. سهمیه کم: یک خوشه 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. یک طرح terraform ایجاد و بررسی کنید. متغیرهای محیطی 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. کلاستر را مستقر کنید. فرآیند نصب و راه‌اندازی می‌تواند تا ۲ ساعت طول بکشد. در طول استقرار، WRF و تمام وابستگی‌های آن نصب خواهند شد.
make apply
  1. به گره ورود ایجاد شده در مرحله قبل از طریق SSH متصل شوید. می‌توانید این گره را در مرحله قبل مشاهده کنید (احتمالاً با نام wrf-small-login0 ) . می‌توانید این کار را با کلیک بر روی دکمه SSH در کنار لیست نمونه‌های ماشین مجازی در منوی کنسول، گزینه 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

۴. معیار ۱۲ کیلومتری CONUS را اجرا کنید

برای اجرای بنچمارک CONUS 12km، شما یک کار دسته‌ای Slurm ارسال خواهید کرد. عرشه‌های ورودی برای این بنچمارک در تصویر ماشین مجازی wrf-gcp در مسیر /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. منتظر بمانید تا کار تکمیل شود. این معیار برای اجرای پیش‌بینی ۶ ساعته پیکربندی شده است که حدود ۳ ساعت طول می‌کشد تا با ۲۴ رتبه تکمیل شود. می‌توانید وضعیت کار خود را با 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

۵. سهمیه بالا: یک خوشه 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. یک طرح terraform ایجاد و بررسی کنید. متغیرهای محیطی WRF_NAME ، WRF_PROJECT ، WRF_ZONE ، WRF_MAX_NODE و WRF_MACHINE_TYPE را برای مشخص کردن نام کلاستر، پروژه GCP، منطقه‌ای که می‌خواهید در آن مستقر شوید، حداکثر تعداد گره‌ها و نوع دستگاه تنظیم کنید. برای معیار CONUS 2.5km، توصیه می‌کنیم از نمونه‌های c2-standard-60 با حداقل 8 گره موجود استفاده کنید و کارها را با رتبه MPI 480 اجرا کنید.
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 -> 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 شود.

  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

۶. تست ۲.۵ کیلومتری CONUS را اجرا کنید

برای اجرای بنچمارک CONUS 2.5km، شما یک کار دسته‌ای Slurm ارسال خواهید کرد. عرشه‌های ورودی برای این بنچمارک در تصویر ماشین مجازی wrf-gcp در مسیر /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. منتظر بمانید تا کار تکمیل شود. این معیار برای اجرای پیش‌بینی ۶ ساعته پیکربندی شده است که حدود ۱ ساعت طول می‌کشد تا با ۴۸۰ رتبه تکمیل شود. می‌توانید وضعیت کار خود را با 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

۷. تبریک

در این آزمایشگاه کد، شما یک خوشه HPC با مقیاس‌پذیری خودکار و بومی ابر ایجاد کردید و یک شبیه‌سازی موازی WRF® را روی پلتفرم ابری گوگل اجرا کردید!

تمیز کردن

برای جلوگیری از تحمیل هزینه به حساب پلتفرم گوگل کلود خود برای منابع استفاده شده در این آزمایشگاه کد:

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

ساده‌ترین راه برای حذف هزینه‌ها، حذف پروژه‌ای است که برای codelab ایجاد کرده‌اید.

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

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

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

  1. در کنسول ابری، به صفحه مدیریت منابع بروید. به صفحه مدیریت منابع بروید
  2. در لیست پروژه‌ها، پروژه‌ای را که می‌خواهید حذف کنید انتخاب کنید و سپس روی «حذف» کلیک کنید. dc096e8341a05fec.png .
  3. در کادر محاوره‌ای، شناسه پروژه را تایپ کنید و سپس برای حذف پروژه، روی خاموش کردن کلیک کنید.

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

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