۱. مقدمه
آخرین بهروزرسانی: 2022-04-25
آنچه خواهید ساخت
در این آزمایشگاه کد، شما یک کلاستر محاسبات با کارایی بالا (HPC) با مقیاسپذیری خودکار را روی Google Cloud مستقر خواهید کرد. استقرار Terraform این کلاستر را با Gromacs نصب شده از طریق Spack ایجاد میکند. این کلاستر با زمانبند کار Slurm مدیریت خواهد شد. هنگامی که کلاستر ایجاد شد، شما بنچمارکهای benchMEM، benchPEP یا benchRIB را اجرا خواهید کرد.
آنچه یاد خواهید گرفت
- نحوه استقرار یک خوشه HPC که از زمانبند کار Slurm پشتیبانی میکند
- نحوه اجرای شبیهسازیهای دینامیک مولکولی شتابیافته با GPU با Gromacs در Google Cloud با استفاده از یک کار دستهای Slurm
آنچه شما نیاز خواهید داشت
۲. راهاندازی
برای تکمیل این آزمایشگاه کد، باید Compute Engine و Cloud Build APIs را فعال کنید. برای فعال کردن Compute Engine و Cloud Build APIs، Cloud Shell خود را باز کنید و دستورات زیر را اجرا کنید. به یاد داشته باشید که project-id خود را به جای در زیر.
gcloud config set project <PROJECT_ID> gcloud services enable compute.googleapis.com gcloud services enable cloudbuild.googleapis.com
احتیاط: اگر قصد دارید از SSH شخص ثالث (مثلاً OpenSSH) برای اتصال به کلاستر خود استفاده کنید، حتماً با استفاده از ورود به سیستم عامل، یک کلید ssh را به پروفایل هویت ابری خود پیوست کنید. درباره افزودن کلیدهای SSH به پروفایل هویت ابری خود بیشتر بدانید .
۳. [اختیاری] ایجاد یک تصویر ماشین مجازی GCP با Gromacs
برای این آزمایشگاه کد، ما یک تصویر از پیش ساخته شده برای شما فراهم کردهایم، زیرا فرآیند ساخت برای نصب Gromacs و تمام وابستگیهای آن میتواند تا ۲ ساعت طول بکشد. اگر میخواهید از این تصویر از پیش ساخته شده برای صرفهجویی در زمان استفاده کنید، میتوانید به بخش بعدی بروید.
هنگام اجرای برنامههای تحقیقاتی در Google Cloud، گزینههای زیادی برای نصب و استقرار برنامه شما وجود دارد. در این بخش از codelab، شما یک تصویر ماشین مجازی ایجاد خواهید کرد که بر روی تصویر ماشین مجازی slurm-gcp (CentOS7) ساخته میشود. در طول فرآیند ایجاد، کامپایلر، تمام وابستگیهای Gromacs و Gromacs نصب خواهند شد.
خط لوله Gromacs Cloud Build در مخزن RCC Apps دستورالعملهای لازم برای نصب Gromacs را در خود جای داده است. فرآیند نصب از Packer برای استقرار یک ماشین مجازی که 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 بررسی کنید.
فرآیند ساخت ممکن است تا دو ساعت طول بکشد. برای تسریع این امر، میتوانید طرحواره فایل پیکربندی ساخت خود را تغییر دهید تا نوع ماشین را تغییر دهید و عملکرد ساخت را بهبود بخشید. این کار را میتوان با استفاده از متغیر ساخت _MACHINE_TYPE انجام داد. برای مثال:
gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async --substitutions=_MACHINE_TYPE=n2-standard-64
پس از اتمام ساخت، یک تصویر ماشین مجازی در پروژه Google Cloud خود خواهید داشت که میتوانید از آن برای استقرار خوشه خود استفاده کنید.
۴. یک خوشه HPC با قابلیت مقیاسپذیری خودکار با Terraform مستقر کنید
در این بخش، شما از Terraform برای استقرار یک خوشه HPC با مقیاسپذیری خودکار، به همراه زمانبند کار Slurm نصب شده، استفاده خواهید کرد. این خوشه با گرههای محاسباتی که هر کدام دارای 8 vCPU و 1 Nvidia® Tesla V100 GPU هستند، مستقر خواهد شد.
- 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"
- اگر در بخش قبلی این آزمایشگاه کد، تصویر ماشین مجازی خودتان را ایجاد کردهاید، باید متغیر محیطی GMX_IMAGE را نیز تنظیم کنید.
صادرات GMX_IMAGE="projects/${GMX_PROJECT}/global/images/gromacs-gcp-foss-latest"
- طرح را با دستور make ایجاد کنید، که
terraform init && terraform planاجرا میکند.
make plan
- کلاستر را مستقر کنید. فرآیند راهاندازی فقط چند دقیقه طول میکشد زیرا گرومکس و وابستگیهای آن از قبل روی کلاستر شما نصب شدهاند.
make apply
- به گره ورود ایجاد شده در مرحله قبل از طریق SSH متصل شوید. میتوانید این گره را در مرحله قبل مشاهده کنید (احتمالاً با نام gromacs-login0 ) . میتوانید این کار را با کلیک بر روی دکمه SSH در کنار لیست نمونههای ماشین مجازی در منوی کنسول و انتخاب گزینه Compute Engine -> VM instance انجام دهید.
گزینه: این جفت دستور 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
۵. بنچمارک benchRIB را اجرا کنید
گرومکس یک نرمافزار تحقیقاتی است که برای شبیهسازی دینامیک مولکولی و محاسبه ساختارهای مولکولی تحت محدودیتهای کمینهسازی انرژی استفاده میشود. معیارهای ارائه شده در تصویر ماشین مجازی برای این آزمایشگاه کد، بر دینامیک مولکولی، تکامل سیستمهای اتمها، تمرکز دارند.
در دینامیک مولکولی، موقعیت، سرعت و شتاب اتمها با استفاده از قوانین حرکت نیوتن شبیهسازی میشوند:

