نمونه Jobهای واقعی در Slurm¶
این صفحه چند نمونه عملی برای اجرای Job با Slurm دارد. بهتر است ابتدا نمونه ساده را اجرا کنید و بعد نمونههای Python، venv و Array Job را بررسی کنید.
آمادهسازی پوشه پروژه¶
ساختار پیشنهادی:
نمونه ۱: 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
بررسی وضعیت:
مشاهده خروجی:
نمونه ۲: اجرای 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
مشاهده خروجیها:
Array Job
قبل از ارسال Array بزرگ، حتماً با تعداد کم تست کنید.