Запустите модель прогнозирования погоды WRF с помощью Fluid Numerics' Слерм-GCP

1. Введение

Континентальная часть США

Последнее обновление: 05.05.2021

Что вы построите

В этом практическом задании вы развернете кластер высокопроизводительных вычислений (HPC) с автоматическим масштабированием в Google Cloud с помощью планировщика заданий Slurm. Вы будете использовать пример развертывания Terraform, который развертывает этот кластер с установленным WRF® через Spack . Затем вы используете эту инфраструктуру для запуска бенчмарка CONUS 2.5km или CONUS 12km .

Что вы узнаете

  • How to configure Identity and Access Management (IAM) policies for operating an HPC cluster on Google Cloud Platform
  • How to deploy a cloud-native HPC cluster with the Slurm job scheduler
  • How to run WRF® in parallel on Google Cloud using a Slurm batch job

Что вам понадобится

2. Конфигурация

Включите API Google Cloud

To create and use Google Cloud resources APIs must be enabled.

gcloud services enable compute.googleapis.com 

Настройка политик IAM

В высокопроизводительных вычислениях (HPC) существует четкое различие между системными администраторами и системными пользователями. Системные администраторы, как правило, имеют «права root», позволяющие им управлять вычислительными ресурсами и эксплуатировать их. Системными пользователями обычно являются исследователи, ученые и инженеры-разработчики приложений, которым необходимо использовать ресурсы только для выполнения задач.

В Google Cloud API OS Login предоставляет информацию о пользователях в соответствии со стандартом POSIX из учетных записей Google Workspace, Cloud Identity и Gmail. Кроме того, OS Login интегрируется с системой управления идентификацией и доступом (IAM) GCP для определения того, следует ли разрешать пользователям повышать свои привилегии в системах Linux.

В этом руководстве предполагается, что вы выполняете роли системного администратора и администратора Compute Engine. Мы настроим политики IAM, чтобы предоставить вам достаточные разрешения для выполнения следующих задач.

  • Create/Delete Google Compute Engine (GCE) VM instances
  • Подключение по SSH к экземплярам виртуальных машин GCE.

57883cb8acc09653.png

To give yourself the necessary IAM roles to complete this tutorial, in the Google Cloud Console:

  1. Navigate to IAM & Admin > IAM in the Products and Services menu.
  2. Нажмите кнопку "+Добавить" в верхней части страницы.
  3. Type in your Google Workspace account, Cloud Identity Account, or Gmail account under "New members"
  4. Add the following roles : Compute Admin, Compute OS Login, and Service Account User
  5. Нажмите «Сохранить».

Your login now has the permissions required to initiate the creation of the HPC cluster.

To verify you have assigned the correct roles, open your Cloud Shell , and run the following command, replacing YOUR_PROJECT and EMAIL_ADDRESS with your project and 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. Low Quota: Deploy an auto-scaling HPC cluster with Terraform

В этом разделе вы развернете кластер высокопроизводительных вычислений с автоматическим масштабированием, включающий планировщик заданий Slurm. Это идентично варианту с высокой квотой, за исключением того, что используется машина меньшего типа и меньшее количество виртуальных ЦП.

  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. The first time you run terraform you must run the init command:
terraform init
  1. Create the plan with the make command, which will run terraform
make plan
  1. Deploy the cluster. The installation and setup process can take up to 2 hours. During the deployment, WRF and all of its dependencies will be installed.
make apply
  1. Подключитесь по SSH к узлу авторизации , созданному на предыдущем шаге. Вы можете увидеть этот узел на предыдущем шаге (вероятно, он называется wrf-small-login0 ) . Это можно сделать, нажав кнопку SSH рядом со списком экземпляров виртуальных машин в меню консоли: Compute Engine -> Экземпляр виртуальной машины.

Option: This pair of gcloud commands will figure out the login node name and SSH into it:

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. Once you are connected to the login node, to verify your cluster setup, check that the wrf module is available.
$ 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. Verify that /apps/share/conus-12km has the contents listed below.
$  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. Пробегите контрольную дистанцию ​​в 12 км по территории континентальной части США.

To run the CONUS 12km benchmark, you will submit a Slurm batch job . The input decks for this benchmark are included in the wrf-gcp VM image under /apps/share/benchmarks/conus-12km.

For this section, you must be SSH connected to the login node of the cluster

  1. Copy the example wrf-conus.sh batch file from /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. Wait for the job to complete. This benchmark is configured to run a 6-hour forecast, which takes about 3 hours to complete with 24 ranks. You can monitor the status of your job with 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: Deploy an auto-scaling HPC cluster with Terraform

In this section, you will deploy an auto-scaling HPC cluster including the Slurm job scheduler in 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 доступными узлами для запуска заданий с 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. If you did not do it above, you must run terraform init to start up terraform:
terraform init
  1. Создайте план с помощью команды make.
make plan
  1. Deploy the cluster. The installation and setup process can take up to 2 hours. During the deployment, WRF and all of its dependencies will be installed.
make apply
  1. Подключитесь по SSH к узлу входа , созданному на предыдущем шаге. Вы можете увидеть этот узел на предыдущем шаге (вероятно, он называется wrf-large-login0 ) . Это можно сделать, нажав кнопку SSH рядом со списком экземпляров виртуальных машин в меню консоли: Compute Engine -> Экземпляр виртуальной машины.

Option: This pair of gcloud commands will figure out the login node name and SSH into it:

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}

The second command should result in you being connected to the Slurm Login node.

  1. Once you are connected to the login node, to verify your cluster setup, check that the wrf module is available.
$ 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. Verify that /apps/share/conus-2.5km has the contents listed below.
$ 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. Пробегите контрольную дистанцию ​​в 2,5 км по территории континентальной части США.

To run the CONUS 2.5km benchmark, you will submit a Slurm batch job . The input decks for this benchmark are included in the wrf-gcp VM image under /apps/share/benchmarks/conus-2.5km.

For this section, you must be SSH connected to the login node of the cluster

  1. Copy the example wrf-conus.sh batch file from /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. Wait for the job to complete. This benchmark is configured to run a 6-hour forecast, which takes about 1 hour to complete with 480 ranks. You can monitor the status of your job with 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. Поздравляем!

In this codelab, you created an auto-scaling, cloud-native HPC cluster and ran a parallel WRF® simulation on Google Cloud Platform!

Уборка

To avoid incurring charges to your Google Cloud Platform account for the resources used in this codelab:

Удалить проект

The easiest way to eliminate billing is to delete the project you created for the codelab.

Внимание : удаление проекта влечет за собой следующие последствия:

  • Everything in the project is deleted. If you used an existing project for this codelab, when you delete it, you also delete any other work you've done in the project.
  • Пользовательские идентификаторы проектов теряются. При создании этого проекта вы могли создать пользовательский идентификатор проекта, который хотите использовать в будущем. Чтобы сохранить URL-адреса, использующие этот идентификатор проекта, например, URL-адрес appspot.com , удалите выбранные ресурсы внутри проекта, а не удаляйте весь проект.

If you plan to explore multiple codelabs and quickstarts, reusing projects can help you avoid exceeding project quota limits.

  1. In the Cloud Console, go to the Manage resources page. Go to the Manage resources page
  2. In the project list, select the project that you want to delete and then click Delete dc096e8341a05fec.png .
  3. In the dialog, type the project ID and then click Shut down to delete the project.

Удалите отдельные ресурсы

  1. Open your cloud shell and navigate to the wrf example directory
cd  ~/slurm-gcp/tf/examples/wrf
  1. Выполните команду make destroy, чтобы удалить все ресурсы.
make destroy