1. Введение

Последнее обновление: 05.05.2021
Что вы построите
В этом практическом задании вы развернете кластер высокопроизводительных вычислений (HPC) с автоматическим масштабированием в Google Cloud с помощью планировщика заданий Slurm. Вы будете использовать пример развертывания Terraform, который развертывает этот кластер с установленным WRF® через Spack . Затем вы используете эту инфраструктуру для запуска бенчмарка CONUS 2.5km или CONUS 12km .
Что вы узнаете
- Как настроить политики управления идентификацией и доступом (IAM) для работы кластера высокопроизводительных вычислений (HPC) на платформе Google Cloud Platform.
- Как развернуть облачный высокопроизводительный вычислительный кластер с помощью планировщика заданий Slurm
- Как запустить WRF® параллельно в Google Cloud с помощью пакетного задания Slurm.
Что вам понадобится
- Аккаунт Gmail с прикрепленным SSH-ключом , или Google Workspace , Cloud Identity.
- Проект на платформе Google Cloud Platform с включенной функцией выставления счетов.
- Роль владельца проекта в вашем проекте GCP.
- Достаточная квота вычислительного ядра (480 виртуальных ЦП c2 и 500 ГБ стандартного дискового пространства PD).
2. Конфигурация
Включите API Google Cloud
Для создания и использования ресурсов Google Cloud необходимо включить API.
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, чтобы предоставить вам достаточные разрешения для выполнения следующих задач.
- Создание/удаление экземпляров виртуальных машин Google Compute Engine (GCE).
- Подключение по SSH к виртуальным машинам GCE.

Чтобы назначить себе необходимые роли IAM для выполнения этого руководства, в консоли Google Cloud выполните следующие действия:
- Перейдите в раздел IAM & Admin > IAM в меню «Продукты и услуги».
- Нажмите кнопку "+Добавить" в верхней части страницы.
- В поле «Новые участники» введите данные своей учетной записи 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
3. Низкая квота: Разверните кластер высокопроизводительных вычислений с автоматическим масштабированием с помощью 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"
- При первом запуске Terraform необходимо выполнить команду
init:
terraform init
- Создайте план с помощью команды `make`, которая запустит
terraform
make plan
- Разверните кластер. Процесс установки и настройки может занять до 2 часов. В процессе развертывания будет установлен WRF и все его зависимости.
make apply
- Подключитесь по SSH к узлу авторизации , созданному на предыдущем шаге. Вы можете увидеть этот узел на предыдущем шаге (вероятно, он называется wrf-small-login0 ) . Это можно сделать, нажав кнопку SSH рядом со списком экземпляров виртуальных машин в меню консоли: Compute Engine -> Экземпляр виртуальной машины.
Дополнительная опция: Эта пара команд 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
4. Пробегите контрольную дистанцию в 12 км по территории континентальной части США.
Для запуска теста 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-рангов, которые вы хотите использовать для запуска задания. В данном примере количество задач эквивалентно количеству виртуальных ЦП, используемых для задания, и не должно превышать вашу доступную квоту.
#!/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
- Дождитесь завершения задачи. Этот тест производительности настроен на выполнение прогноза на 6 часов, что занимает около 3 часов при обработке 24 рангов. Вы можете отслеживать статус вашей задачи с помощью
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. Высокая квота: Разверните кластер высокопроизводительных вычислений с автоматическим масштабированием с помощью Terraform.
В этом разделе вы развернете кластер высокопроизводительных вычислений с автоматическим масштабированием, включающий планировщик заданий 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 доступными узлами для запуска заданий с 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"
- Если вы этого не сделали, описанного выше, вам необходимо запустить
terraform initдля запуска Terraform:
terraform init
- Создайте план с помощью команды make.
make plan
- Разверните кластер. Процесс установки и настройки может занять до 2 часов. В процессе развертывания будет установлен WRF и все его зависимости.
make apply
- Подключитесь по SSH к узлу входа , созданному на предыдущем шаге. Вы можете увидеть этот узел на предыдущем шаге (вероятно, он называется wrf-large-login0 ) . Это можно сделать, нажав кнопку SSH рядом со списком экземпляров виртуальных машин в меню консоли: Compute Engine -> Экземпляр виртуальной машины.
Дополнительная опция: Эта пара команд 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
6. Пробегите контрольную дистанцию в 2,5 км по территории континентальной части США.
Для запуска теста 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-рангов, которые вы хотите использовать для запуска задания. В этом примере количество задач эквивалентно количеству виртуальных ЦП, используемых для задания, и не должно превышать вашу доступную квоту.
#!/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
- Дождитесь завершения задачи. Этот тест производительности настроен на выполнение прогноза на 6 часов, что занимает около 1 часа при обработке 480 рангов. Вы можете отслеживать статус вашей задачи с помощью
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. Поздравляем!
В этом практическом задании вы создали самомасштабируемый облачный высокопроизводительный вычислительный кластер и запустили параллельное моделирование WRF® на платформе Google Cloud Platform!
Уборка
Чтобы избежать списания средств с вашего счета Google Cloud Platform за ресурсы, использованные в этом практическом задании:
Удалить проект
Самый простой способ избежать выставления счетов — удалить проект, созданный вами для практического занятия.
Внимание : удаление проекта влечет за собой следующие последствия:
- Все данные в проекте удаляются. Если вы использовали существующий проект для этой практической работы, то при его удалении вы также удалите всю остальную работу, выполненную в этом проекте.
- Пользовательские идентификаторы проектов теряются. При создании этого проекта вы могли создать пользовательский идентификатор проекта, который хотите использовать в будущем. Чтобы сохранить URL-адреса, использующие этот идентификатор проекта, например, URL-адрес appspot.com , удалите выбранные ресурсы внутри проекта, а не удаляйте весь проект.
Если вы планируете изучать несколько практических заданий и быстрых стартов, повторное использование проектов поможет вам избежать превышения лимитов квот на проекты.
- В консоли Cloud перейдите на страницу « Управление ресурсами ».
- В списке проектов выберите проект, который хотите удалить, и нажмите «Удалить».
. - В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить» , чтобы удалить проект.
Удалите отдельные ресурсы
- Откройте Cloud Shell и перейдите в каталог с примерами файлов WRF.
cd ~/slurm-gcp/tf/examples/wrf
- Выполните команду make destroy, чтобы удалить все ресурсы.
make destroy