۱. مقدمه

آخرین بهروزرسانی: 2021-05-05
آنچه خواهید ساخت
در این آزمایشگاه کد، شما قصد دارید یک کلاستر محاسبات با کارایی بالا (HPC) با قابلیت مقیاسپذیری خودکار را با استفاده از زمانبند کار Slurm روی Google Cloud مستقر کنید. شما از یک نمونه استقرار Terraform استفاده خواهید کرد که این کلاستر را با WRF® نصب شده از طریق Spack مستقر میکند. سپس، از این زیرساخت برای اجرای معیار CONUS 2.5km یا معیار CONUS 12km استفاده خواهید کرد.
آنچه یاد خواهید گرفت
- نحوه پیکربندی سیاستهای مدیریت هویت و دسترسی (IAM) برای بهرهبرداری از یک خوشه HPC در پلتفرم ابری گوگل
- نحوه استقرار یک خوشه HPC بومی ابری با استفاده از زمانبند کار Slurm
- نحوه اجرای WRF® به صورت موازی در Google Cloud با استفاده از یک کار دستهای Slurm
آنچه شما نیاز خواهید داشت
- حساب Gmail با کلید SSH متصل ، یا Google Workspace ، Cloud Identity
- پروژه پلتفرم ابری گوگل با قابلیت پرداخت صورتحساب
- نقش صاحب پروژه در پروژه GCP شما
- سهمیه کافی موتور محاسباتی (۴۸۰ پردازنده مجازی c2 و ۵۰۰ گیگابایت دیسک PD-Standard)
۲. پیکربندی
فعال کردن API های گوگل کلود
برای ایجاد و استفاده از منابع Google Cloud، APIها باید فعال باشند.
gcloud services enable compute.googleapis.com
تنظیم سیاستهای IAM
در HPC، تمایزات واضحی بین مدیران سیستم و کاربران سیستم وجود دارد. مدیران سیستم عموماً "دسترسی ریشه" دارند که آنها را قادر میسازد منابع محاسباتی را مدیریت و اداره کنند. کاربران سیستم عموماً محققان، دانشمندان و مهندسان برنامههای کاربردی هستند که فقط برای اجرای کارها به منابع نیاز دارند.
در گوگل کلود، رابط برنامهنویسی کاربردی ورود به سیستم عامل (OS Login API) اطلاعات کاربر POSIX را از حسابهای کاربری گوگل ورکاسپیس، کلود آیتی و جیمیل فراهم میکند. علاوه بر این، ورود به سیستم عامل با سیستم مدیریت هویت و دسترسی (IAM) گوگل کلود آیتی ادغام میشود تا مشخص شود که آیا کاربران باید اجازه افزایش امتیازات در سیستمهای لینوکس را داشته باشند یا خیر.
در این آموزش، فرض میکنیم که شما نقشهای مدیر سیستم و مدیر موتور محاسباتی را بر عهده دارید. ما سیاستهای IAM را پیکربندی خواهیم کرد تا مجوزهای کافی برای انجام وظایف زیر را به شما بدهیم.
- ایجاد/حذف نمونههای ماشین مجازی Google Compute Engine (GCE)
- اتصال SSH به نمونههای ماشین مجازی GCE

