1. 簡介
上次更新時間:2021 年 5 月 5 日
建構目標
在本程式碼研究室中,您將透過 Slurm 工作排程器,在 Google Cloud 中部署自動調整資源配置的高效能運算 (HPC) 叢集。您將使用範例 Terraform 部署作業,透過 Spack 安裝 WRF® 來部署這個叢集。然後,請使用這個基礎架構執行 CONUS 2.5 公里基準或 CONUS 12 公里基準。
學習目標
- 如何為在 Google Cloud Platform 上運作的 HPC 叢集設定 Identity and Access Management (IAM) 政策
- 如何透過 Slurm 工作排程器部署雲端原生 HPC 叢集
- 如何透過 Slurm 批次工作在 Google Cloud 中平行執行 WRF®
軟硬體需求
- 已附加安全殼層金鑰或 Google Workspace 或 Cloud Identity 的 Gmail 帳戶
- 已啟用計費功能的 Google Cloud Platform 專案
- GCP 專案的專案擁有者角色
- 充足的 Compute Engine 配額 (480 c2 個 vCPU 和 500 GB PD-Standard 磁碟)
2. 組態
啟用 Google Cloud API
必須啟用才能建立和使用 Google Cloud 資源 API。
gcloud services enable compute.googleapis.com
設定 IAM 政策
在 HPC 中,系統管理員和系統使用者有明顯的差異。系統管理員通常擁有「根存取權」讓他們管理及操作運算資源系統使用者通常是研究人員、科學家和應用程式工程師,只需利用資源執行工作。
在 Google Cloud 中,OS Login API 會佈建 Google Workspace、Cloud Identity 與 Gmail 帳戶中的 POSIX 使用者資訊。此外,OS 登入功能也與 GCP 的身分與存取權管理 (IAM) 系統整合,以決定是否要允許使用者提升 Linux 系統的權限。
在這個教學課程中,我們假設您會填入系統管理員和 Compute Engine 管理員角色。我們會設定 IAM 政策,提供您足夠的權限來完成下列工作
- 建立/刪除 Google Compute Engine (GCE) VM 執行個體
- 透過 SSH 連線至 GCE VM 執行個體
如要授予自己完成本教學課程所需的 IAM 角色,請在 Google Cloud 控制台中:
- 前往「IAM &」(身分與存取權管理) 頁面管理 >。
- 按一下「+新增」另外,頁面頂端則有「恭喜」
- 在「新成員」下方,輸入 Google Workspace 帳戶、Cloud Identity 帳戶或 Gmail 帳戶
- 新增下列角色:Compute 管理員、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. 配額不足:透過 Terraform 部署可自動調整資源配置的 HPC 叢集
在本節中,您將部署可自動調整資源配置的 HPC 叢集,包括 Slurm 工作排程器。這與「高配額」選項相同,只是所用的機器類型較小,使用的 vCPU 數量較少。
- 在 GCP 中開啟 Cloud Shell。
- 複製 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 連至上一個步驟建立的 login 節點。您可以在上一個步驟中看到這個節點 (可能稱為 wrf-small-login0)。如要進行這項操作,請前往控制台選單項目 Compute Engine ->,按一下 VM 執行個體清單旁的 SSH 按鈕。VM 執行個體。
選項:這組 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 12 公里基準,請提交 Slurm 批次工作。這個基準的輸入簡報包含在 /apps/share/benchmarks/conus-12km 底下的 wrf-gcp VM 映像檔中。
在這個部分,您必須透過 SSH 連線至叢集的 login 節點
- 從 /apps/share 複製範例 wrf-conus.sh 批次檔案
cp /apps/share/wrf-conus12.sh ~/
- 在文字編輯器中開啟 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
- 請使用 sbatch 提交批次工作。
sbatch wrf-conus12.sh
- 等待工作完成。這項基準已設為執行 6 小時的預測作業,24 個排名大約需要 3 小時才能完成。您可以使用
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 部署可自動調整資源配置的 HPC 叢集
在本節中,您將部署可自動調整資源配置的 HPC 叢集,包括 GCP 中的 Slurm 工作排程器。
- 在 GCP 中開啟 Cloud Shell。
- 複製 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.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 連至上一個步驟建立的 login 節點。您可以在上一個步驟中看到這個節點 (可能稱為 wrf-large-login0)。如要進行這項操作,請前往控制台選單項目 Compute Engine ->,按一下 VM 執行個體清單旁的 SSH 按鈕。VM 執行個體。
選項:這組 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 批次工作。這個基準的輸入簡報包含在 /apps/share/benchmarks/conus-2.5km 底下的 wrf-gcp VM 映像檔中。
在這個部分,您必須透過 SSH 連線至叢集的 login 節點
- 從 /apps/share 複製範例 wrf-conus.sh 批次檔案
cp /apps/share/wrf-conus2p5.sh ~/
- 在文字編輯器中開啟 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
- 請使用 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 叢集,並在 Google Cloud Platform 上執行平行 WRF® 模擬作業!
清除所用資源
如何避免系統向您的 Google Cloud Platform 帳戶收取這個程式碼研究室中所用資源的相關費用:
刪除專案
如要避免付費,最簡單的方法就是刪除您在程式碼研究室中建立的專案。
注意:刪除專案會出現以下結果:
- 專案中的所有內容都會遭到刪除。 若您在本程式碼研究室中使用了現有專案,當您刪除專案時,也會一併刪除您在該專案中完成的任何其他工作。
- 自訂專案 ID 會遺失。在您建立這個專案時,可能採用日後要使用的自訂專案 ID。若要保留使用該專案 ID 的網址 (例如 appspot.com 網址),請刪除在專案中選定的資源,而不是刪除整個專案。
如果打算探索多個程式碼研究室和快速入門導覽課程,重複使用專案有助於避免超出專案配額限制。
- 在 Cloud 控制台中,前往「管理資源」頁面。前往「Manage resources」(管理資源) 頁面
- 在專案清單中,選取要刪除的專案,然後按一下「Delete」(刪除) 。
- 在對話方塊中輸入專案 ID,然後按一下「Shut down」(關閉) 即可刪除專案。
刪除個別資源
- 開啟 Cloud Shell,然後前往 wrf 範例目錄
cd ~/slurm-gcp/tf/examples/wrf
- 執行 make destroy 即可刪除所有資源。
make destroy