เรียกใช้การจำลองพลศาสตร์โมเลกุลของ Gromacs ด้วยเลขคณิตแบบไหล' Slurm-GCP

1. บทนำ

อัปเดตล่าสุด 25-04-2022

สิ่งที่คุณจะสร้าง

ใน Codelab นี้ คุณจะได้ทำให้คลัสเตอร์ High Performance Computing (HPC) ที่ปรับขนาดอัตโนมัติใช้งานได้บน Google Cloud การติดตั้งใช้งาน Terraform จะสร้างคลัสเตอร์นี้ด้วย Gromacs ที่ติดตั้งผ่าน Spack ระบบจะจัดการคลัสเตอร์ด้วยเครื่องจัดตารางเวลางาน Slurm เมื่อสร้างคลัสเตอร์แล้ว คุณจะเรียกใช้การเปรียบเทียบ MEM, การเปรียบเทียบแบบ PEP หรือการเปรียบเทียบ

สิ่งที่คุณจะได้เรียนรู้

  • วิธีทำให้คลัสเตอร์ HPC ที่รองรับเครื่องจัดตารางเวลางาน Slurm
  • วิธีเรียกใช้การจำลองไดนามิกของโมเลกุลที่เร่งโดยใช้ GPU ด้วย Gromacs บน Google Cloud โดยใช้งานกลุ่ม Slurm

สิ่งที่คุณต้องมี

2. ตั้งค่า

หากต้องการให้ Codelab นี้เสร็จสมบูรณ์ คุณต้องเปิดใช้ Compute Engine และ Cloud Build API หากต้องการเปิดใช้ Compute Engine และ Cloud Build API ให้เปิด Cloud Shell แล้วเรียกใช้คำสั่งต่อไปนี้ อย่าลืมแทนที่รหัสโปรเจ็กต์ด้วย ด้านล่าง

gcloud config set project <PROJECT_ID>
gcloud services enable compute.googleapis.com
gcloud services enable cloudbuild.googleapis.com

ข้อควรระวัง: หากคุณวางแผนที่จะใช้ SSH ของบุคคลที่สาม (เช่น OpenSSH) เพื่อเชื่อมต่อกับคลัสเตอร์ อย่าลืมแนบคีย์ ssh กับโปรไฟล์ Cloud Identity โดยใช้การเข้าสู่ระบบ OS ดูข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่มคีย์ SSH ลงในโปรไฟล์ Cloud Identity

3. [ไม่บังคับ] สร้างอิมเมจ VM ของ GCP ด้วย Gromacs

สำหรับ Codelab นี้ เราได้จัดเตรียมอิมเมจที่สร้างไว้ล่วงหน้าให้คุณ เนื่องจากกระบวนการสร้างอาจใช้เวลาถึง 2 ชั่วโมงในการติดตั้ง Gromacs และทรัพยากร Dependency ทั้งหมด หากคุณต้องการใช้อิมเมจที่สร้างไว้ล่วงหน้านี้เพื่อประหยัดเวลา คุณสามารถข้ามไปยังส่วนถัดไปได้

เมื่อเรียกใช้แอปพลิเคชันการวิจัยบน Google Cloud มีหลายตัวเลือกสำหรับการติดตั้งและทำให้แอปพลิเคชันของคุณใช้งานได้ ในส่วนนี้ของ Codelab คุณจะต้องสร้างอิมเมจเครื่องเสมือนที่สร้างขึ้นบนอิมเมจ VM slurm-gcp (CentOS7) ระหว่างขั้นตอนการสร้าง คอมไพเลอร์, Gromacs ทั้งหมด ระบบจะติดตั้งทรัพยากร Dependency และ Gromacs

ไปป์ไลน์ Gromacs Cloud Build ในที่เก็บของแอป RCC สรุปวิธีการที่จำเป็นสำหรับการติดตั้ง Gromac ขั้นตอนการติดตั้งใช้ Packer เพื่อทำให้ VM ที่ติดตั้ง Spack ใช้งานได้ ซึ่งจะติดตั้งคอมไพเลอร์ GCC@9.2.0 และ Gromacs@2021.2 ที่เปิดใช้การเร่ง GPU ไว้

  1. เปิด Cloud Shell ใน GCP
  2. โคลนที่เก็บ FluidNumerics/rcc-apps
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. สร้างอิมเมจโดยใช้ Google Cloud Build
cd rcc-apps
gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async

