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
Что вам понадобится
- Учетная запись Gmail с прикрепленным ключом SSH или Google Workspace , Cloud Identity.
- Проект Google Cloud Platform с включенной оплатой
- Роль владельца проекта в вашем проекте GCP
- Достаточная квота Compute Engine (480 виртуальных ЦП c2 и диск PD-Standard емкостью 500 ГБ)
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
Чтобы назначить себе необходимые роли IAM для выполнения этого руководства, в Google Cloud Console:
- Перейдите в раздел «IAM и администрирование» > «IAM» в меню «Продукты и услуги».
- Нажмите «+Добавить» вверху страницы.
- Введите свою учетную запись Google Workspace, учетную запись Cloud Identity или учетную запись Gmail в разделе «Новые участники».
- Добавьте следующие роли: администратор вычислительной системы, вход в систему Compute OS и пользователь учетной записи службы.
- Нажмите «Сохранить».
Теперь ваш логин имеет разрешения, необходимые для инициирования создания кластера 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. Это идентично варианту «Высокая квота», за исключением того, что используемый тип машины меньше, а количество используемых виртуальных ЦП меньше.
- Откройте Cloud Shell на GCP.
- Клонируйте репозиторий FluidNumerics/slurm-gcp.
cd ~ git clone https://github.com/FluidNumerics/slurm-gcp.git
- Перейдите в каталог WRF:
cd ~/slurm-gcp/tf/examples/wrf
- Создайте и просмотрите план терраформирования. Задайте переменные среды
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. Пробегите тест CONUS на 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. Высокая квота: разверните автоматически масштабируемый кластер HPC с помощью Terraform.
В этом разделе вы развернете автоматически масштабируемый кластер HPC, включая планировщик заданий 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
- Создайте и просмотрите план терраформирования. Задайте переменные среды
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"
- Если вы не сделали этого выше, вам необходимо запустить
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. Пробегите тест CONUS на 2,5 км.
Чтобы запустить тест CONUS 2,5 км, вы отправите пакетное задание 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. Поздравления
В этой лабораторной работе вы создали автоматически масштабируемый облачный кластер HPC и запустили параллельное моделирование WRF® на Google Cloud Platform!
Уборка
Чтобы избежать взимания платы с вашей учетной записи Google Cloud Platform за ресурсы, используемые в этой лаборатории кода:
Удалить проект
Самый простой способ избежать выставления счетов — удалить проект, созданный вами для лаборатории кода.
Внимание : Удаление проекта имеет следующие последствия:
- Все в проекте удалено. Если вы использовали существующий проект для этой лаборатории кода, при его удалении вы также удаляете всю другую работу, выполненную в проекте.
- Пользовательские идентификаторы проектов теряются. Создавая этот проект, вы, возможно, создали собственный идентификатор проекта, который хотите использовать в будущем. Чтобы сохранить URL-адреса, использующие идентификатор проекта, например URL-адрес appspot.com , удалите выбранные ресурсы внутри проекта, а не удаляйте весь проект.
Если вы планируете изучить несколько лабораторий кода и кратких руководств, повторное использование проектов поможет вам избежать превышения ограничений квоты проекта.
- В Cloud Console перейдите на страницу «Управление ресурсами» . Перейдите на страницу «Управление ресурсами».
- В списке проектов выберите проект, который вы хотите удалить, и нажмите «Удалить». .
- В диалоговом окне введите идентификатор проекта и нажмите «Завершить работу» , чтобы удалить проект.
Удаление отдельных ресурсов
- Откройте облачную оболочку и перейдите в каталог примеров wrf.
cd ~/slurm-gcp/tf/examples/wrf
- Запустите make Destroy, чтобы удалить все ресурсы.
make destroy