مرا به خاطر بسپار

SLURM چیست؟

بازدید: 275 آخرین به‌روزرسانی: 15 شهریور 1405

مقدمه

تا به حال به این فکر کرده‌اید که وقتی صدها پژوهشگر هم‌زمان می‌خواهند برنامه‌های سنگین خود را روی یک ابررایانه با هزاران هسته پردازشی اجرا کنند، چه کسی تصمیم می‌گیرد کدام کار، روی کدام بخش از سیستم و در چه زمانی اجرا شود؟ پاسخ این پرسش در قلب هر مرکز محاسبات با کارایی بالا نهفته است: یک «زمان‌بند بار کاری» یا Workload Manager .در دنیای ابررایانش، شناخته‌شده‌ترین و پرکاربردترین این ابزارها SLURM نام دارد.
در این مقاله به زبان ساده توضیح می‌دهیم که SLURM چیست، چه مشکلی را حل می‌کند، چگونه کار می‌کند و چطور می‌توانید اولین کار خود را روی یک کلاستر مجهز به SLURM اجرا کنید.

SLURM چیست؟

SLURM (مخفف Simple Linux Utility for Resource Management) یک سامانه‌ متن‌باز مدیریت منابع و زمان‌بندی کار است که برای کلاسترها و ابررایانه‌های مبتنی بر لینوکس طراحی شده است. به بیان ساده، SLURM نرم‌افزاری است که تعیین می‌کند کارهای کاربران چه زمانی و روی کدام منابع محاسباتی کلاستر اجرا شوند.
امروزه SLURM روی بخش بزرگی از قدرتمندترین ابررایانه‌های جهان (از جمله بسیاری از سیستم‌های فهرست TOP500) اجرا می‌شود و به‌دلیل متن‌باز بودن، مقیاس‌پذیری بالا و انعطاف‌پذیری، به یک استاندارد عملی در این حوزه تبدیل شده است.
به عبارت دقیق‌تر، SLURM سه وظیفه‌ی اصلی بر عهده دارد:
  • تخصیص انحصاری یا اشتراکی منابع (گره‌های محاسباتی) به کاربران برای مدتی مشخص
  • فراهم‌کردن چارچوبی برای اجرا و مدیریت کارها روی منابع تخصیص‌یافته
  • و مدیریت صفِ کارهای در انتظار برای حل تعارض بر سر منابع محدود.

Slurmچه مشکلی را حل میکند؟

یک ابررایانه منبعی گران‌قیمت و مشترک است. بدون یک زمان‌بند، اجرای هم‌زمان کارها به هرج‌ومرج منجر می‌شود؛ ممکن است دو کار سنگین روی یک گره با هم تداخل کنند، منابع بیکار بمانند یا کاربران نتوانند سهم منصفانه‌ای از سیستم داشته باشند.
SLURM این چالش‌ها را به این شکل حل می‌کند:
  • استفاده‌ی بهینه از منابع: گره‌های بیکار را شناسایی و کارهای در صف را روی آن‌ها اجرا می‌کند تا بهره‌وری سیستم به حداکثر برسد.
  • عدالت میان کاربران: با سیاست‌های اولویت‌بندی و سهمیه‌بندی، اطمینان می‌دهد که منابع به‌طور منصفانه میان کاربران و گروه‌های پژوهشی تقسیم شوند.
  • مدیریت صف: وقتی تقاضا بیشتر از منابع موجود است، کارها را در صف قرار می‌دهد و بر اساس اولویت اجرا می‌کند.
  • حسابداری و گزارش گیری:‌ میزان مصرف منابع توسط هر کاربر را ثبت می‌کند که برای تخصیص بودجه و تحلیل بهره‌وری حیاتی است.

معماری SLURM چگونه است؟

معماری SLURM از چند مؤلفه‌ی اصلی تشکیل شده است که در کنار هم کار می‌کنند:
  • فرایند پس‌زمینه (Daemon) کنترل‌گر مرکزی (slurmctld)
  • مغز متفکر سیستم که روی گره مدیریت اجرا می‌شود، صف کارها و وضعیت منابع را رصد می‌کند و تصمیم می‌گیرد هر کار کجا اجرا شود.
  • فرایند پس‌زمینه گره محاسباتی (slurmd)
  • روی هر گره‌ی محاسباتی اجرا می‌شود، دستورها را از کنترل‌گر دریافت می‌کند، کارها را اجرا می‌کند و وضعیت گره را گزارش می‌دهد.
  • فرایند پس‌زمینه حسابداری (slurmdbd)
  • اطلاعات مصرف منابع و تاریخچه‌ی کارها را در یک پایگاه‌داده ذخیره می‌کند.