کجا،
موقعیت اتم i ، t زمان،
جرم اتم i است و
نیروی غیرپیوندی وارد بر اتم i ناشی از اتم j است و
نیروهای ناشی از برهمکنشهای پیوندی هستند. با توجه به دما، فشار، موقعیت اتمها و سرعت اتمها، نیروها محاسبه میشوند و سیستم به صورت عددی انتگرالگیری میشود تا سرعتها و موقعیتهای جدید اتمها به دست آید. این فرآیند برای شبیهسازی دینامیک مولکولی برای یک دوره زمانی معین تکرار میشود.
تصویر گرومکس (یا همانی که شما ایجاد کردهاید یا همانی که ارائه شده است) دارای سه معیار است
- بنچمیم
- بنچریب
- بنچپپ
این معیارها از مجموعه معیارهای رایگان گرومکس دکتر کاتزنر هستند و مجموعهای استاندارد از شبیهسازیهای دینامیک مولکولی گذرا میباشند. هر معیار از نظر تعداد اتمها و مدت زمان شبیهسازی متفاوت است. پیکربندیهای مربوط به هر شبیهسازی در جدول زیر آمده است.
معیار / معیار | بنچمیم | بنچریب | بنچپپ |
تعداد اتمها | ۸۱,۷۴۳ | ۲,۱۳۶,۴۱۲ | ۱۲,۴۹۵,۵۰۳ |
اندازه سیستم / نانومتر | ۱۰.۸ در ۱۰.۲ در ۹.۶ | ۳۱.۲ در ۳۱.۲ در ۳۱.۲ | ۵۰.۰ × ۵۰.۰ × ۵۰.۰ |
گام زمانی / فمتوثانیه | ۲ | ۴ | ۲ |
شعاع قطع / نانومتر | ۱ | ۱ | ۱.۲ |
فاصله شبکه PME / نانومتر | ۰.۱۲ | ۰.۱۳۵ | ۰.۱۶ |
برای اجرای بنچمارک، شما یک کار دستهای Slurm ارسال خواهید کرد. به طور پیشفرض، اسکریپت دستهای ارائه شده، بنچمارک benchRIB را اجرا میکند. دکهای ورودی که پیکربندیهای مربوط به بنچمارکهای ارائه شده را تعریف میکنند، در تصویر ماشین مجازی Gromacs در مسیر /opt/share/gromacs گنجانده شدهاند. علاوه بر این، یک اسکریپت bash نمونه برای اجرای Gromacs در مسیر /opt/share موجود است.
برای این بخش، باید به گره ورود به کلاستر از طریق SSH متصل شوید.
- ارسال یک کار دستهای با استفاده از دستور 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) حدود ۸ میلیون اتم را شبیهسازی میکند و طوری پیکربندی شده است که ۵۰۰۰ گام زمانی (با ۴ گام زمانی بر ثانیه) را اجرا کند و حدود ۶ دقیقه طول بکشد تا تکمیل شود. میتوانید وضعیت کار خود را با این دستور زیر نظارت کنید:
watch squeue
وقتی کار شما از صف خارج شد، میتوانید با ctrl-C خارج شوید.
- وقتی کار تمام شد، باید دایرکتوری به نام
run/را ببینید که شامل خروجی شبیهسازی (تحتrun/MEM) و یک فایل لاگ در دایرکتوری فعلی شما به نامgromacs.outاست. دایرکتوریrun/MEMشامل دو فایلener.edrوmd.logاست. فایلener.edrانرژیهای سیستم، دما، فشار، اندازه جعبه، چگالی و ویرالها را در قالب دودویی قابل حمل ذخیره میکند. همانطور که پسوند نشان میدهد، فایلmd.logشامل لاگهایی برای شبیهسازی Gromacs است و علاوه بر اطلاعات لاگ از حلکنندههای particle-particle و 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
۶. تبریک
در این آزمایشگاه کد، شما یک خوشه HPC با مقیاسپذیری خودکار و بومی ابر ایجاد کردید و یک شبیهسازی دینامیک مولکولی شتابیافته با GPU را با Gromacs در Google Cloud اجرا کردید!
تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع مورد استفاده در این آزمایشگاه کد:
توصیه شده: خوشه HPC را با Terraform حذف کنید
- پوسته ابری خود را باز کنید و به دایرکتوری
gromacs/tf/slurmexample بروید.
cd ~/rcc-apps/gromacs/tf/slurm
- برای حذف تمام منابع، دستور make destroy را اجرا کنید.
make destroy
یا ، پروژه را حذف کنید (موثرترین و مخربترین)
سادهترین راه برای حذف هزینهها، حذف پروژهای است که برای codelab ایجاد کردهاید.
احتیاط : حذف یک پروژه اثرات زیر را دارد:
- همه چیز در پروژه حذف میشود. اگر از یک پروژه موجود برای این آزمایشگاه کد استفاده کردهاید، هنگام حذف آن، هر کار دیگری را که در پروژه انجام دادهاید نیز حذف میکنید.
- شناسههای پروژه سفارشی از بین میروند. هنگام ایجاد این پروژه، ممکن است یک شناسه پروژه سفارشی ایجاد کرده باشید که میخواهید در آینده از آن استفاده کنید. برای حفظ URLهایی که از شناسه پروژه استفاده میکنند، مانند URL appspot.com ، به جای حذف کل پروژه، منابع انتخاب شده را در داخل پروژه حذف کنید.
اگر قصد دارید چندین آزمایشگاه کد و شروع سریع را بررسی کنید، استفاده مجدد از پروژهها میتواند به شما کمک کند از محدودیت سهمیه پروژه فراتر نروید.
- در کنسول ابری، به صفحه مدیریت منابع بروید. به صفحه مدیریت منابع بروید
- در لیست پروژهها، پروژهای را که میخواهید حذف کنید انتخاب کنید و سپس روی «حذف» کلیک کنید.
. - در کادر محاورهای، شناسه پروژه را تایپ کنید و سپس برای حذف پروژه، روی خاموش کردن (Shut down) کلیک کنید.