.TH scrun "1" "Slurm Commands" "Slurm 26.05" "Slurm Commands" .SH "نام (NAME)" \fBscrun\fR \- یک پراکسی زمان‌اجرای OCI برای Slurm. .SH "خلاصه دستور (SYNOPSIS)" .TP .SH "عملیات ایجاد (Create Operation)" \fBscrun\fR [\fIGLOBAL OPTIONS\fR...] \fIcreate\fR [\fICREATE OPTIONS\fR] <\fIcontainer-id\fR> .IP یک کانتینر جدید با container-id در دایرکتوری کاری فعلی آماده می‌کند. .RE .TP .SH "عملیات شروع (Start Operation)" \fBscrun\fR [\fIGLOBAL OPTIONS\fR...] \fIstart\fR <\fIcontainer-id\fR> .IP درخواست برای شروع و اجرای کانتینر در job. .RE .TP .SH "عملیات بررسی وضعیت (Query State Operation)" \fBscrun\fR [\fIGLOBAL OPTIONS\fR...] \fIstate\fR <\fIcontainer-id\fR> .IP وضعیت کانتینر را در قالب JSON تعریف‌شده توسط OCI خروجی می‌دهد. .RE .TP .SH "عملیات خاتمه (Kill Operation)" \fBscrun\fR [\fIGLOBAL OPTIONS\fR...] \fIkill\fR <\fIcontainer-id\fR> [\fIsignal\fR] .IP ارسال سیگنال (پیش‌فرض: SIGTERM) به کانتینر. .RE .TP .SH "عملیات حذف (Delete Operation)" \fBscrun\fR [\fIGLOBAL OPTIONS\fR...] \fIdelete\fR [\fIDELETE OPTIONS\fR] <\fIcontainer-id\fR> .IP آزادسازی تمام منابع اشغال‌شده توسط کانتینر به‌صورت محلی و از راه دور. .RE انجام عملیات‌های زمان‌اجرای OCI روی \fIcontainer-id\fR بر اساس: .br https://github.com/opencontainers/runtime-spec/blob/main/runtime.md \fBscrun\fR تلاش می‌کند تا حد امکان رفتار خط فرمانی \fBcrun\fR و \fBrunc\fR را شبیه‌سازی کند تا سازگاری به عنوان جایگزین مستقیم برای \fBDOCKER\fR و \fBpodman\fR حفظ شود. تمامی آرگومان‌های خط فرمان برای \fBcrun\fR و \fBrunc\fR به منظور سازگاری پذیرفته می‌شوند، اما بسته به کاربردپذیری‌شان ممکن است نادیده گرفته شوند. .SH "توضیحات (DESCRIPTION)" \fBscrun\fR یک پراکسی زمان‌اجرای OCI برای Slurm است. این ابزار به عنوان یک واسط مشترک برای \fBDOCKER\fR یا \fBpodman\fR عمل می‌کند تا امکان اجرای عملیات‌های کانتینری تحت Slurm در قالب jobها فراهم شود. \fBscrun\fR تمامی دستورها را به عنوان یک زمان‌اجرای منطبق با OCI می‌پذیرد، اما کانتینر و تمام STDIO را برای زمان‌بندی و اجرا به Slurm پروکسی می‌کند. کانتینرها از راه دور بر روی گره‌های محاسباتی Slurm با توجه به تنظیمات موجود در \fBoci.conf\fR(5) اجرا خواهند شد. \fBscrun\fR نیازمند آن است که همه کانتینرها مطابق با مشخصات OCI image باشند بر اساس: .br https://github.com/opencontainers/image-spec/blob/main/spec.md .SH "مقدار بازگشتی (RETURN VALUE)" در صورت موفقیت‌آمیز بودن عملیات، \fBscrun\fR مقدار 0 را برمی‌گرداند. در هر شرایط دیگری، \fBscrun\fR یک عدد غیر صفر را برای نشان دادن خطا برمی‌گرداند. .SH "گزینه‌های عمومی (GLOBAL OPTIONS)" .TP \fB\-\-cgroup\-manager\fR نادیده گرفته می‌شود. .IP .TP \fB\-\-debug\fR فعال‌سازی ثبت وقایع در سطح اشکال‌زدایی (debug). .IP .TP \fB\-f\fR <\fIslurm_conf_path\fR> استفاده از slurm.conf مشخص‌شده برای پیکربندی. .br پیش‌فرض: sysconfdir از \fBconfigure\fR در هنگام کامپایل .IP .TP \fB\-\-usage\fR نمایش راهنمای سریع درباره نحوه فراخوانی \fBscrun\fR .IP .TP \fB\-\-log\-format\fR=<\fIjson|text\fR> انتخاب اختیاری قالب برای ثبت وقایع. می‌تواند "json" یا "text" باشد. .br پیش‌فرض: text .IP .TP \fB\-\-root\fR=<\fIroot_path\fR> مسیر دایرکتوری spool برای سوکت‌های ارتباطی و دایرکتوری‌ها و فایل‌های موقت. این مسیر باید یک tmpfs باشد و هنگام راه‌اندازی مجدد سیستم پاک شود. .br پیش‌فرض: /run/user/\fI{user_id}\fR/scrun/ .IP .TP \fB\-\-rootless\fR نادیده گرفته می‌شود. تمامی دستورهای \fBscrun\fR همیشه بدون ریشه (rootless) هستند. .IP .TP \fB\-\-systemd\-cgroup\fR نادیده گرفته می‌شود. .IP .TP \fB\-v\fR افزایش میزان جزئیات ثبت وقایع. تکرار \-v میزان جزئیات را بیشتر افزایش می‌دهد. .IP .TP \fB\-V\fR, \fB\-\-version\fR چاپ اطلاعات نسخه و خروج. .IP.SH "گزینه‌های ایجاد (CREATE OPTIONS)" .TP \fB\-b\fR <\fIbundle_path\fR>, \fB\-\-bundle\fR=<\fIbundle_path\fR> مسیر به ریشهٔ دایرکتوری bundle. .br پیش‌فرض: دایرکتوری کاری فراخواننده .IP .TP \fB\-\-console\-socket\fR=<\fIconsole_socket_path\fR> مسیر اختیاری به یک سوکت AF_UNIX که توصیف‌گر فایلی را دریافت می‌کند که به سمت اصلی (master) شبه‌پایانهٔ کنسول اشاره دارد. .br پیش‌فرض: \fIنادیده گرفته می‌شود\fR .IP .TP \fB\-\-no\-pivot\fR نادیده گرفته می‌شود. .IP .TP \fB\-\-no\-new\-keyring\fR نادیده گرفته می‌شود. .IP .TP \fB\-\-pid\-file\fR=<\fIpid_file_path\fR> مشخص کردن فایلی برای قفل‌گذاری و ثبت شناسه فرایند (PID). .br پیش‌فرض: \fIنادیده گرفته می‌شود\fR .IP .TP \fB\-\-preserve\-fds\fR نادیده گرفته می‌شود. .IP .SH "گزینه‌های حذف (DELETE OPTIONS)" .TP \fB\-\-force\fR نادیده گرفته می‌شود. تمامی درخواست‌های حذف اجباری هستند و هر کار در حال اجرایی را خاتمه می‌دهند. .IP .SH "متغیرهای محیطی ورودی (INPUT ENVIRONMENT VARIABLES)" .TP \fBSCRUN_DEBUG\fR= تعیین سطح ثبت گزارش (logging). .IP .TP \fBSCRUN_STDERR_DEBUG\fR= تعیین سطح ثبت گزارش فقط برای خروجی خطای استاندارد. .IP .TP \fBSCRUN_SYSLOG_DEBUG\fR= تعیین سطح ثبت گزارش فقط برای syslog. .IP .TP \fBSCRUN_FILE_DEBUG\fR= تعیین سطح ثبت گزارش فقط برای فایل لاگ. .IP .SH "متغیرهای محیطی ورودی کار (JOB INPUT ENVIRONMENT VARIABLES)" .TP \fBSCRUN_ACCOUNT\fR به \fBSLURM_ACCOUNT\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_ACCTG_FREQ\fR به \fBSLURM_ACCTG_FREQ\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_BURST_BUFFER\fR به \fBSLURM_BURST_BUFFER\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_CLUSTER_CONSTRAINT\fR به \fBSLURM_CLUSTER_CONSTRAINT\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_CLUSTERS\fR به \fBSLURM_CLUSTERS\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_CONSTRAINT\fR به \fBSLURM_CONSTRAINT\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSLURM_CORE_SPEC\fR به \fBSLURM_ACCOUNT\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_CPU_BIND\fR به \fBSLURM_CPU_BIND\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_CPU_FREQ_REQ\fR به \fBSLURM_CPU_FREQ_REQ\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_CPUS_PER_GPU\fR به \fBSLURM_CPUS_PER_GPU\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_CPUS_PER_TASK\fR به \fBSRUN_CPUS_PER_TASK\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_DELAY_BOOT\fR به \fBSLURM_DELAY_BOOT\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_DEPENDENCY\fR به \fBSLURM_DEPENDENCY\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_DISTRIBUTION\fR به \fBSLURM_DISTRIBUTION\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_EPILOG\fR به \fBSLURM_EPILOG\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_EXACT\fR به \fBSLURM_EXACT\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_EXCLUSIVE\fR به \fBSLURM_EXCLUSIVE\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_GPU_BIND\fR به \fBSLURM_GPU_BIND\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_GPU_FREQ\fR به \fBSLURM_GPU_FREQ\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_GPUS\fR به \fBSLURM_GPUS\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_GPUS_PER_NODE\fR به \fBSLURM_GPUS_PER_NODE\fR در \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_GPUS_PER_SOCKET\fR به \fBSLURM_GPUS_PER_SOCKET\fR در \fBsalloc\fR(1) مراجعه کنید. .IP.TP \fBSCRUN_GPUS_PER_TASK\fR به \fBSLURM_GPUS_PER_TASK\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_GRES_FLAGS\fR به \fBSLURM_GRES_FLAGS\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_GRES\fR به \fBSLURM_GRES\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_HINT\fR به \fBSLURM_HIST\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_JOB_NAME\fR به \fBSLURM_JOB_NAME\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_JOB_NODELIST\fR به \fBSLURM_JOB_NODELIST\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_JOB_NUM_NODES\fR به \fBSLURM_JOB_NUM_NODES\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_LABELIO\fR به \fBSLURM_LABELIO\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_MEM_BIND\fR به \fBSLURM_MEM_BIND\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_MEM_PER_CPU\fR به \fBSLURM_MEM_PER_CPU\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_MEM_PER_GPU\fR به \fBSLURM_MEM_PER_GPU\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_MEM_PER_NODE\fR به \fBSLURM_MEM_PER_NODE\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_MPI_TYPE\fR به \fBSLURM_MPI_TYPE\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_NCORES_PER_SOCKET\fR به \fBSLURM_NCORES_PER_SOCKET\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_NETWORK\fR به \fBSLURM_NETWORK\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_NSOCKETS_PER_NODE\fR به \fBSLURM_NSOCKETS_PER_NODE\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_NTASKS\fR به \fBSLURM_NTASKS\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_NTASKS_PER_CORE\fR به \fBSLURM_NTASKS_PER_CORE\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_NTASKS_PER_GPU\fR به \fBSLURM_NTASKS_PER_GPU\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_NTASKS_PER_NODE\fR به \fBSLURM_NTASKS_PER_NODE\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_NTASKS_PER_TRES\fR به \fBSLURM_NTASKS_PER_TRES\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_OPEN_MODE\fR به \fBSLURM_MODE\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_OVERCOMMIT\fR به \fBSLURM_OVERCOMMIT\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_OVERLAP\fR به \fBSLURM_OVERLAP\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_PARTITION\fR به \fBSLURM_PARTITION\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_POWER\fR به \fBSLURM_POWER\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_PROFILE\fR به \fBSLURM_PROFILE\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_PROLOG\fR به \fBSLURM_PROLOG\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_QOS\fR به \fBSLURM_QOS\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_REMOTE_CWD\fR به \fBSLURM_REMOTE_CWD\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_REQ_SWITCH\fR به \fBSLURM_REQ_SWITCH\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_RESERVATION\fR به \fBSLURM_RESERVATION\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_SIGNAL\fR به \fBSLURM_SIGNAL\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_SLURMD_DEBUG\fR به \fBSLURMD_DEBUG\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_SPREAD_JOB\fR به \fBSLURM_SPREAD_JOB\fR از \fBsrun\fR(1) مراجعه کنید. .IP .TP \fBSCRUN_TASK_EPILOG\fR به \fBSLURM_TASK_EPILOG\fR از \fBsrun\fR(1) مراجعه کنید. .IP.TP \fBSCRUN_TASK_PROLOG\fR نگاه کنید به \fBSLURM_TASK_PROLOG\fR از \fBsrun\fR(1). .IP .TP \fBSCRUN_THREAD_SPEC\fR نگاه کنید به \fBSLURM_THREAD_SPEC\fR از \fBsrun\fR(1). .IP .TP \fBSCRUN_THREADS_PER_CORE\fR نگاه کنید به \fBSLURM_THREADS_PER_CORE\fR از \fBsrun\fR(1). .IP .TP \fBSCRUN_THREADS\fR نگاه کنید به \fBSLURM_THREADS\fR از \fBsrun\fR(1). .IP .TP \fBSCRUN_TIMELIMIT\fR نگاه کنید به \fBSLURM_TIMELIMIT\fR از \fBsrun\fR(1). .IP .TP \fBSCRUN_TRES_BIND\fR همانند \fB\-\-tres\-bind\fR .IP .TP \fBSCRUN_TRES_PER_TASK\fR نگاه کنید به \fBSLURM_TRES_PER_TASK\fR از \fBsrun\fR(1). .IP .TP \fBSCRUN_UNBUFFEREDIO\fR نگاه کنید به \fBSLURM_UNBUFFEREDIO\fR از \fBsrun\fR(1). .IP .TP \fBSCRUN_USE_MIN_NODES\fR نگاه کنید به \fBSLURM_USE_MIN_NODES\fR از \fBsrun\fR(1). .IP .TP \fBSCRUN_WAIT4SWITCH\fR نگاه کنید به \fBSLURM_WAIT4SWITCH\fR از \fBsrun\fR(1). .IP .TP \fBSCRUN_WCKEY\fR نگاه کنید به \fBSLURM_WCKEY\fR از \fBsrun\fR(1). .IP .TP \fBSCRUN_WORKING_DIR\fR نگاه کنید به \fBSLURM_WORKING_DIR\fR از \fBsrun\fR(1). .IP .SH "متغیرهای محیطی خروجی (OUTPUT ENVIRONMENT VARIABLES)" .TP \fBSCRUN_OCI_VERSION\fR نسخه اعلام‌شده سازگاری OCI کانتینر. .IP .TP \fBSCRUN_CONTAINER_ID\fR مقداری که به عنوان \fIcontainer_id\fR در طول عملیات create ارسال شده است. .IP .TP \fBSCRUN_PID\fR شناسه فرایند (PID) فرایندی که برای نظارت و کنترل کانتینر روی گره تخصیص استفاده می‌شود. .IP .TP \fBSCRUN_BUNDLE\fR مسیر دایرکتوری باندل کانتینر. .IP .TP \fBSCRUN_SUBMISSION_BUNDLE\fR مسیر دایرکتوری باندل کانتینر پیش از اعمال تغییرات توسط اسکریپت Lua. .IP .TP \fBSCRUN_ANNOTATION_*\fR فهرستی از حاشیه‌نویسی‌ها برگرفته از config.json کانتینر. .IP .TP \fBSCRUN_PID_FILE\fR مسیر فایل pid که قفل شده و با PID دستور scrun پر می‌شود. .IP .TP \fBSCRUN_SOCKET\fR مسیر سوکت کنترلی برای scrun. .IP .TP \fBSCRUN_SPOOL_DIR\fR مسیر فضای کاری برای تمام فایل‌های موقت کانتینر جاری. با عملیات deletion پاک‌سازی می‌شود. .IP .TP \fBSCRUN_SUBMISSION_CONFIG_FILE\fR مسیر فایل config.json کانتینر در زمان ارسال (submission). .IP .TP \fBSCRUN_USER\fR نام کاربری که عملیات create را فراخوانی کرده است. .IP .TP \fBSCRUN_USER_ID\fR شناسه عددی (ID) کاربری که عملیات create را فراخوانی کرده است. .IP .TP \fBSCRUN_GROUP\fR نام گروه اصلی کاربری که عملیات create را فراخوانی کرده است. .IP .TP \fBSCRUN_GROUP_ID\fR شناسه عددی (ID) گروه اصلی کاربری که عملیات create را فراخوانی کرده است. .IP .TP \fBSCRUN_ROOT\fR نگاه کنید به \fB\-\-root\fR. .IP .TP \fBSCRUN_ROOTFS_PATH\fR مسیر دایرکتوری ریشه کانتینر. .IP .TP \fBSCRUN_SUBMISSION_ROOTFS_PATH\fR مسیر دایرکتوری ریشه کانتینر در زمان ارسال (submission). .IP .TP \fBSCRUN_LOG_FILE\fR مسیر فایل گزارش (log) مربوط به scrun در طول عملیات create. .IP .TP \fBSCRUN_LOG_FORMAT\fR نوع قالب گزارش (log) در طول عملیات create. .IP.SH "متغیرهای محیطی خروجی کار (JOB OUTPUT ENVIRONMENT VARIABLES)" .TP \fBSLURM_*_HET_GROUP_#\fR برای یک تخصیص کار ناهمگن (heterogeneous)، متغیرهای محیطی برای هر مؤلفه به‌صورت جداگانه تنظیم می‌شوند. .IP .TP \fBSLURM_CLUSTER_NAME\fR نام کلاستری که کار روی آن در حال اجرا است. .IP .TP \fBSLURM_CONTAINER\fR بسته OCI (OCI Bundle) برای کار. .IP .TP \fBSLURM_CONTAINER_ID\fR شناسه OCI (OCI id) برای کار. .IP .TP \fBSLURM_CPUS_PER_GPU\fR تعداد CPUهای درخواستی به ازای هر GPU تخصیص‌یافته. .IP .TP \fBSLURM_CPUS_PER_TASK\fR تعداد CPUهای درخواستی به ازای هر وظیفه (task). .IP .TP \fBSLURM_DIST_PLANESIZE\fR اندازه توزیع سطحی (plane distribution size). فقط برای توزیع‌های سطحی تنظیم می‌شود. .IP .TP \fBSLURM_DISTRIBUTION\fR نوع توزیع برای کارهای تخصیص‌یافته. .IP .TP \fBSLURM_GPU_BIND\fR اتصال (binding) درخواستی وظایف به GPU. .IP .TP \fBSLURM_GPU_FREQ\fR بسامد (فرکانس) درخواستی GPU. .IP .TP \fBSLURM_GPUS\fR تعداد GPUهای درخواستی. .IP .TP \fBSLURM_GPUS_PER_NODE\fR تعداد GPU درخواستی به ازای هر گره تخصیص‌یافته. .IP .TP \fBSLURM_GPUS_PER_SOCKET\fR تعداد GPU درخواستی به ازای هر سوکت تخصیص‌یافته. .IP .TP \fBSLURM_GPUS_PER_TASK\fR تعداد GPU درخواستی به ازای هر وظیفه تخصیص‌یافته. .IP .TP \fBSLURM_HET_SIZE\fR برابر با تعداد مؤلفه‌ها در کار ناهمگن تنظیم می‌شود. .IP .TP \fBSLURM_JOB_ACCOUNT\fR نام حساب مرتبط با تخصیص کار. .IP .TP \fBSLURM_JOB_CPUS_PER_NODE\fR تعداد CPUهای دردسترس کار روی گره‌های موجود در تخصیص، با استفاده از قالب \fICPU_count\fR[(x\fInumber_of_nodes\fR)][,\fICPU_count\fR [(x\fInumber_of_nodes\fR)] ...]. برای مثال: SLURM_JOB_CPUS_PER_NODE=\(aq72(x2),36\(aq نشان می‌دهد که روی گره‌های اول و دوم (همان‌طور که در SLURM_JOB_NODELIST فهرست شده) تخصیص دارای ۷۲ پردازنده است، در حالی که گره سوم ۳۶ پردازنده دارد. \fBنکته\fR: افزونه \fBselect/linear\fR گره‌های کامل را به کارها تخصیص می‌دهد، بنابراین این مقدار نشان‌دهنده تعداد کل CPUها در گره‌های تخصیص‌یافته است. افزونه \fBselect/cons_tres\fR پردازنده‌های منفرد را به کارها تخصیص می‌دهد، بنابراین این عدد نشان‌دهنده تعداد CPUهای تخصیص‌یافته به کار است. .IP .TP \fBSLURM_JOB_END_TIME\fR برچسب زمان یونیکس (UNIX timestamp) برای زمان تخمینی پایان کار. .IP .TP \fBSLURM_JOB_GPUS\fR شناسه‌های سراسری GPU (global GPU IDs) برای GPUهای تخصیص‌یافته به این کار. شناسه‌های GPU نسبت به هیچ cgroup دستگاهی سنجیده نمی‌شوند، حتی اگر دستگاه‌ها با task/cgroup محدود شده باشند. فقط در کارهای دسته‌ای (batch) و تعاملی (interactive) تنظیم می‌شود. .IP .TP \fBSLURM_JOB_ID\fR شناسه تخصیص کار. .IP .TP \fBSLURM_JOB_NODELIST\fR فهرست گره‌های تخصیص‌یافته به کار. .IP .TP \fBSLURM_JOB_NUM_NODES\fR تعداد کل گره‌ها در تخصیص کار. .IP .TP \fBSLURM_JOB_PARTITION\fR نام پارتیشنی که کار در آن در حال اجرا است. .IP .TP \fBSLURM_JOB_QOS\fR کیفیت سرویس (QOS) برای تخصیص کار. .IP .TP \fBSLURM_JOB_RESERVATION\fR رزرو پیشرفته (advanced reservation) شامل تخصیص کار، در صورت وجود. .IP .TP \fBSLURM_JOB_START_TIME\fR برچسب زمان یونیکس (UNIX timestamp) برای زمان شروع کار. .IP .TP \fBSLURM_MEM_BIND\fR اتصال وظایف به حافظه (Memory binding). .IP .TP \fBSLURM_MEM_BIND_LIST\fR برابر با ماسک بیتی (bit mask) استفاده‌شده برای اتصال حافظه تنظیم می‌شود. .IP .TP \fBSLURM_MEM_BIND_PREFER\fR اگر گزینه \fBSLURM_MEM_BIND\fR شامل گزینه prefer باشد، روی \(lqprefer\(rq تنظیم می‌شود. .IP .TP \fBSLURM_MEM_BIND_TYPE\fR برابر با نوع اتصال حافظه مشخص‌شده با گزینه \fBSLURM_MEM_BIND\fR تنظیم می‌شود. مقادیر ممکن عبارتند از \(lqnone\(rq، \(lqrank\(rq، \(lqmap_mem:\(rq، \(lqmask_mem:\(rq و \(lqlocal\(rq. .IP .TP \fBSLURM_MEM_BIND_VERBOSE\fR اگر گزینه \fBSLURM_MEM_BIND\fR شامل گزینه verbose باشد، روی \(lqverbose\(rq تنظیم می‌شود. در غیر این صورت روی \(lqquiet\(rq تنظیم می‌شود. .IP .TP \fBSLURM_MEM_PER_CPU\fR حداقل حافظه مورد نیاز به ازای هر CPU قابل استفاده تخصیص‌یافته. .IP .TP \fBSLURM_MEM_PER_GPU\fR حافظه درخواستی به ازای هر GPU تخصیص‌یافته. .IP.TP \fBSLURM_MEM_PER_NODE\fR حافظه واقعی مورد نیاز به ازای هر گره را مشخص می‌کند. .IP .TP \fBSLURM_NTASKS\fR تعداد تسک‌هایی که باید اجرا شوند را مشخص می‌کند. .IP .TP \fBSLURM_NTASKS_PER_CORE\fR درخواست اجرای حداکثر \fIntasks\fR روی هر هسته. .IP .TP \fBSLURM_NTASKS_PER_GPU\fR درخواست اجرای \fIntasks\fR تسک به ازای هر GPU. .IP .TP \fBSLURM_NTASKS_PER_NODE\fR درخواست اجرای \fIntasks\fR روی هر گره. .IP .TP \fBSLURM_NTASKS_PER_SOCKET\fR درخواست اجرای حداکثر \fIntasks\fR روی هر سوکت. .IP .TP \fBSLURM_OVERCOMMIT\fR تخصیص بیش از ظرفیت منابع (Overcommit). .IP .TP \fBSLURM_PROFILE\fR جمع‌آوری تفصیلی داده‌ها توسط افزونه acct_gather_profile را فعال می‌کند. .IP .TP \fBSLURM_SHARDS_ON_NODE\fR تعداد GPU Shardهای در دسترس برای این گام روی این گره. .IP .TP \fBSLURM_SUBMIT_HOST\fR نام میزبان رایانه‌ای که \fBscrun\fR از آن فراخوانی شده است. .IP .TP \fBSLURM_TASKS_PER_NODE\fR تعداد تسک‌هایی که باید روی هر گره آغاز شوند. مقادیر با کاما از هم جدا شده و به همان ترتیب SLURM_JOB_NODELIST هستند. اگر دو یا چند گره متوالی دارای تعداد تسک یکسانی باشند، آن تعداد با «(x#)» دنبال می‌شود که در آن «#» تعداد تکرار است. برای مثال، «SLURM_TASKS_PER_NODE=2(x3),1» مشخص می‌کند که سه گره اول هر کدام دو تسک و گره چهارم یک تسک را اجرا خواهند کرد. .IP .TP \fBSLURM_THREADS_PER_CORE\fR این متغیر تنها زمانی تنظیم می‌شود که \fB\-\-threads\-per\-core\fR یا \fBSCRUN_THREADS_PER_CORE\fR مشخص شده باشند. مقدار آن برابر با مقدار تعیین‌شده توسط \fB\-\-threads\-per\-core\fR یا \fBSCRUN_THREADS_PER_CORE\fR خواهد بود. این متغیر توسط فراخوانی‌های بعدی srun در تخصیص کار استفاده می‌شود. .IP .TP \fBSLURM_TRES_PER_TASK\fR روی مقدار \fB\-\-tres\-per\-task\fR تنظیم می‌شود. اگر \fB\-\-cpus\-per\-task\fR یا \fB\-\-gpus\-per\-task\fR مشخص شده باشد، در \fBSLURM_TRES_PER_TASK\fR نیز تنظیم می‌گردد، درست مانند اینکه در \fB\-\-tres\-per\-task\fR تعیین شده باشد. .IP .SH "SCRUN.LUA" .LP فایل /etc/slurm/\fBscrun.lua\fR باید روی هر گره‌ای که \fBscrun\fR در آن فراخوانی خواهد شد، وجود داشته باشد. \fBscrun.lua\fR باید یک اسکریپت معتبر و سازگار با \fBlua\fR باشد..SS "توابع مورد نیاز (Required functions)" توابع زیر باید تعریف شوند. .TP \(bu function \fBslurm_scrun_stage_in\fR(\fBid\fR, \fBbundle\fR, \fBspool_dir\fR, \fBconfig_file\fR, \fBjob_id\fR, \fBuser_id\fR, \fBgroup_id\fR, \fBjob_env\fR) درست پس از تخصیص کار (job allocation) برای آماده‌سازی و انتقال به درون (stage in) کانتینر به گره(های) کار فراخوانی می‌شود. باید مقدار \fISLURM.success\fR را برگرداند، در غیر این صورت کار لغو خواهد شد. ضروری است که تابع، کانتینر را جهت اجرا روی گره(های) کار بر اساس آنچه در \fBoci.conf\fR(1) پیکربندی شده، آماده سازد. این تابع می‌تواند تا زمانی که کانتینر کاملاً آماده شود معلق (block) بماند (حداکثر تا سقف زمان مجاز اجرای کار یا wall time). .RS 4 .TP \fBid\fR شناسه کانتینر (Container ID) .TP \fBbundle\fR مسیر OCI bundle .TP \fBspool_dir\fR دایرکتوری کاری موقت برای کانتینر .TP \fBconfig_file\fR مسیر فایل config.json برای کانتینر .TP \fBjob_id\fR مقدار \fIjobid\fR مربوط به تخصیص کار .TP \fBuser_id\fR شناسه کاربری عددی حل‌شده برای تخصیص کار. به‌طور کلی انتظار می‌رود که اسکریپت lua درون یک user namespace تحت کاربر \fIroot(0)\fR اجرا شود. .TP \fBgroup_id\fR شناسه گروهی عددی حل‌شده برای تخصیص کار. به‌طور کلی انتظار می‌رود که اسکریپت lua درون یک user namespace تحت گروه \fIroot(0)\fR اجرا شود. .TP \fBjob_env\fR جدولی که هر ورودی آن کلید=مقدار (Key=Value) یا مقدارِ هر متغیر محیطیِ کار است. .IP .RE .TP \(bu function \fBslurm_scrun_stage_out\fR(\fBid\fR, \fBbundle\fR, \fBorig_bundle\fR, \fBroot_path\fR, \fBorig_root_path\fR, \fBspool_dir\fR, \fBconfig_file\fR, \fBjobid\fR, \fBuser_id\fR, \fBgroup_id\fR) درست پس از اتمام گام کانتینر (container step) جهت انتقال فایل‌ها به بیرون (stage out) از گره‌های کار فراخوانی می‌شود. باید مقدار \fISLURM.success\fR را برگرداند، در غیر این صورت کار لغو خواهد شد. ضروری است که این تابع هرگونه تغییرات را بازگردانی کرده و کانتینر را در گره(های) کار پاک‌سازی کند. این تابع می‌تواند تا زمانی که آماده‌سازی کانتینر کامل شود معلق (block) بماند (حداکثر تا سقف زمان مجاز اجرای کار یا wall time). .RS 4 .TP \fBid\fR شناسه کانتینر (Container ID) .TP \fBbundle\fR مسیر OCI bundle .TP \fBorig_bundle\fR مسیر اولیه OCI bundle ثبت‌شده، پیش از اعمال تغییرات توسط \fBset_bundle_path\fR(). .TP \fBroot_path\fR مسیر دایرکتوری ریشهٔ محتویات کانتینر. .TP \fBorig_root_path\fR مسیر اولیه به دایرکتوری ریشهٔ محتویات کانتینر، پیش از اعمال تغییرات توسط \fBset_root_path\fR(). .TP \fBspool_dir\fR دایرکتوری کاری موقت برای کانتینر .TP \fBconfig_file\fR مسیر فایل config.json برای کانتینر .TP \fBjob_id\fR مقدار \fIjobid\fR مربوط به تخصیص کار .TP \fBuser_id\fR شناسه کاربری عددی حل‌شده برای تخصیص کار. به‌طور کلی انتظار می‌رود که اسکریپت lua درون یک user namespace تحت کاربر \fIroot(0)\fR اجرا شود. .TP \fBgroup_id\fR شناسه گروهی عددی حل‌شده برای تخصیص کار. به‌طور کلی انتظار می‌رود که اسکریپت lua درون یک user namespace تحت گروه \fIroot(0)\fR اجرا شود. .RE.SS "توابع ارائه‌شده (Provided functions)" توابع زیر برای فراخوانی توسط هر تابع Lua در صورت نیاز ارائه شده‌اند. .TP \(bu \fBslurm.set_bundle_path\fR(\fIPATH\fR) برای آگاه‌سازی \fBscrun\fR جهت استفاده از \fIPATH\fR به‌‌عنوان مسیر جدید بسته کانتینر OCI فراخوانی می‌شود. بسته به چیدمان سیستم‌فایل، ممکن است برای امکان‌پذیر ساختن اجرا روی گره‌های کاری (job nodes)، کلون کردن بسته کانتینر لازم باشد. .TP \(bu \fBslurm.set_root_path\fR(\fIPATH\fR) برای آگاه‌سازی \fBscrun\fR جهت استفاده از \fIPATH\fR به‌‌عنوان مسیر جدید سیستم‌فایل ریشه کانتینر فراخوانی می‌شود. بسته به چیدمان سیستم‌فایل، ممکن است برای امکان‌پذیر ساختن اجرا روی گره‌های کاری، کلون کردن بسته کانتینر لازم باشد. اسکریپت همچنین باید هنگام تغییر مسیر ریشه، #/root/path را در config.json به‌روزرسانی کند. .TP \(bu \fISTATUS\fR,\fIOUTPUT\fR = \fBslurm.remote_command\fR(\fISCRIPT\fR) اجرای \fISCRIPT\fR در یک گام کاری (job step) جدید روی تمام گره‌های کاری. وضعیت عددی کار را به‌صورت \fISTATUS\fR و stdio کار را به‌صورت \fIOUTPUT\fR بازمی‌گرداند. تا زمان خروج \fISCRIPT\fR مسدود می‌شود. .TP \(bu \fISTATUS\fR,\fIOUTPUT\fR = \fBslurm.allocator_command\fR(\fISCRIPT\fR) اجرای \fISCRIPT\fR به‌صورت فرایند فرزند منشعب‌شده (forked) از \fBscrun\fR. وضعیت عددی کار را به‌صورت \fISTATUS\fR و stdio کار را به‌صورت \fIOUTPUT\fR بازمی‌گرداند. تا زمان خروج \fISCRIPT\fR مسدود می‌شود. .TP \(bu \fBslurm.log\fR(\fIMSG\fR, \fILEVEL\fR) ثبت \fIMSG\fR در سطح لاگ \fILEVEL\fR. بازه معتبر مقادیر برای \fILEVEL\fR برابر [0, 4] است. .TP \(bu \fBslurm.error\fR(\fIMSG\fR) ثبت پیام خطای \fIMSG\fR. .TP \(bu \fBslurm.log_error\fR(\fIMSG\fR) ثبت پیام خطای \fIMSG\fR. .TP \(bu \fBslurm.log_info\fR(\fIMSG\fR) ثبت \fIMSG\fR در سطح لاگ INFO. .TP \(bu \fBslurm.log_verbose\fR(\fIMSG\fR) ثبت \fIMSG\fR در سطح لاگ VERBOSE. .TP \(bu \fBslurm.log_verbose\fR(\fIMSG\fR) ثبت \fIMSG\fR در سطح لاگ VERBOSE. .TP \(bu \fBslurm.log_debug\fR(\fIMSG\fR) ثبت \fIMSG\fR در سطح لاگ DEBUG. .TP \(bu \fBslurm.log_debug2\fR(\fIMSG\fR) ثبت \fIMSG\fR در سطح لاگ DEBUG2. .TP \(bu \fBslurm.log_debug3\fR(\fIMSG\fR) ثبت \fIMSG\fR در سطح لاگ DEBUG3. .TP \(bu \fBslurm.log_debug4\fR(\fIMSG\fR) ثبت \fIMSG\fR در سطح لاگ DEBUG4. .TP \(bu \fIMINUTES\fR = \fBslurm.time_str2mins\fR(\fITIME_STRING\fR) تجزیه \fITIME_STRING\fR به تعداد دقایق در قالب \fIMINUTES\fR. قالب‌های معتبر: .RS 8 .TP \(bu days-[hours[:minutes[:seconds]]] .TP \(bu hours:minutes:seconds .TP \(bu minutes[:seconds] .TP \(bu -1 .TP \(bu INFINITE .TP \(bu UNLIMITED .RE.SS نمونه اسکریپت‌های \fBscrun.lua\fR .TP نمونهٔ کامل استیجینگ کانتینر با استفاده از rsync: این نمونه کامل، کانتینر ارائه‌شده توسط \fBdocker\fR یا \fBpodman\fR را آماده‌سازی (stage) می‌کند. فایل config.json کانتینر برای حذف عملکردهای نامطلوبی که ممکن است اجرای کانتینر را تحت \fBcrun\fR یا \fBrunc\fR دچار مشکل کنند، ویرایش می‌شود. این اسکریپت از \fBrsync\fR برای انتقال کانتینر به یک سیستم‌فایل اشتراکی تحت متغیر \fIscratch_path\fR استفاده می‌کند. \fBنکته\fR: پشتیبانی از JSON در liblua عموماً باید پیش از کامپایل شدن Slurm نصب شده باشد. نحو scrun.lua و توانایی آن در بارگذاری پشتیبانی از JSON باید با فراخوانی مستقیم اسکریپت با استفاده از \fBlua\fR در خارج از Slurm آزمایش شود. .nf local open = io.open local scratch_path = "/run/user" local function read_file(path) local file = open(path, "rb") if not file then return nil end local content = file:read "*all" file:close() return content end local function write_file(path, contents) local file = open(path, "wb") if not file then return nil end file:write(contents) file:close() return end function slurm_scrun_stage_in(id, bundle, spool_dir, config_file, job_id, user_id, group_id, job_env) slurm.log_debug(string.format("stage_in(%s, %s, %s, %s, %d, %d, %d)", id, bundle, spool_dir, config_file, job_id, user_id, group_id)) local status, output, user, rc local config = slurm.from_json(read_file(config_file)) local src_rootfs = config["root"]["path"] rc, user = slurm.allocator_command(string.format("id -un %d", user_id)) user = string.gsub(user, "%s+", "") local root = scratch_path.."/"..math.floor(user_id).."/slurm/scrun/" local dst_bundle = root.."/"..id.."/" local dst_config = root.."/"..id.."/config.json" local dst_rootfs = root.."/"..id.."/rootfs/" if string.sub(src_rootfs, 1, 1) ~= "/" then -- always use absolute path src_rootfs = string.format("%s/%s", bundle, src_rootfs) end status, output = slurm.allocator_command("mkdir -p "..dst_rootfs) if (status ~= 0) then slurm.log_info(string.format("mkdir(%s) failed %u: %s", dst_rootfs, status, output)) return slurm.ERROR end status, output = slurm.allocator_command(string.format("/usr/bin/env rsync --exclude sys --exclude proc --numeric-ids --delete-after --ignore-errors --stats -a -- %s/ %s/", src_rootfs, dst_rootfs)) if (status ~= 0) then -- rsync can fail due to permissions which may not matter slurm.log_info(string.format("WARNING: rsync failed: %s", output)) end slurm.set_bundle_path(dst_bundle) slurm.set_root_path(dst_rootfs) config["root"]["path"] = dst_rootfs -- Always force user namespace support in container or runc will reject local process_user_id = 0 local process_group_id = 0 if ((config["process"] ~= nil) and (config["process"]["user"] ~= nil)) then -- resolve out user in the container if (config["process"]["user"]["uid"] ~= nil) then process_user_id=config["process"]["user"]["uid"] else process_user_id=0 end -- resolve out group in the container if (config["process"]["user"]["gid"] ~= nil) then process_group_id=config["process"]["user"]["gid"] else process_group_id=0 end -- purge additionalGids as they are not supported in rootless if (config["process"]["user"]["additionalGids"] ~= nil) then config["process"]["user"]["additionalGids"] = nil end end if (config["linux"] ~= nil) then -- force user namespace to always be defined for rootless mode local found = false if (config["linux"]["namespaces"] == nil) then config["linux"]["namespaces"] = {} else for _, namespace in ipairs(config["linux"]["namespaces"]) do if (namespace["type"] == "user") then found=true break end end end if (found == false) then table.insert(config["linux"]["namespaces"], {type= "user"}) end -- Provide default user map as root if one not provided if (true or config["linux"]["uidMappings"] == nil) then config["linux"]["uidMappings"] = {{containerID=process_user_id, hostID=math.floor(user_id), size=1}} end -- Provide default group map as root if one not provided -- mappings fail with build??? if (true or config["linux"]["gidMappings"] == nil) then config["linux"]["gidMappings"] = {{containerID=process_group_id, hostID=math.floor(group_id), size=1}} end -- disable trying to use a specific cgroup config["linux"]["cgroupsPath"] = nil end if (config["mounts"] ~= nil) then -- Find and remove any user/group settings in mounts for _, mount in ipairs(config["mounts"]) do local opts = {} if (mount["options"] ~= nil) then for _, opt in ipairs(mount["options"]) do if ((string.sub(opt, 1, 4) ~= "gid=") and (string.sub(opt, 1, 4) ~= "uid=")) then table.insert(opts, opt) end end end if (opts ~= nil and #opts > 0) then mount["options"] = opts else mount["options"] = nil end end -- Remove all bind mounts by copying files into rootfs local mounts = {} for i, mount in ipairs(config["mounts"]) do if ((mount["type"] ~= nil) and (mount["type"] == "bind") and (string.sub(mount["source"], 1, 4) ~= "/sys") and (string.sub(mount["source"], 1, 5) ~= "/proc")) then status, output = slurm.allocator_command(string.format("/usr/bin/env rsync --numeric-ids --ignore-errors --stats -a -- %s %s", mount["source"], dst_rootfs..mount["destination"])) if (status ~= 0) then -- rsync can fail due to permissions which may not matter slurm.log_info("rsync failed") end else table.insert(mounts, mount) end end config["mounts"] = mounts end -- Force version to one compatible with older runc/crun at risk of new features silently failing config["ociVersion"] = "1.0.0" -- Merge in Job environment into container -- this is optional! if (config["process"]["env"] == nil) then config["process"]["env"] = {} end for _, env in ipairs(job_env) do table.insert(config["process"]["env"], env) end -- Remove all prestart hooks to squash any networking attempts if ((config["hooks"] ~= nil) and (config["hooks"]["prestart"] ~= nil)) then config["hooks"]["prestart"] = nil end -- Remove all rlimits if ((config["process"] ~= nil) and (config["process"]["rlimits"] ~= nil)) then config["process"]["rlimits"] = nil end write_file(dst_config, slurm.to_json(config)) slurm.log_info("created: "..dst_config) return slurm.SUCCESS end function slurm_scrun_stage_out(id, bundle, orig_bundle, root_path, orig_root_path, spool_dir, config_file, jobid, user_id, group_id) if (root_path == nil) then root_path = "" end slurm.log_debug(string.format("stage_out(%s, %s, %s, %s, %s, %s, %s, %d, %d, %d)", id, bundle, orig_bundle, root_path, orig_root_path, spool_dir, config_file, jobid, user_id, group_id)) if (bundle == orig_bundle) then slurm.log_info(string.format("skipping stage_out as bundle=orig_bundle=%s", bundle)) return slurm.SUCCESS end status, output = slurm.allocator_command(string.format("/usr/bin/env rsync --numeric-ids --delete-after --ignore-errors --stats -a -- %s/ %s/", root_path, orig_root_path)) if (status ~= 0) then -- rsync can fail due to permissions which may not matter slurm.log_info("rsync failed") else -- cleanup temporary after they have been synced backed to source slurm.allocator_command(string.format("/usr/bin/rm --preserve-root=all --one-file-system -dr -- %s", bundle)) end return slurm.SUCCESS end slurm.log_info("initialized scrun.lua") return slurm.SUCCESS .fi.SH "سیگنال‌ها (SIGNALS)" .TP \fBSIGINT\fR تلاش برای لغو منظم کارهای مرتبط (در صورت وجود) و پاک‌سازی. .IP .TP \fBSIGCHLD\fR انتظار برای تمام فرزندان، پاک‌سازی anchor و خاموش‌سازی منظم. .IP .SH "کپی‌رایت و تکثیر (COPYING)" حق نشر (C) 2023 SchedMD LLC. .LP این فایل بخشی از Slurm، یک برنامه‌ی مدیریت منابع است. برای جزئیات، را ببینید. .LP نرم‌افزار Slurm نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط «پروانه عمومی همگانی گنو» همان‌طور که توسط بنیاد نرم‌افزارهای آزاد منتشر شده است، چه نسخه ۲ پروانه و چه (به انتخاب خودتان) هر نسخهٔ بعدی دیگری، بازتوزیع کرده یا تغییر دهید. .LP نرم‌افزار Slurm با این امید توزیع شده است که مفید واقع شود، اما بدون هرگونه ضمانتی؛ حتی بدون ضمانت ضمنی قابل فروش بودن یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر به «پروانه عمومی همگانی گنو» مراجعه کنید. .SH "همچنین ببینید (SEE ALSO)" .LP \fBslurm\fR(1)، \fBoci.conf\fR(5)، \fBsrun\fR(1)، \fBcrun\fR، \fBrunc\fR، \fBDOCKER\fR و \fBpodman\fR