คุณตรวจสอบสถานะของกระบวนการบิลด์ได้ที่หน้าแดชบอร์ด Google Cloud Build

กระบวนการสร้างอาจใช้เวลา 2 ชั่วโมง ในการเร่งความเร็วนี้ คุณอาจพิจารณาแก้ไขสคีมาของไฟล์การกำหนดค่าบิลด์เพื่อเปลี่ยนประเภทเครื่องเพื่อปรับปรุงประสิทธิภาพของบิลด์ ซึ่งทำได้โดยใช้ตัวแปรบิลด์ _MACHINE_TYPE เช่น

gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async --substitutions=_MACHINE_TYPE=n2-standard-64

เมื่อสร้างบิลด์เรียบร้อยแล้ว คุณจะมีอิมเมจ VM ที่พร้อมใช้งานในโปรเจ็กต์ Google Cloud ซึ่งคุณใช้เพื่อทำให้คลัสเตอร์ใช้งานได้

4. ทำให้คลัสเตอร์ HPC ที่ปรับขนาดอัตโนมัติใช้งานได้ด้วย Terraform

ในส่วนนี้ คุณจะใช้ terform เพื่อทำให้คลัสเตอร์ HPC ที่ปรับขนาดอัตโนมัติใช้งานได้ โดยจะมีการติดตั้งเครื่องจัดตารางเวลางาน Slurm ไว้ คลัสเตอร์นี้จะมีการทำให้ใช้งานได้กับโหนดประมวลผลที่แต่ละโหนดมี vCPU 8 ตัวและ GPU Nvidia® Tesla V100 1 เครื่อง

  1. เปิด Cloud Shell ใน GCP
  2. โคลนที่เก็บ FluidNumerics/rcc-apps
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. เปลี่ยนเป็นไดเรกทอรี gromacs terraform:
cd ~/rcc-apps/gromacs/tf/slurm
  1. สร้างและตรวจสอบแผน Terraform ตั้งค่าตัวแปรสภาพแวดล้อม GMX_NAME, GMX_PROJECT และ GMX_ZONE เพื่อระบุชื่อของคลัสเตอร์ โปรเจ็กต์ GCP และโซนที่ต้องการทำให้ใช้งานได้ โปรดอ่านหมายเหตุด้านล่างหากไม่แน่ใจ
export GMX_PROJECT=<PROJECT_ID>
export GMX_ZONE=<ZONE> 
export GMX_NAME="gromacs" 
  1. หากสร้างอิมเมจ VM ของคุณเองในส่วนก่อนหน้าของ Codelab นี้ คุณจะต้องตั้งค่าตัวแปรสภาพแวดล้อม GMX_IMAGE ด้วย

ส่งออก GMX_IMAGE="projects/${GMX_PROJECT}/global/images/gromacs-gcp-foss-latest"

  1. สร้างแผนด้วยคำสั่ง create ซึ่งจะเรียกใช้ terraform init && terraform plan
make plan
  1. ทำให้คลัสเตอร์ใช้งานได้ กระบวนการตั้งค่าจะใช้เวลาเพียงไม่กี่นาทีเนื่องจาก Gromacs และทรัพยากร Dependency จะได้รับการติดตั้งล่วงหน้าในคลัสเตอร์ของคุณ
make apply
  1. SSH ไปยังโหนด login ที่สร้างขึ้นในขั้นตอนก่อนหน้า คุณดูโหนดนี้ได้ในขั้นตอนก่อนหน้า (อาจเรียกว่า gromacs-login0) คุณสามารถดำเนินการดังกล่าวได้โดยคลิกปุ่ม SSH ข้างรายการอินสแตนซ์ VM ในรายการเมนูคอนโซล Compute Engine -> อินสแตนซ์ 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}
  1. เมื่อคุณเชื่อมต่อกับโหนดการเข้าสู่ระบบแล้ว ให้ตรวจสอบว่าคุณได้ติดตั้ง 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
  1. ตรวจสอบว่า /opt/share/gromacs มีเนื้อหาตามที่ระบุไว้ด้านล่าง
