# Job 提交與管理範例
## 方式1: `sbatch` 提交工作
`sbatch` 用於提交 Batch 作業,適合長時間或多節點計算任務--工作會在背景排隊、執行,完成後把結果寫入檔案。
1. 建立 Job Script
```bash
# sbatch Job Script (sample-job.sh)
# 此範例資源會分配兩個計算節點,每個節點使用8張GPU進行計算
[user@25a-lgn01 ~]$ vim sample-job.sh
#!/bin/bash
#SBATCH --account=<PROJECT_ID> # (-A) iService Project ID
#SBATCH --job-name=sbatch # (-J) Job name
#SBATCH --partition=dev # (-p) Slurm partition
#SBATCH --nodes=2 # (-N) Maximum number of nodes to be allocated
#SBATCH --ntasks-per-node=8 # Number of MPI tasks on each node
#SBATCH --gres=gpu:8 # use 8 gpus on each node
#SBATCH --output=job-%j.out # (-o) Path to the standard output file
#SBATCH --error=job-%j.err # (-e) Path to the standard error file
#SBATCH --mail-type=END,FAIL # Mail events (NONE, BEGIN, END, FAIL, ALL)
#SBATCH --mail-user=user@example.com # Where to send mail. Set this to your email address
module load gcc/11.5
module load openmpi/5.0.10-cuda13.0
mpirun ./hello
```
2. 提交 Job Script
```
[user@25a-lgn01 ~]$ sbatch sample-job.sh
```
3. 查詢自己Job queue 狀態
```
[user@25a-lgn01 ~]$ squeue --me
```
4. 查詢Job 執行狀態
```
[user@25a-lgn01 ~]$ scontrol show job <job_id>
```
## 方式2: `salloc` 提交工作
`salloc` 於建立互動式作業,常用於程式開發、除錯與資源測試。
1. 提交互動式 Job
```
# 提交一個使用2台GPU節點互動式工作
# 範例為資源分配成功後,可以看到Job 55049,分配的計算節點為 25a-hgpn[107-108]。
[user@25a-lgn01 ~]$ salloc --account=<PROJECT_ID> --partition= dev --nodes=2 --ntasks-per-node=8 --gres=gpu:8
salloc: Granted job allocation 55049
salloc: Nodes 25a-hgpn[107-108] are ready for job
# 此時進入一個互動式 Shell
# 在您離開這個SHELL之前,Job 55049會處於RUNNING狀態且持續計費
[user@25a-lgn01 salloc_55049 ~]$
# 要離開互動式 Shell,可以輸入 exit 指令
[user@25a-lgn01 salloc_55049 ~]$
```
2. 查詢 Slurm Job 環境變數
```
# 查看Slurm Job環境資訊,可查看Job相關資訊
[user@25a-lgn01 salloc_55049 ~]$ env |grep -i slurm
```