برای اینکه بتوانید نقشهای IAM لازم برای تکمیل این آموزش را در کنسول ابری گوگل (Google Cloud Console) به خودتان بدهید:
- از منوی محصولات و خدمات، به بخش مدیریت و دسترسی > مدیریت دسترسی بروید.
- روی «+افزودن» در بالای صفحه کلیک کنید.
- حساب Google Workspace، حساب Cloud Identity یا حساب Gmail خود را در قسمت «اعضای جدید» وارد کنید.
- نقشهای زیر را اضافه کنید: مدیر محاسبات، ورود به سیستم عامل محاسبات و کاربر حساب سرویس
- روی ذخیره کلیک کنید
اکنون حساب کاربری شما مجوزهای لازم برای شروع ایجاد خوشه 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 های مورد استفاده کمتر است.
- Cloud Shell خود را در GCP باز کنید.
- مخزن FluidNumerics/slurm-gcp را کلون کنید
cd ~ git clone https://github.com/FluidNumerics/slurm-gcp.git
- به دایرکتوری WRF بروید:
cd ~/slurm-gcp/tf/examples/wrf
- یک طرح terraform ایجاد و بررسی کنید. متغیرهای محیطی
WRF_NAME،WRF_PROJECTوWRF_ZONEرا برای مشخص کردن نام کلاستر، پروژه GCP و منطقهای که میخواهید در آن مستقر شوید، تنظیم کنید.
export WRF_PROJECT=<PROJECT ID> export WRF_ZONE=<ZONE> export WRF_NAME="wrf-small"
- اولین باری که terraform را اجرا میکنید، باید دستور
initرا اجرا کنید:
terraform init
- طرح را با دستور make ایجاد کنید، که
terraformاجرا خواهد کرد.
make plan
- کلاستر را مستقر کنید. فرآیند نصب و راهاندازی میتواند تا ۲ ساعت طول بکشد. در طول استقرار، WRF و تمام وابستگیهای آن نصب خواهند شد.
make apply
- به گره ورود ایجاد شده در مرحله قبل از طریق 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}
- پس از اتصال به گره ورود، برای تأیید تنظیمات کلاستر خود، بررسی کنید که ماژول 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
- تأیید کنید که
/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 به گره ورود به کلاستر متصل باشید.
- فایل دستهای wrf-conus.sh نمونه را از /apps/share کپی کنید.
cp /apps/share/wrf-conus12.sh ~/
- فایل 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
- کار دستهای را با استفاده از sbatch ارسال کنید.
sbatch wrf-conus12.sh
- منتظر بمانید تا کار تکمیل شود. این معیار برای اجرای پیشبینی ۶ ساعته پیکربندی شده است که حدود ۳ ساعت طول میکشد تا با ۲۴ رتبه تکمیل شود. میتوانید وضعیت کار خود را با
squeueنظارت کنید. - وقتی کار تمام شد، محتویات 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 مستقر خواهید کرد.
- Cloud Shell خود را در GCP باز کنید.
- مخزن FluidNumerics/slurm-gcp را کلون کنید
cd ~ git clone https://github.com/FluidNumerics/slurm-gcp.git
- به دایرکتوری WRF بروید:
cd ~/slurm-gcp/tf/examples/wrf
- یک طرح 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"
- اگر این کار را در بالا انجام ندادید، باید
terraform initبرای راهاندازی terraform اجرا کنید:
terraform init
- طرح را با دستور make ایجاد کنید.
make plan
- کلاستر را مستقر کنید. فرآیند نصب و راهاندازی میتواند تا ۲ ساعت طول بکشد. در طول استقرار، WRF و تمام وابستگیهای آن نصب خواهند شد.
make apply
- به گره ورود ایجاد شده در مرحله قبل از طریق 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 شود.
- پس از اتصال به گره ورود، برای تأیید تنظیمات کلاستر خود، بررسی کنید که ماژول 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
- تأیید کنید که
/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 به گره ورود به کلاستر متصل باشید.
- فایل دستهای wrf-conus.sh نمونه را از /apps/share کپی کنید.
cp /apps/share/wrf-conus2p5.sh ~/
- فایل 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
- کار دستهای را با استفاده از sbatch ارسال کنید.
sbatch wrf-conus2p5.sh
- منتظر بمانید تا کار تکمیل شود. این معیار برای اجرای پیشبینی ۶ ساعته پیکربندی شده است که حدود ۱ ساعت طول میکشد تا با ۴۸۰ رتبه تکمیل شود. میتوانید وضعیت کار خود را با
squeueنظارت کنید. - وقتی کار تمام شد، محتویات 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 ، به جای حذف کل پروژه، منابع انتخاب شده را در داخل پروژه حذف کنید.
اگر قصد دارید چندین آزمایشگاه کد و شروع سریع را بررسی کنید، استفاده مجدد از پروژهها میتواند به شما کمک کند از محدودیتهای سهمیه پروژه فراتر نروید.
- در کنسول ابری، به صفحه مدیریت منابع بروید. به صفحه مدیریت منابع بروید
- در لیست پروژهها، پروژهای را که میخواهید حذف کنید انتخاب کنید و سپس روی «حذف» کلیک کنید.
. - در کادر محاورهای، شناسه پروژه را تایپ کنید و سپس برای حذف پروژه، روی خاموش کردن کلیک کنید.
منابع فردی را حذف کنید
- پوسته ابری خود را باز کنید و به دایرکتوری wrf example بروید.
cd ~/slurm-gcp/tf/examples/wrf
- برای حذف تمام منابع، دستور make destroy را اجرا کنید.
make destroy