เกี่ยวกับ Codelab นี้
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 ไว้
- เปิด Cloud Shell ใน GCP
- โคลนที่เก็บ 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
กระบวนการสร้างอาจใช้เวลา 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 เครื่อง
- เปิด Cloud Shell ใน GCP
- โคลนที่เก็บ 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 ของคุณเองในส่วนก่อนหน้าของ Codelab นี้ คุณจะต้องตั้งค่าตัวแปรสภาพแวดล้อม GMX_IMAGE ด้วย
ส่งออก GMX_IMAGE="projects/${GMX_PROJECT}/global/images/gromacs-gcp-foss-latest"
- สร้างแผนด้วยคำสั่ง create ซึ่งจะเรียกใช้
terraform init && terraform plan
make plan
- ทำให้คลัสเตอร์ใช้งานได้ กระบวนการตั้งค่าจะใช้เวลาเพียงไม่กี่นาทีเนื่องจาก Gromacs และทรัพยากร Dependency จะได้รับการติดตั้งล่วงหน้าในคลัสเตอร์ของคุณ
make apply
- 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}
- เมื่อคุณเชื่อมต่อกับโหนดการเข้าสู่ระบบแล้ว ให้ตรวจสอบว่าคุณได้ติดตั้ง 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
โกรแม็กเป็นซอฟต์แวร์การวิจัยที่ใช้เพื่อจำลองพลวัตของโมเลกุลและคำนวณโครงสร้างโมเลกุลภายใต้ข้อจำกัดในการลดการใช้พลังงาน การเปรียบเทียบที่ระบุในอิมเมจ VM สำหรับ Codelab นี้จะมุ่งเน้นที่ไดนามิกของโมเลกุล ซึ่งเป็นวิวัฒนาการของระบบอะตอม
ในพลวัตของโมเลกุล จะมีการจำลองตำแหน่ง อัตราความเร็ว และความเร่งของอะตอมโดยใช้กฎการเคลื่อนที่ของนิวตัน
โดยที่ คือตำแหน่งของอะตอม i, t คือเวลา,
คือมวลของอะตอม i และ
คือแรงไม่ยึดเหนี่ยวต่ออะตอม i เนื่องจากอะตอม j และ
คือแรงที่เกิดจากปฏิกิริยามีพันธะ จากอุณหภูมิ ความดัน ตำแหน่งของอะตอม และอัตราความเร็วของอะตอม จะคำนวณแรงและระบบจะผนวกรวมเชิงตัวเลขเพื่อให้ได้อัตราความเร็วและตำแหน่งใหม่ของอะตอม กระบวนการนี้จะเกิดขึ้นซ้ำเพื่อจำลองไดนามิกของโมเลกุลในช่วงเวลาหนึ่งๆ
อิมเมจ Gromacs (รูปที่คุณสร้างหรือรูปที่ให้ไว้) มาพร้อมกับตัวเปรียบเทียบ 3 ตัว
- benchMEM
- benchRIB
- 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 ของคลัสเตอร์
- ส่งงานแบบกลุ่มโดยใช้คำสั่ง 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
- เมื่องานเสร็จสิ้นแล้ว คุณควรเห็นไดเรกทอรีชื่อ
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
- เปิด Cloud Shell และไปที่ไดเรกทอรีตัวอย่าง
gromacs/tf/slurm
cd ~/rcc-apps/gromacs/tf/slurm
- เรียกใช้ "ทำลาย" เพื่อลบทรัพยากรทั้งหมด
make destroy
หรือ ลบโปรเจ็กต์ (มีประสิทธิภาพและทำลายมากที่สุด)
วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างสำหรับ Codelab
ข้อควรระวัง: การลบโครงการจะมีผลกระทบดังต่อไปนี้
- ทุกอย่างในโปรเจ็กต์จะถูกลบ หากคุณใช้โปรเจ็กต์ที่มีอยู่สำหรับ Codelab นี้ เมื่อคุณลบโปรเจ็กต์ดังกล่าว คุณจะลบงานอื่นๆ ที่ทำในโปรเจ็กต์ดังกล่าวด้วย
- รหัสโปรเจ็กต์ที่กำหนดเองสูญหาย เมื่อสร้างโปรเจ็กต์นี้ คุณอาจสร้างรหัสโปรเจ็กต์ที่กําหนดเองที่ต้องการใช้ในอนาคต หากต้องการเก็บ URL ที่ใช้รหัสโปรเจ็กต์ไว้ เช่น URL ของ appspot.com ให้ลบทรัพยากรที่เลือกภายในโปรเจ็กต์แทนการลบทั้งโปรเจ็กต์
หากคุณวางแผนที่จะสำรวจ Codelab และการเริ่มต้นใช้งานอย่างรวดเร็วหลายรายการ การใช้โปรเจ็กต์ซ้ำจะช่วยให้คุณหลีกเลี่ยงไม่ให้เกินขีดจำกัดโควต้าของโปรเจ็กต์
- ใน Cloud Console ให้ไปที่หน้าจัดการทรัพยากร ไปที่หน้าจัดการทรัพยากร
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์แล้วคลิกปิดเครื่องเพื่อลบโปรเจ็กต์