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

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

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ เม.ย. 28, 2022
account_circleเขียนโดย Joseph Schoonover, Ross Thomson, Doug Jacobsen, Wyatt Gorman

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. ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์แล้วคลิกปิดเครื่องเพื่อลบโปรเจ็กต์