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
Что вам понадобится
- Gmail Account with an SSH key attached , or Google Workspace , Cloud Identity
- Google Cloud Platform Project with Billing enabled
- Роль владельца проекта в вашем проекте GCP.
- Sufficient Compute Engine Quota (480 c2 vCPUs and 500 GB PD-Standard Disk)
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.

To give yourself the necessary IAM roles to complete this tutorial, in the Google Cloud Console:
- Navigate to IAM & Admin > IAM in the Products and Services menu.
- Нажмите кнопку "+Добавить" в верхней части страницы.
- Type in your Google Workspace account, Cloud Identity Account, or Gmail account under "New members"
- Add the following roles : Compute Admin, Compute OS Login, and Service Account User
- Нажмите «Сохранить».
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. Это идентично варианту с высокой квотой, за исключением того, что используется машина меньшего типа и меньшее количество виртуальных ЦП.
- Откройте 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"
- The first time you run terraform you must run the
initcommand:
terraform init
- Create the plan with the make command, which will run
terraform
make plan
- 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
- Подключитесь по 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}
- 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
- Verify that
/apps/share/conus-12kmhas 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
- Copy the example wrf-conus.sh batch file from /apps/share
cp /apps/share/wrf-conus12.sh ~/
- Откройте файл 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
- Отправьте пакетное задание с помощью команды sbatch.
sbatch wrf-conus12.sh
- 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. - После завершения задания проверьте содержимое файла 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.
- Откройте 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 доступными узлами для запуска заданий с 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"
- If you did not do it above, you must run
terraform initto start up terraform:
terraform init
- Создайте план с помощью команды make.
make plan
- 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
- Подключитесь по 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.
- 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
- Verify that
/apps/share/conus-2.5kmhas 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
- Copy the example wrf-conus.sh batch file from /apps/share
cp /apps/share/wrf-conus2p5.sh ~/
- Откройте файл 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
- Отправьте пакетное задание с помощью команды sbatch.
sbatch wrf-conus2p5.sh
- 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. - После завершения задания проверьте содержимое файла 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.
- In the Cloud Console, go to the Manage resources page. Go to the Manage resources page
- In the project list, select the project that you want to delete and then click Delete
. - In the dialog, type the project ID and then click Shut down to delete the project.
Удалите отдельные ресурсы
- Open your cloud shell and navigate to the wrf example directory
cd ~/slurm-gcp/tf/examples/wrf
- Выполните команду make destroy, чтобы удалить все ресурсы.
make destroy