$ ls /opt/share/gromacs/
benchMEM.tpr benchPEP-h.tpr benchPEP.tpr benchRIB.tpr

5. เรียกใช้การเปรียบเทียบ benchRIB

โกรแม็กเป็นซอฟต์แวร์การวิจัยที่ใช้เพื่อจำลองพลวัตของโมเลกุลและคำนวณโครงสร้างโมเลกุลภายใต้ข้อจำกัดในการลดการใช้พลังงาน การเปรียบเทียบที่ระบุในอิมเมจ VM สำหรับ Codelab นี้จะมุ่งเน้นที่ไดนามิกของโมเลกุล ซึ่งเป็นวิวัฒนาการของระบบอะตอม

ในพลวัตของโมเลกุล จะมีการจำลองตำแหน่ง อัตราความเร็ว และความเร่งของอะตอมโดยใช้กฎการเคลื่อนที่ของนิวตัน

638fa1fba54c3874.png

โดยที่ เวกเตอร์ตำแหน่ง คือตำแหน่งของอะตอม i, t คือเวลา, 72a717ea69626d54.png คือมวลของอะตอม i และ b5e52e17becb80ec.png คือแรงไม่ยึดเหนี่ยวต่ออะตอม i เนื่องจากอะตอม j และ 538199b3881cd305.png คือแรงที่เกิดจากปฏิกิริยามีพันธะ จากอุณหภูมิ ความดัน ตำแหน่งของอะตอม และอัตราความเร็วของอะตอม จะคำนวณแรงและระบบจะผนวกรวมเชิงตัวเลขเพื่อให้ได้อัตราความเร็วและตำแหน่งใหม่ของอะตอม กระบวนการนี้จะเกิดขึ้นซ้ำเพื่อจำลองไดนามิกของโมเลกุลในช่วงเวลาหนึ่งๆ

อิมเมจ Gromacs (รูปที่คุณสร้างหรือรูปที่ให้ไว้) มาพร้อมกับตัวเปรียบเทียบ 3 ตัว

  1. benchMEM
  2. benchRIB
  3. benchPEP

การเปรียบเทียบเหล่านี้มาจาก ดร. ชุดการเปรียบเทียบ Free Gromacs ของ Kutzner และเป็นชุดการจำลองไดนามิกของโมเลกุลแบบชั่วคราว การเปรียบเทียบแต่ละรายการจะแตกต่างกันไปตามจำนวนอะตอมและระยะเวลาของการจำลอง การกำหนดค่าที่เกี่ยวข้องสำหรับการจำลองแต่ละรายการระบุไว้ในตารางด้านล่าง

เมตริก / การเปรียบเทียบ

benchMEM

benchRIB

benchPEP

จำนวนอะตอม

81,743 คน

2,136,412

12,495,503 คน

ขนาดของระบบ / นาโนเมตร

10.8 X 10.2 X 9.6

31.2 X 31.2 X 31.2

50.0 X 50.0 X 50.0

Time Step / fs

2

4

2

รัศมีที่ตัดออก / นาโนเมตร

1

1

1.2

ระยะห่างระหว่างตารางกริด PME / นาโนเมตร

0.12

0.135

16

ในการเรียกใช้การเปรียบเทียบ คุณจะต้องส่งงานแบบกลุ่มของ Slurm โดยค่าเริ่มต้น สคริปต์กลุ่มที่ระบุจะเรียกใช้การเปรียบเทียบ ชุดอินพุตที่ระบุการกำหนดค่าสำหรับการเปรียบเทียบที่ระบุจะรวมอยู่ในอิมเมจ VM ของ Gromacs ภายใต้ /opt/share/gromacs นอกจากนี้ ตัวอย่างสคริปต์ Bash สำหรับการเรียกใช้ Gromacs มีให้ใช้งานภายใต้ /opt/share

