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

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.

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

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.

57883cb8acc09653.png

Чтобы назначить себе необходимые роли IAM для выполнения этого руководства, в консоли Google Cloud выполните следующие действия:

  1. Перейдите в раздел IAM & Admin > IAM в меню «Продукты и услуги».
  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

3. Низкая квота: Разверните кластер высокопроизводительных вычислений с автоматическим масштабированием с помощью 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. При первом запуске Terraform необходимо выполнить команду init :
terraform init
  1. Создайте план с помощью команды `make`, которая запустит terraform
make plan
  1. Разверните кластер. Процесс установки и настройки может занять до 2 часов. В процессе развертывания будет установлен WRF и все его зависимости.
make apply
  1. Подключитесь по 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}

  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

4. Пробегите контрольную дистанцию ​​в 12 км по территории континентальной части США.

Для запуска теста 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-рангов, которые вы хотите использовать для запуска задания. В данном примере количество задач эквивалентно количеству виртуальных ЦП, используемых для задания, и не должно превышать вашу доступную квоту.
#!/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. Дождитесь завершения задачи. Этот тест производительности настроен на выполнение прогноза на 6 часов, что занимает около 3 часов при обработке 24 рангов. Вы можете отслеживать статус вашей задачи с помощью 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. Высокая квота: Разверните кластер высокопроизводительных вычислений с автоматическим масштабированием с помощью Terraform.

В этом разделе вы развернете кластер высокопроизводительных вычислений с автоматическим масштабированием, включающий планировщик заданий 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 доступными узлами для запуска заданий с 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. Если вы этого не сделали, описанного выше, вам необходимо запустить terraform init для запуска Terraform:
terraform init
  1. Создайте план с помощью команды make.
make plan
  1. Разверните кластер. Процесс установки и настройки может занять до 2 часов. В процессе развертывания будет установлен WRF и все его зависимости.
make apply
  1. Подключитесь по 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.

  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

6. Пробегите контрольную дистанцию ​​в 2,5 км по территории континентальной части США.

Для запуска теста 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-рангов, которые вы хотите использовать для запуска задания. В этом примере количество задач эквивалентно количеству виртуальных ЦП, используемых для задания, и не должно превышать вашу доступную квоту.
#!/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. Дождитесь завершения задачи. Этот тест производительности настроен на выполнение прогноза на 6 часов, что занимает около 1 часа при обработке 480 рангов. Вы можете отслеживать статус вашей задачи с помощью 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. Поздравляем!

В этом практическом задании вы создали самомасштабируемый облачный высокопроизводительный вычислительный кластер и запустили параллельное моделирование WRF® на платформе Google Cloud Platform!

Уборка

Чтобы избежать списания средств с вашего счета Google Cloud Platform за ресурсы, использованные в этом практическом задании:

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

Самый простой способ избежать выставления счетов — удалить проект, созданный вами для практического занятия.

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

  • Все данные в проекте удаляются. Если вы использовали существующий проект для этой практической работы, то при его удалении вы также удалите всю остальную работу, выполненную в этом проекте.
  • Пользовательские идентификаторы проектов теряются. При создании этого проекта вы могли создать пользовательский идентификатор проекта, который хотите использовать в будущем. Чтобы сохранить URL-адреса, использующие этот идентификатор проекта, например, URL-адрес appspot.com , удалите выбранные ресурсы внутри проекта, а не удаляйте весь проект.

Если вы планируете изучать несколько практических заданий и быстрых стартов, повторное использование проектов поможет вам избежать превышения лимитов квот на проекты.

  1. В консоли Cloud перейдите на страницу « Управление ресурсами ».
  2. В списке проектов выберите проект, который хотите удалить, и нажмите «Удалить». dc096e8341a05fec.png .
  3. В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить» , чтобы удалить проект.

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

  1. Откройте Cloud Shell и перейдите в каталог с примерами файлов WRF.
cd  ~/slurm-gcp/tf/examples/wrf
  1. Выполните команду make destroy, чтобы удалить все ресурсы.
make destroy