1. 簡介
上次更新時間:2022 年 4 月 25 日
建構目標
在這個程式碼研究室中,您將在 Google Cloud 上部署可自動調整資源配置的高效能運算 (HPC) 叢集。Terraform 部署作業會使用透過 Spack 安裝 Gromacs 建立這個叢集。叢集會透過 Slurm 工作排程器管理。建立叢集後,您將執行 benchMEM、benchPEP 或 benchRIB 基準。
學習目標
- 如何部署支援 Slurm 工作排程器的 HPC 叢集
- 瞭解如何在 Google Cloud 中,使用 Slurm 批次工作,透過 Gromacs 執行 GPU 加速分子動態模擬作業
軟硬體需求
2. 設定
如要完成本程式碼研究室,您必須啟用 Compute Engine 和 Cloud Build API。如要啟用 Compute Engine 和 Cloud Build API,請開啟 Cloud Shell 並執行下列指令。請記得將「project-id」替換為下方的
。
gcloud config set project <PROJECT_ID> gcloud services enable compute.googleapis.com gcloud services enable cloudbuild.googleapis.com
注意:如果您打算使用第三方 SSH (例如 OpenSSH) 連線至叢集,請務必使用 OS 登入功能將 SSH 金鑰附加至 Cloud Identity 設定檔。進一步瞭解如何將安全殼層金鑰新增至 Cloud Identity 設定檔。
3. [選用] 使用 Gromacs 建立 GCP VM 映像檔
我們在本程式碼研究室中提供了預先建構的映像檔,因為建構程序最多可能需要 2 小時才能安裝 Gromac 及其所有依附元件。如要使用這個預先建立的映像檔節省時間,可以直接跳到下一部分。
在 Google Cloud 中執行研究應用程式時,有許多選項可以安裝及部署應用程式。在程式碼研究室的本節中,您將建立以 slurm-gcp (CentOS7) VM 映像檔為基礎的虛擬機器映像檔。在建立過程中,所有 Gromacs 的編譯器並安裝 Gromac。
RCC 應用程式存放區中的 Gromacs Cloud Build 管道封裝了 Gromacs 的必要安裝操作說明。安裝程序會使用 Packer 部署安裝 Spack 的 VM,進而安裝 GCC@9.2.0 編譯器和 Gromacs@2021.2 (已啟用 GPU 加速功能)。
- 在 GCP 中開啟 Cloud Shell。
- 複製 FluidNumerics/rcc-apps 存放區
cd ~ git clone https://github.com/FluidNumerics/rcc-apps.git
- 使用 Google Cloud Build 建構映像檔。
cd rcc-apps gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async
您可以在 Google Cloud Build 資訊主頁查看建構程序的狀態
建構程序可能需要兩小時才會完成。如要加快這項作業,建議您修改建構設定檔結構定義來變更機器類型,藉此改善建構效能。使用 _MACHINE_TYPE 建構變數即可達到此效果。例如:
gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async --substitutions=_MACHINE_TYPE=n2-standard-64
建構完成後,Google Cloud 專案就會提供可用來部署叢集的 VM 映像檔。
4. 透過 Terraform 部署可自動調整資源配置的 HPC 叢集
在本節中,您將使用 Terraform 部署可自動調整資源配置的 HPC 叢集,並已安裝 Slurm 工作排程器。部署這個叢集時使用的運算節點,各有 8 個 vCPU 和 1 個 Nvidia® Tesla V100 GPU。
- 在 GCP 中開啟 Cloud Shell。
- 複製 FluidNumerics/rcc-apps 存放區
cd ~ git clone https://github.com/FluidNumerics/rcc-apps.git
- 變更為 gromacs terraform 目錄:
cd ~/rcc-apps/gromacs/tf/slurm
- 建立及查看 Terraform 計畫。設定環境變數
GMX_NAME
、GMX_PROJECT
和GMX_ZONE
,以指定叢集名稱、GCP 專案和要部署目標的區域。如果您不確定,請查看下方附註
export GMX_PROJECT=<PROJECT_ID> export GMX_ZONE=<ZONE> export GMX_NAME="gromacs"
- 如果您在本程式碼研究室的上一節中建立了自己的 VM 映像檔,則還需要設定 GMX_IMAGE 環境變數
匯出 GMX_IMAGE="projects/${GMX_PROJECT}/global/images/gromacs-gcp-foss-latest"
- 使用 make 指令建立計畫,該計畫將執行
terraform init && terraform plan
。
make plan
- 部署叢集。設定過程只需幾分鐘就能完成,因為 Gromacs 及其依附元件已預先安裝於您的叢集上。
make apply
- 透過 SSH 連至上一個步驟建立的 login 節點。您可以在上一個步驟中看到這個節點 (可能稱為 gromacs-login0)。如要進行這項操作,請前往控制台選單項目 Compute Engine ->,按一下 VM 執行個體清單旁的 SSH 按鈕。VM 執行個體。
選項:這組 gcloud 指令會找出登入節點名稱,並透過 SSH 連線至該節點:
export CLUSTER_LOGIN_NODE=$(gcloud compute instances list --zones ${GMX_ZONE} --filter="name ~ .*login" --format="value(name)" | head -n1) gcloud compute ssh ${CLUSTER_LOGIN_NODE} --zone ${GMX_ZONE}
- 連線至登入節點後,如要驗證叢集設定,請檢查 Gromacs 已安裝完成
$ spack find gromacs ==> In environment /apps/spack-pkg-env ==> Root specs gromacs@2021.2 +cuda~mpi ==> 1 installed package -- linux-centos7-x86_64 / gcc@9.2.0 ----------------------------- gromacs@2021.2
- 確認
/opt/share/gromacs
包含下列內容。
$ ls /opt/share/gromacs/ benchMEM.tpr benchPEP-h.tpr benchPEP.tpr benchRIB.tpr
5. 執行 benchRIB 基準
Gromacs 是研究軟體,用於模擬分子力量,以及在能源最小化限制下計算分子結構。本程式碼研究室的 VM 映像檔提供的基準測試著重於分子動態,也就是原子系統的演變。
在分子力量中,系統會使用牛頓運動定律模擬原子的位置、速度和加速度:
其中, 是原子 i、t 的位置,
是原子質 i,
則是原子 i 的非鍵式,因為原子 j 和
則是由鍵結互動所造成的力量。根據溫度、壓力、原子位置和原子速度,計算力,並且以數值整合的方式獲取新的原子速度和位置。這個過程重複進行,以模擬指定期間的分子動力。
Gromacs 映像檔 (無論是你自己建立的圖片,還是你提供的映像檔) 含有三個基準
- benchMEM
- benchRIB
- benchPEP
這些基準取自 Dr.Kutzner 提供的自由總體基準組 ,是一組暫時性的分子動力模擬。每個基準測試的原子數量和模擬作業持續時間不盡相同。下表列出各項模擬的相關設定。
指標 / 基準 | benchMEM | benchRIB | benchPEP |
Atom 數量 | 81,743 人 | 2,136,412 人 | 12,495,503 人 |
系統大小 / nm | 10.8 x 10.2 x 9.6 | 31.2 x 31.2 x 31.2 吋 | 50.0 x 50.0 x 50.0 |
時間步驟 / fs | 2 | 4 | 2 |
Cutoff Radii / nm | 1 | 1 | 1.2 |
PME 格線間距 / nm | 0.12 | 0.135 | 0.16 |
如要執行基準測試,請提交 Slurm 批次工作。根據預設,提供的批次指令碼會執行 benchRIB 基準。定義所提供基準設定的輸入簡報會納入 /opt/share/gromacs
下方的 Gromacs VM 映像檔中。此外,/opt/share
下方也提供執行 Gromacs 的 bash 指令碼範例。
在這個部分,您必須透過 SSH 登入叢集的 login 節點
- 使用 sbatch 指令提交批次工作
$ sbatch --ntasks=1 --cpus-per-task=8 --gres=gpu:1 --out=gromacs.out /opt/share/gromacs_bench.sh
這麼做會將工作排入執行佇列,Slurm 也會為您佈建運算節點。執行 sinfo
時,您會看到運算節點處於 alloc#
狀態,這代表運算節點已分配給工作,但是目前正在佈建中。工作開始執行後,節點會設為 alloc
狀態。
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST gromacs* up infinite 1 alloc# gromacs-compute-0-0 $ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 2 gromacs gromacs_ joe R 0:02 1 gromacs-compute-0-0 $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST gromacs* up infinite 1 alloc gromacs-compute-0-0
等待工作完成。預設的基準測試 (benchRIB) 會模擬約 800 萬原子的原子,並設為執行 5,000 個計時 (總共 4 個時間步數/fs) 步,大約需要 6 分鐘才能完成。您可以使用下列指令來監控工作狀態:
watch squeue
工作離開佇列後,您可以使用 ctrl-C 退出。
- 工作完成後,您應該會看到名為
run/
的目錄,其中包含模擬輸出內容 (在run/MEM
下) 和目前目錄中名為gromacs.out
的記錄檔。run/MEM
目錄包含ener.edr
和md.log
兩個檔案。ener.edr
檔案會以可攜式二進位格式儲存系統的能量、溫度、壓力、盒子大小、密度和向量格式。正如副檔名所言,md.log
檔案包含 Gromacs 模擬記錄,除了記錄在粒子粒子和 PME 解析器中的記錄資訊外,還會提供模擬效能的資訊。gromacs.out 的內容包含gmx mdrun
的標準輸出內容,大致如下所示。
$ tail -n9 gromacs.out step 5000, remaining wall clock time: 0 s Core t (s) Wall t (s) (%) Time: 3085.342 385.683 800.0 (ns/day) (hour/ns) Performance: 4.481 5.356 GROMACS reminds you: "I never thought of stopping, and I just hated sleeping. I can't imagine having a better life." (Barbara McClintock) OK
6. 恭喜
在本程式碼研究室中,您建立了可自動調整資源配置的雲端原生 HPC 叢集,並在 Google Cloud 上使用 Gromacs 執行 GPU 加速分子動態模擬作業!
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取這個程式碼研究室所用資源的費用,請按照下列步驟操作:
建議:使用 Terraform 刪除 HPC 叢集
- 開啟 Cloud Shell,然後前往
gromacs/tf/slurm
範例目錄
cd ~/rcc-apps/gromacs/tf/slurm
- 執行 make destroy 即可刪除所有資源。
make destroy
或,刪除專案 (最有效且具破壞性)
如要避免付費,最簡單的方法就是刪除您在程式碼研究室中建立的專案。
注意:刪除專案會出現以下結果:
- 專案中的所有內容都會遭到刪除。 若您在本程式碼研究室中使用了現有專案,當您刪除專案時,也會一併刪除您在該專案中完成的任何其他工作。
- 自訂專案 ID 會遺失。在您建立這個專案時,可能採用日後要使用的自訂專案 ID。若要保留使用該專案 ID 的網址 (例如 appspot.com 網址),請刪除在專案中選定的資源,而不是刪除整個專案。
如果打算探索多個程式碼研究室和快速入門導覽課程,重複使用專案有助於避免超出專案配額限制。
- 在 Cloud 控制台中,前往「管理資源」頁面。前往「Manage resources」(管理資源) 頁面
- 在專案清單中,選取要刪除的專案,然後按一下「Delete」(刪除)
。
- 在對話方塊中輸入專案 ID,然後按一下「Shut down」(關閉) 即可刪除專案。