使用流體數值執行 WRF 天氣預報模型';Slurm-GCP

1. 簡介

美國本土

上次更新時間:2021 年 5 月 5 日

建構目標

在本程式碼研究室中,您將使用 Slurm 工作排程器,在 Google Cloud 上部署可自動調整資源配置的高效能運算 (HPC) 叢集。您將使用 Terraform 部署範例,透過 Spack 安裝 WRF®,並部署這個叢集。接著,您會使用這項基礎架構執行 CONUS 2.5 公里基準CONUS 12 公里基準

學習目標

  • 如何在 Google Cloud Platform 上設定 Identity and Access Management (IAM) 政策,以運作 HPC 叢集
  • 如何使用 Slurm 工作排程器部署雲端原生 HPC 叢集
  • 如何使用 Slurm 批次工作,在 Google Cloud 上平行執行 WRF®

需要準備的事項

2. 設定

啟用 Google Cloud API

如要建立及使用 Google Cloud 資源,必須啟用 API。

gcloud services enable compute.googleapis.com 

設定 IAM 政策

在 HPC 中,系統管理員和系統使用者有明顯區別。系統管理員通常具有「根存取權」,可管理及操作運算資源。系統使用者通常是研究人員、科學家和應用程式工程師,他們只需要使用資源來執行工作。

在 Google Cloud 中,OS 登入 API 會從 Google Workspace、Cloud Identity 和 Gmail 帳戶佈建 POSIX 使用者資訊。此外,OS 登入會與 GCP 的 Identity and Access Management (IAM) 系統整合,判斷是否應允許使用者在 Linux 系統上提升權限。

在本教學課程中,我們假設您擔任系統管理員和 Compute Engine 管理員角色。我們會設定 IAM 政策,授予您足夠的權限來完成下列工作

  • 建立/刪除 Google Compute Engine (GCE) VM 執行個體
  • 透過 SSH 連線至 GCE VM 執行個體

57883cb8acc09653.png

如要授予自己完成本教學課程所需的 IAM 角色,請在 Google Cloud 控制台中執行下列操作:

  1. 在「產品與服務」選單中,依序前往「IAM 與管理」>「IAM」。
  2. 按一下頁面頂端的「+新增」。
  3. 在「新成員」下方輸入 Google Workspace 帳戶、Cloud Identity 帳戶或 Gmail 帳戶
  4. 新增下列角色:Compute 管理員、Compute OS 登入和服務帳戶使用者
  5. 按一下「儲存」

現在登入帳戶後,您就具備啟動 HPC 叢集建立作業所需的權限。

如要驗證您已指派正確的角色,請開啟 Cloud Shell,然後執行下列指令,並將 YOUR_PROJECTEMAIL_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 部署可自動調整資源配置的 HPC 叢集

在本節中,您將部署可自動調整資源配置的 HPC 叢集,包括 Slurm 工作排程器。這與「高配額」選項相同,但使用的機型較小,使用的 vCPU 數量也較少。

  1. 在 GCP 上開啟 Cloud Shell。
  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_NAMEWRF_PROJECTWRF_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)方法是在控制台選單項目「Compute Engine -> VM 執行個體」中,點選 VM 執行個體清單旁的「SSH」按鈕。

選項:這組 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 12 公里基準測試,請提交 Slurm 批次工作。這項基準測試的輸入牌組位於 wrf-gcp VM 映像檔的 /apps/share/benchmarks/conus-12km 下。

在本節中,您必須透過 SSH 連線至叢集的登入節點

  1. 從 /apps/share 複製範例 wrf-conus.sh 批次檔
cp /apps/share/wrf-conus12.sh ~/
  1. 在文字編輯器中開啟 wrf-conus.sh,確認 --partition--ntasks 設定正確。工作數量應設為您要用來啟動工作的 MPI 等級數量。在本示範中,工作數量等同於工作使用的 vCPU 數量,且不得超過可用配額。
#!/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 小時的預測,完成 24 個等級的預測約需 3 小時。您可以使用 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 部署可自動調整資源配置的 HPC 叢集

在本節中,您將在 GCP 中部署可自動調整資源配置的 HPC 叢集,包括 Slurm 工作排程器。

  1. 在 GCP 上開啟 Cloud Shell。
  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_NAMEWRF_PROJECTWRF_ZONEWRF_MAX_NODEWRF_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)方法是在控制台選單項目「Compute Engine -> VM 執行個體」中,點選 VM 執行個體清單旁的「SSH」按鈕。

選項:這組 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 VM 映像檔的 /apps/share/benchmarks/conus-2.5km 下。

在本節中,您必須透過 SSH 連線至叢集的登入節點

  1. 從 /apps/share 複製範例 wrf-conus.sh 批次檔
cp /apps/share/wrf-conus2p5.sh ~/
  1. 在文字編輯器中開啟 wrf-conus.sh,確認 --partition--ntasks 設定正確。分區應設為 c2-60。工作數量應設為您要用來啟動工作的 MPI 等級數量。在本示範中,工作數量等同於工作使用的 vCPU 數量,且不得超過可用配額。
#!/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 小時的預測,完成 480 個等級的預測約需 1 小時。您可以使用 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 叢集,並在 Google Cloud Platform 上執行平行 WRF® 模擬!

正在清除所用資源

如要避免系統向您的 Google Cloud Platform 帳戶收取您在本程式碼研究室中所用資源的相關費用:

刪除專案

如要避免付費,最簡單的方法就是刪除您為本程式碼研究室建立的專案。

警告:刪除專案會出現以下結果:

  • 專案中的所有內容都會遭到刪除。如果您使用現有專案來進行本程式碼研究室,刪除專案時也會一併刪除您在該專案中執行的其他任何工作。
  • 自訂專案 ID 不復存在。您建立這個專案時,可能已建立日後使用的自訂專案 ID。如要保留使用該專案 ID 的網址 (例如 appspot.com 網址),請刪除在該專案中選取的資源,而不是刪除整個專案。

如果打算進行多個程式碼研究室及快速入門導覽課程,重複使用專案有助於避免超出專案配額限制。

  1. 前往 Cloud Console 中的「管理資源」頁面。前往「管理資源」頁面
  2. 在專案清單中選取要刪除的專案,然後按一下「刪除」圖示 dc096e8341a05fec.png
  3. 在對話方塊中輸入專案 ID,然後按一下「Shut down」(關閉) 刪除專案。

刪除個別資源

  1. 開啟 Cloud Shell,然後前往 wrf 範例目錄
cd  ~/slurm-gcp/tf/examples/wrf
  1. 執行 make destroy 即可刪除所有資源。
make destroy