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

1. Введение

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

Последнее обновление: 5 мая 2021 г.

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

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

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

  • Как настроить политики управления идентификацией и доступом (IAM) для работы кластера HPC на Google Cloud Platform
  • Как развернуть облачный кластер HPC с помощью планировщика заданий Slurm
  • Как запустить WRF® параллельно в Google Cloud, используя пакетное задание Slurm

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

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

Включить Google Cloud API

Для создания и использования ресурсов Google Cloud API должны быть включены.

gcloud services enable compute.googleapis.com 

Установите политики IAM

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

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

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

  • Создание/удаление экземпляров виртуальных машин Google Compute Engine (GCE)
  • SSH к экземплярам виртуальных машин GCE

57883cb8acc09653.png

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

  1. Перейдите в раздел «IAM и администрирование» > «IAM» в меню «Продукты и услуги».
  2. Нажмите «+Добавить» вверху страницы.
  3. Введите свою учетную запись Google Workspace, учетную запись Cloud Identity или учетную запись Gmail в разделе «Новые участники».
  4. Добавьте следующие роли: администратор вычислительной системы, вход в систему Compute OS и пользователь учетной записи службы.
  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. Низкая квота: разверните автоматически масштабируемый кластер HPC с помощью Terraform.

В этом разделе вы развернете автоматически масштабируемый кластер HPC, включая планировщик заданий 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. Создайте и просмотрите план терраформирования. Задайте переменные среды 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. Пробегите тест CONUS на 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. Высокая квота: разверните автоматически масштабируемый кластер HPC с помощью Terraform.

В этом разделе вы развернете автоматически масштабируемый кластер HPC, включая планировщик заданий 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. Создайте и просмотрите план терраформирования. Задайте переменные среды WRF_NAME , WRF_PROJECT , WRF_ZONE , WRF_MAX_NODE и WRF_MACHINE_TYPE , чтобы указать имя вашего кластера, вашего проекта GCP, зону, в которой вы хотите развернуть, максимальное количество узлов и тип машины. Для теста CONUS 2,5 км мы рекомендуем использовать экземпляры 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. Пробегите тест CONUS на 2,5 км.

Чтобы запустить тест CONUS 2,5 км, вы отправите пакетное задание 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. Поздравления

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

Уборка

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

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

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

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

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

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

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

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

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