دستورهای پرکاربرد SLURM

کار با SLURM عمدتاً از طریق چند دستور ساده انجام می‌شود. مهم‌ترین آن‌ها عبارت‌اند از:
  • sbatch: ارسال یک اسکریپت کار (batch job) به صف برای اجرا
  • srun: اجرای فوری یک کار یا اجرای موازی یک برنامه روی منابع تخصیص‌یافته
  • squeue: مشاهده‌ی وضعیت کارهای در صف و در حال اجرا
  • scancel: لغو یک کار در حال اجرا یا در انتظار
  • sinfo: نمایش وضعیت گره‌ها و پارتیشن‌های کلاستر
  • sacct: مشاهده‌ی اطلاعات حسابداری کارهای گذشته و جاری

اجرای اولین کار: یک مثال عملی

ساده‌ترین راه برای اجرای یک کار، نوشتن یک اسکریپت دسته‌ای و ارسال آن با دستور sbatch است. خطوطی که با #SBATCH شروع می‌شوند، منابع موردنیاز کار را به SLURM اعلام می‌کنند.
نمونه‌ی زیر یک کار ساده را تعریف می‌کند:
#!/bin/bash
#SBATCH --job-name=my_first_job
#SBATCH --partition=compute
#SBATCH --nodes=1
#SBATCH --ntasks=4
#SBATCH --time=00:30:00
#SBATCH --output=result_%j.log
در این اسکریپت، کار با نام my_first_job روی پارتیشنcompute، با یک گره و چهار وظیفه (task)، حداکثر برای ۳۰ دقیقه اجرا می‌شود و خروجی در فایلی با شماره‌ی کار (%j) ذخیره می‌گردد.
برای ارسال این کار کافی است دستور زیر را اجرا کنید:
sbatch my_job.sh
پس از ارسال، می‌توانید با squeue وضعیت کار خود را ببینید و پس از اتمام، خروجی را در فایل لاگ مشاهده کنید.همین چند خط، دروازه‌ی ورود شما به دنیای محاسبات با کارایی بالا است.

اجرای کارهای پردازنده گرافیکی (GPU) با SLURM

بسیاری از کارهای امروزی مانند آموزش مدل‌های یادگیری عمیق، شبیه‌سازی‌های علمی و پردازش تصویر به پردازنده‌ی گرافیکی(GPU) نیاز دارند. SLURM علاوه بر مدیریت پردازنده و حافظه، منابع GPU را نیز به‌عنوان یک منبع قابل‌زمان‌بندی مدیریت می‌کند. این قابلیت با مفهومی به نام GRES (منابع عمومی یا Generic Resources) پیاده‌سازی شده است.
برای درخواست پردازنده‌ی گرافیکی در یک کار، کافی است در اسکریپت خود تعداد و در صورت نیاز نوع GPU موردنیاز را مشخص کنید. مهم‌ترین گزینه‌ها عبارت‌اند از:
  • gres=gpu:N--
  • درخواست N عدد پردازنده‌ی گرافیکی برای کار (مثلاً gpu:2).
  • gpus=N--
  • روش جدیدتر برای تعیین تعداد کل GPUها.
  • gpus-per-node یا gpus-per-task--
  • تعیین تعداد GPU به ازای هر گره یا هر وظیفه.
  • partition=gpu--
  • ارسال کار به پارتیشن مخصوص گره‌های مجهز به GPU (در صورت وجود).
نمونه‌ی زیر یک کار آموزش مدل یادگیری عمیق را تعریف می‌کند که دو پردازنده‌ی گرافیکی درخواست می‌کند:
#!/bin/bash
#SBATCH --job-name=gpu_training
#SBATCH --partition=gpu
#SBATCH --gres=gpu:2
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --time=02:00:00
#SBATCH --output=gpu_%j.log
 
module load cuda/12.2
srun python train.py
برای تهیه بهترین سرور ابری پردازشی در ایران در خدمت شما هستیم

