1. مقدمه
آخرین به روز رسانی: 2022-04-25
آنچه خواهید ساخت
در این لبه کد، شما یک خوشه محاسباتی با عملکرد بالا (HPC) با مقیاس خودکار را در Google Cloud مستقر خواهید کرد. استقرار Terraform این خوشه را با Gromacs نصب شده از طریق Spack ایجاد می کند. این خوشه با زمانبندی کار Slurm مدیریت می شود. وقتی خوشه ایجاد شد، معیارهای benchMEM، benchPEP یا benchRIB را اجرا خواهید کرد.
آنچه خواهید آموخت
- نحوه استقرار یک خوشه HPC که از زمانبندی کار Slurm پشتیبانی می کند
- نحوه اجرای شبیهسازی دینامیک مولکولی شتابدار GPU با Gromacs در Google Cloud با استفاده از یک کار دستهای Slurm
آنچه شما نیاز خواهید داشت
2. راه اندازی
برای تکمیل این کد، باید APIهای Compute Engine و Cloud Build را فعال کنید. برای فعال کردن Compute Engine و Cloud Build API ها، Cloud Shell خود را باز کرده و دستورات زیر را اجرا کنید. به یاد داشته باشید که ID پروژه خود را جایگزین کنید
gcloud config set project <PROJECT_ID> gcloud services enable compute.googleapis.com gcloud services enable cloudbuild.googleapis.com
احتیاط: اگر قصد دارید از SSH شخص ثالث (مثلا OpenSSH) برای اتصال به خوشه خود استفاده کنید، مطمئن شوید که یک کلید ssh را با استفاده از ورود به سیستم عامل به نمایه هویت ابری خود متصل کرده اید. درباره افزودن کلیدهای SSH به نمایه هویت ابری خود بیشتر بیاموزید .
3. [اختیاری] یک تصویر GCP VM با Gromacs ایجاد کنید
برای این کد لبه، ما یک تصویر از پیش ساخته شده برای شما ارائه کردهایم، زیرا فرآیند ساخت میتواند تا ۲ ساعت طول بکشد تا Gromacs و همه وابستگیهای آن نصب شود. اگر می خواهید از این تصویر از پیش ساخته شده برای صرفه جویی در زمان استفاده کنید، می توانید به بخش بعدی بروید.
هنگام اجرای برنامه های تحقیقاتی در Google Cloud، گزینه های زیادی برای نصب و راه اندازی برنامه شما وجود دارد. در این بخش از Codelab، یک تصویر ماشین مجازی ایجاد میکنید که در بالای تصویر slurm-gcp (CentOS7) VM ساخته میشود. در طول فرآیند ایجاد، کامپایلر، تمام وابستگی های Gromacs و Gromacs نصب خواهند شد.
خط لوله Gromacs Cloud Build در مخزن RCC Apps دستورالعمل های لازم برای نصب Gromacs را در بر می گیرد. فرآیند نصب از 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 بررسی کنید
فرآیند ساخت ممکن است تا دو ساعت طول بکشد. برای تسریع در این امر، ممکن است به منظور بهبود عملکرد ساخت، شمای فایل پیکربندی ساخت خود را تغییر دهید تا نوع دستگاه را تغییر دهید. این را می توان با استفاده از متغیر ساخت _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 مستقر کنید
در این بخش، از Terraform برای استقرار یک خوشه HPC مقیاسپذیر خودکار، با نصب زمانبندی کار Slurm استفاده خواهید کرد. این خوشه با گره های محاسباتی که هر کدام دارای 8 vCPU و 1 GPU Nvidia® Tesla V100 هستند، مستقر می شود.
- Cloud Shell خود را در GCP باز کنید.
- مخزن FluidNumerics/rcc-apps را کلون کنید
cd ~ git clone https://github.com/FluidNumerics/rcc-apps.git
- تغییر به دایرکتوری gromacs terraform:
cd ~/rcc-apps/gromacs/tf/slurm
- یک پلان زمینی ایجاد و مرور کنید. متغیرهای محیطی
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 به گره ورود ایجاد شده در مرحله قبل. می توانید این گره را در مرحله قبل ببینید (احتمالاً gromacs-login0 نامیده می شود) . می توانید این کار را با کلیک بر روی دکمه SSH در کنار لیست موارد VM در آیتم منوی کنسول 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
5. BenchRIB Benchmark را اجرا کنید
Gromacs نرم افزار تحقیقاتی است که برای شبیه سازی دینامیک مولکولی و محاسبه ساختارهای مولکولی تحت محدودیت های کمینه سازی انرژی استفاده می شود. معیارهای ارائه شده در تصویر VM برای این آزمایشگاه کد روی دینامیک مولکولی، تکامل سیستمهای اتم تمرکز دارد.
در دینامیک مولکولی، موقعیتها، سرعتها و شتابهای اتمها با استفاده از قوانین حرکت نیوتن شبیهسازی میشوند:
کجا، موقعیت اتم i است، t زمان است،
جرم اتم i و است
نیروی غیر پیوندی بر اتم i ناشی از اتم j و است
نیروهای ناشی از فعل و انفعالات پیوندی هستند. با توجه به دما، فشار، موقعیت اتم و سرعت اتم، نیروها محاسبه شده و سیستم به صورت عددی یکپارچه می شود تا سرعت ها و موقعیت های اتمی جدید به دست آید. این فرآیند برای شبیه سازی دینامیک مولکولی برای یک دوره زمانی معین تکرار می شود.
تصویر Gromacs (چه آن چیزی که شما ایجاد کردهاید یا آن چیزی که ارائه کردهاید) دارای سه معیار است
- benchMEM
- BenchRIB
- benchPEP
این معیارها از مجموعه معیارهای Free Gromacs دکتر کوتزنر هستند و مجموعه استاندارد شبیه سازی دینامیک مولکولی گذرا هستند. هر معیار از نظر تعداد اتم ها و مدت زمان شبیه سازی متفاوت است. تنظیمات مربوط به هر شبیه سازی در جدول زیر آورده شده است.
متریک / معیار | benchMEM | BenchRIB | benchPEP |
تعداد اتم ها | 81743 | 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 |
مرحله زمان / fs | 2 | 4 | 2 |
شعاع قطع / نانومتر | 1 | 1 | 1.2 |
فاصله شبکه PME / نانومتر | 0.12 | 0.135 | 0.16 |
برای اجرای معیار، یک کار دستهای Slurm ارسال میکنید. بهطور پیشفرض، اسکریپت دستهای ارائهشده، بنچمارک BenchRIB را اجرا میکند. دکهای ورودی که پیکربندیهای معیارهای ارائهشده را تعریف میکنند در تصویر Gromacs VM در زیر /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) حدود 8 میلیون اتم را شبیهسازی میکند و به گونهای پیکربندی شده است که 5000 مرحله زمانی (با 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 با مقیاس خودکار و بومی ابر ایجاد کردید و یک شبیهسازی دینامیک مولکولی شتابدار GPU را با Gromacs در Google Cloud اجرا کردید!
تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این کد لبه:
توصیه می شود: کلاستر HPC را با Terraform حذف کنید
- پوسته ابری خود را باز کنید و به فهرست راهنمای
gromacs/tf/slurm
بروید
cd ~/rcc-apps/gromacs/tf/slurm
- برای حذف همه منابع، make kill را اجرا کنید.
make destroy
یا پروژه را حذف کنید (موثرترین و مخرب ترین)
ساده ترین راه برای حذف صورتحساب، حذف پروژه ای است که برای Codelab ایجاد کرده اید.
احتیاط : حذف یک پروژه دارای اثرات زیر است:
- همه چیز در پروژه حذف می شود. اگر از یک پروژه موجود برای این کد لبه استفاده کرده اید، وقتی آن را حذف می کنید، هر کار دیگری را که در پروژه انجام داده اید نیز حذف می کنید.
- شناسه های پروژه سفارشی گم می شوند. وقتی این پروژه را ایجاد کردید، ممکن است یک ID پروژه سفارشی ایجاد کرده باشید که می خواهید در آینده از آن استفاده کنید. برای حفظ URL هایی که از شناسه پروژه استفاده می کنند، مانند URL appspot.com ، به جای حذف کل پروژه، منابع انتخابی داخل پروژه را حذف کنید.
اگر قصد کاوش چندین کد و شروع سریع را دارید، استفاده مجدد از پروژهها میتواند به شما در جلوگیری از تجاوز از محدودیتهای سهمیه پروژه کمک کند.
- در Cloud Console، به صفحه مدیریت منابع بروید. به صفحه مدیریت منابع بروید
- در لیست پروژه، پروژه ای را که می خواهید حذف کنید انتخاب کنید و سپس روی Delete کلیک کنید
.
- در گفتگو، ID پروژه را تایپ کنید و سپس بر روی Shut down کلیک کنید تا پروژه حذف شود.