# 批次計算工作(batch job)
三種提交方式: sbatch、srun、salloc
## sbatch 為批次計算工作(batch job)
批次計算工作(Batch Job)是一種將多個計算任務或作業打包在一起並在特定時間或條件下批次執行的方式,作業係依照事先寫好的腳本設定執行,提交後即無法變更,若欲變更設定,須再提交另一個新的批次作業。這些腳本定義了計算任務、所需的資源(如 CPU、內存、運行時間等)以及要執行的程序。這些作業會被提交給作業排程器,排程器負責決定何時以及在哪些節點上執行作業,以最大化資源的利用效率。
.sh 檔案為 Slurm 將提交運算的 Job script,內容分為「兩大部分」:
- Job、計畫、資源資訊:job 名稱、節點數量、每節點運行的任務數、每節點的 GPU 數量、job 最長的運行時間、計畫 ID、Queue 名稱。
- Job 執行的內容
<font color="red">提交job的方式,選擇其中一種執行即可。++建議透過sbatch的方式來提交job。++</font>
:::info 建立一個sbatch Job Script 來提交工作
```
1. 建立一個sbatch Job Script (sample-job.sh)
# 此範例資源會分配兩個計算節點,每個節點取用8張GPU,96 tasks,每個task使用1個CPU Core
# 因沒指定 memory 相關參數,預設分配節點所有可用記憶體(總共200GB * 8GPUs * 2nodes)
# 若指定 --mem=450G,則總記憶體為 450G * 2(nodes)
[user@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 --gpus-per-node=8 # Gpus per node
#SBATCH --cpus-per-task=1 # (-c) Number of cores per MPI task
#SBATCH --ntasks-per-node=96 # Maximum number of tasks on each node
#SBATCH --time=00:30:00 # (-t) Wall time limit (days-hrs:min:sec)
#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
srun <your_program>
2.提交Job Script
[user@lgn01 ~]$ sbatch sample-job.sh
3.查看job queue狀態
[user@lgn01 ~]$ squeue -u $UID
4.查看Job 執行狀態
[user@lgn01 ~]$ scontrol show job <job_id>
```
:::