پرش به محتویات

نمونه Jobهای واقعی در Slurm

این صفحه چند نمونه عملی برای اجرای Job با Slurm دارد. بهتر است ابتدا نمونه ساده را اجرا کنید و بعد نمونه‌های Python، venv و Array Job را بررسی کنید.

آماده‌سازی پوشه پروژه

mkdir -p ~/projects/slurm-demo/{scripts,logs,results,data}
cd ~/projects/slurm-demo

ساختار پیشنهادی:

slurm-demo/
├── data/
├── scripts/
├── logs/
└── results/

نمونه ۱: Job ساده

این Job فقط نام نود، کاربر و زمان را چاپ می‌کند.

cat > hello.slurm <<'SLURM_JOB'
#!/bin/bash
#SBATCH --job-name=hello-hpc
#SBATCH --partition=normal
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
#SBATCH --mem=1G
#SBATCH --time=00:05:00
#SBATCH --output=logs/hello-%j.out
#SBATCH --error=logs/hello-%j.err

mkdir -p logs

echo "Hello from IASBS HPC"
echo "HOST=$(hostname)"
echo "USER=$(whoami)"
echo "DATE=$(date)"
SLURM_JOB

sbatch hello.slurm

بررسی وضعیت:

squeue -u $USER

مشاهده خروجی:

ls -lah logs
cat logs/hello-*.out
cat logs/hello-*.err

نمونه ۲: اجرای Python ساده

ابتدا فایل Python بسازید:

cat > scripts/main.py <<'PYCODE_MAIN'
import os
import platform
from datetime import datetime

print("Python job is running")
print("User:", os.getenv("USER"))
print("Host:", platform.node())
print("Time:", datetime.now())
PYCODE_MAIN

فایل Slurm:

cat > run-python.slurm <<'SLURM_JOB'
#!/bin/bash
#SBATCH --job-name=python-demo
#SBATCH --partition=normal
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=2
#SBATCH --mem=2G
#SBATCH --time=00:15:00
#SBATCH --output=logs/python-%j.out
#SBATCH --error=logs/python-%j.err

mkdir -p logs
python3 scripts/main.py
SLURM_JOB

sbatch run-python.slurm

نمونه ۳: Python با venv

این نمونه برای توضیح است. آن را وقتی اجرا کنید که واقعاً می‌خواهید محیط Python پروژه بسازید.

cd ~/projects/slurm-demo
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install numpy pandas matplotlib
deactivate

اسکریپت تست محیط:

cat > scripts/check-env.py <<'PYCODE_ENV'
import numpy as np
import pandas as pd

print("NumPy:", np.__version__)
print("Pandas:", pd.__version__)
print("Environment is OK")
PYCODE_ENV

اجرای venv داخل Slurm:

cat > run-python-venv.slurm <<'SLURM_JOB'
#!/bin/bash
#SBATCH --job-name=python-venv
#SBATCH --partition=normal
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=2
#SBATCH --mem=4G
#SBATCH --time=00:30:00
#SBATCH --output=logs/python-venv-%j.out
#SBATCH --error=logs/python-venv-%j.err

cd ~/projects/slurm-demo
source .venv/bin/activate
python scripts/check-env.py
SLURM_JOB

sbatch run-python-venv.slurm

نمونه ۴: تنظیم Thread

برای کتابخانه‌هایی مثل NumPy، MKL یا OpenBLAS بهتر است تعداد Threadها با CPU درخواست‌شده هماهنگ باشد.

cat > run-threaded.slurm <<'SLURM_JOB'
#!/bin/bash
#SBATCH --job-name=threaded-python
#SBATCH --partition=normal
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=8G
#SBATCH --time=01:00:00
#SBATCH --output=logs/threaded-%j.out
#SBATCH --error=logs/threaded-%j.err

export OMP_NUM_THREADS=4
export MKL_NUM_THREADS=4
export OPENBLAS_NUM_THREADS=4
export NUMEXPR_NUM_THREADS=4

python3 scripts/main.py
SLURM_JOB

sbatch run-threaded.slurm

نمونه ۵: Array Job

Array Job برای اجرای چند ورودی یا چند پارامتر مناسب است.

mkdir -p data
echo "input 1" > data/input-1.txt
echo "input 2" > data/input-2.txt
echo "input 3" > data/input-3.txt
cat > scripts/array-demo.sh <<'BASH_SCRIPT'
#!/bin/bash
INPUT_FILE="data/input-${SLURM_ARRAY_TASK_ID}.txt"
echo "Task ID: ${SLURM_ARRAY_TASK_ID}"
echo "Input file: ${INPUT_FILE}"
cat "${INPUT_FILE}"
BASH_SCRIPT

chmod +x scripts/array-demo.sh
cat > array-job.slurm <<'SLURM_JOB'
#!/bin/bash
#SBATCH --job-name=array-demo
#SBATCH --partition=normal
#SBATCH --array=1-3
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
#SBATCH --mem=1G
#SBATCH --time=00:10:00
#SBATCH --output=logs/array-%A_%a.out
#SBATCH --error=logs/array-%A_%a.err

cd ~/projects/slurm-demo
bash scripts/array-demo.sh
SLURM_JOB

sbatch array-job.slurm

مشاهده خروجی‌ها:

ls -lah logs/array-*
cat logs/array-*.out

Array Job

قبل از ارسال Array بزرگ، حتماً با تعداد کم تست کنید.