راه‌اندازی SLURM روی ابر سیمرغ

یکی از کاربردی‌ترین مزیت‌های SLURM این است که برای استفاده از آن لزوماً نیازی به داشتن یک ابررایانه‌ی فیزیکی ندارید. ابر سیمرغ امکان تهیه‌ی خدمات پردازش ابری را فراهم می‌کند؛ به این معنا که می‌توانید چند منبع پردازشی (ماشین مجازی یا گره محاسباتی) از سیمرغ تهیه کنید و با نصب و پیکربندی SLURM روی آن‌ها، یک کلاستر مجازی اختصاصی برای خود بسازید.
مسیر کلی انجام این کار به‌صورت زیر است:
  • تهیه‌ی منابع
چند گره (ماشین مجازی) از سرویس‌های پردازش ابری سیمرغ تهیه کنید و در صورت نیاز یکی را به‌عنوان گره مدیریت (master) و بقیه را به‌عنوان گره‌های محاسباتی در نظر بگیرید.
  • نصب SLURM
بسته‌های SLURM را روی همه‌ی گره‌ها نصب کنید؛ دیمن slurmctld روی گره مدیریت و دیمن slurmd روی گره‌های محاسباتی اجرا می‌شود.
  • پیکربندی
فایل slurm.conf را با مشخصات گره‌ها، پارتیشن‌ها و در صورت وجود منابع GPU تنظیم کنید و آن را میان همه‌ی گره‌ها همگام‌سازی کنید. راه‌اندازی: سرویس‌ها را فعال کنید و با دستور sinfo از سالم بودن و آماده‌به‌کار بودن کلاستر مجازی خود اطمینان حاصل کنید.
به این ترتیب یک محیط محاسباتی مقیاس‌پذیر و کاملاً در اختیار خود خواهید داشت که می‌توانید کارهای سنگین پردازشی و حتی کارهای مبتنی بر GPU را روی آن اجرا کنید، بدون آنکه درگیر هزینه و نگهداری سخت‌افزار فیزیکی شوید. برای آشنایی با خدمات پردازش ابری و امکانات سیمرغ می‌توانید به وب‌سایت ابر سیمرغ مراجعه کنید.

جمع بندی

SLURM ستون فقرات مدیریت منابع در ابررایانه‌های مدرن است؛ ابزاری که نظم، عدالت و بهره‌وری را به محیط‌های محاسباتی مشترک می‌آورد. آشنایی با مفاهیم پایه‌ای آن مانند پارتیشن‌ها، اسکریپت‌های دسته‌ای و دستورهای اصلی، نخستین گام برای هر پژوهشگر یا مهندسی است که می‌خواهد از قدرت پردازشی یک ابررایانه بهره ببرد. ابر سیمرغ نیز با بهره‌گیری از زمان‌بندهای استاندارد، امکان اجرای کارهای سنگین علمی و صنعتی را برای پژوهشگران فراهم می‌کند. در مقاله‌های بعدی به آموزش گام‌به‌گام نوشتن اسکریپت‌های پیشرفته‌ی SLURM و بهینه‌سازی کارهای موازی خواهیم پرداخت.

سوالات متداول

آیا SLURM رایگان است؟
بله، SLURM یک نرم‌افزار کاملاً متن‌باز و رایگان است که تحت مجوز GPL منتشر می‌شود.
تفاوت srun و sbatch چیست؟
دستور sbatch یک اسکریپت را به صف می‌فرستد تا در زمان مناسب اجرا شود، در حالی که srun کار را به‌صورت فوری روی منابع تخصیص‌یافته اجرا می‌کند.
SLURM چه رقبایی دارد؟
از جمله جایگزین‌های آن می‌توان به PBS/Torque، LSF و Grid Engine اشاره کرد، اما SLURM محبوب‌ترین گزینه در ابررایانه‌های امروزی است.
چطور بفهمم کارم چرا اجرا نمی‌شود؟ با اجرای squeue و بررسی ستون دلیل (REASON) می‌توانید بفهمید کار شما به‌دلیل کمبود منابع یا اولویت پایین در انتظار است.
تا چه حد این مطلب برای شما مفید بود؟
بر اساس رای 0 نفر

اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

ثبت نظر

نظر دادن