สำหรับส่วนนี้ คุณต้อง SSH ไปยังโหนด login ของคลัสเตอร์

  1. ส่งงานแบบกลุ่มโดยใช้คำสั่ง 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

รอให้งานเสร็จสมบูรณ์ การเปรียบเทียบเริ่มต้น (การเปรียบเทียบ) จะจำลองอะตอมประมาณ 8 ล้านอะตอม และกำหนดค่าให้ทำงาน 5,000 ก้าว (มี 4 ก้าว/วินาที) และใช้เวลาประมาณ 6 นาทีในการดำเนินการให้เสร็จสมบูรณ์ คุณตรวจสอบสถานะของงานได้ด้วยคำสั่งนี้

watch squeue

เมื่องานหายไปจากคิวแล้ว คุณสามารถออกด้วย ctrl-C

  1. เมื่องานเสร็จสิ้นแล้ว คุณควรเห็นไดเรกทอรีชื่อ run/ ซึ่งมีเอาต์พุตการจำลอง (ต่ำกว่า run/MEM) และไฟล์บันทึกในไดเรกทอรีปัจจุบันที่ชื่อ gromacs.out ไดเรกทอรี run/MEM มีไฟล์ 2 ไฟล์ ได้แก่ 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. ขอแสดงความยินดี

ใน Codelab นี้ คุณได้สร้างคลัสเตอร์ HPC ที่ดำเนินการบนระบบคลาวด์และมีการปรับขนาดอัตโนมัติ รวมถึงเรียกใช้การจำลองไดนามิกของโมเลกุลที่เร่งการแสดงผลด้วย GPU ด้วย Gromacs บน Google Cloud

กำลังล้างข้อมูล

โปรดดำเนินการต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ใน Codelab นี้

แนะนำ: ลบคลัสเตอร์ HPC ด้วย terform

  1. เปิด Cloud Shell และไปที่ไดเรกทอรีตัวอย่าง gromacs/tf/slurm
cd ~/rcc-apps/gromacs/tf/slurm
  1. เรียกใช้ "ทำลาย" เพื่อลบทรัพยากรทั้งหมด
make destroy

หรือ ลบโปรเจ็กต์ (มีประสิทธิภาพและทำลายมากที่สุด)

วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างสำหรับ Codelab

ข้อควรระวัง: การลบโครงการจะมีผลกระทบดังต่อไปนี้

  • ทุกอย่างในโปรเจ็กต์จะถูกลบ หากคุณใช้โปรเจ็กต์ที่มีอยู่สำหรับ Codelab นี้ เมื่อคุณลบโปรเจ็กต์ดังกล่าว คุณจะลบงานอื่นๆ ที่ทำในโปรเจ็กต์ดังกล่าวด้วย
  • รหัสโปรเจ็กต์ที่กำหนดเองสูญหาย เมื่อสร้างโปรเจ็กต์นี้ คุณอาจสร้างรหัสโปรเจ็กต์ที่กําหนดเองที่ต้องการใช้ในอนาคต หากต้องการเก็บ URL ที่ใช้รหัสโปรเจ็กต์ไว้ เช่น URL ของ appspot.com ให้ลบทรัพยากรที่เลือกภายในโปรเจ็กต์แทนการลบทั้งโปรเจ็กต์

หากคุณวางแผนที่จะสำรวจ Codelab และการเริ่มต้นใช้งานอย่างรวดเร็วหลายรายการ การใช้โปรเจ็กต์ซ้ำจะช่วยให้คุณหลีกเลี่ยงไม่ให้เกินขีดจำกัดโควต้าของโปรเจ็กต์

  1. ใน Cloud Console ให้ไปที่หน้าจัดการทรัพยากร ไปที่หน้าจัดการทรัพยากร
  2. ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ c01e35138ac49503.png
  3. ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์แล้วคลิกปิดเครื่องเพื่อลบโปรเจ็กต์