# 提交與管理Job範例
三種提交方式: sbatch、srun、salloc
## srun和salloc及為interactive job
使用者可透過slurm執行即時互動的計算工作,依照執行需求即時進行輸入、設定調整或重新執行。這種互動式作業尤其適合需要進行即時的跨節點測試、調整或除錯情境,待測試無誤後即可進行批次作業。
## 方式一、以srun執行互動式shell
:::info 使用srun提交工作
使用srun提交工作
```
1. 系統將分配一個節點,該節點上將有 1 個 GPU 可已使用,並執行 hostname,輸出顯示這個節點的名稱。
提交一個分配 1 GPU的工作,並執行hostname指令
[user@lgn01 ~]$ srun --partition=dev --account=<PROJECT_ID> --gpus-per-node=1 hostname
2. 預設MPI為”none”,您可以用指令 srun --mpi=list 查詢目前環境中支援的MPI版本,
並使用參數 --mpi 指定載入所需的MPI版本,範例如下:
# 指定使用MPI “pmix_v4”,若成功載入,環境變數”SLURM_MPI_TYPE”就會顯示版本資訊
[user@lgn01 ~]$ srun --partition=dev --account=<PROJECT_ID> --gpus-per-node=1 --mpi=pmix_v4 env | grep MPI_TYPE
…
SLURM_MPI_TYPE=pmix_v4
```
:::
## 方式二、以salloc 取得計算資源
:::info 使用salloc提交工作
```
1. 使用salloc提交工作
# 提交一個使用單台GPU節點所有資源的互動式工作 (1 GPU)
# 資源分配成功後,可以看到Job ID為1052,分配的計算節點為 hgpn10。
[user@lgn01 ~]$ salloc --partition=dev --account=<PROJECT_ID> --ntasks=1 --gpus-per-node=1
salloc: Granted job allocation 1052
salloc: Nodes hgpn10 are ready for job
2. 離開salloc SHELL
# 此時會進入salloc的專用SHELL
# 在您離開這個SHELL前,Job 1052會處於RUNNING狀態且持續計費
# 要離開salloc SHELL可以輸入 exit 指令
[user@lgn01 salloc_1052 ~]$
3.查看Slurm Job環境資訊,可查看Job相關資訊
[user@lgn01 salloc_1052 ~]$ env |grep -i slurm
4. 在salloc SHELL中,您可以執行srun指令,每個srun等同於一個Job Step
[user@lgn01 salloc_1052 ~]$ srun -c 1 -n 1 hostname
5. 進入此Job分配的計算節點執行程式或指令
#可以直接以ssh進入此Job分配的計算節點執行程式或指令
[user@lgn01 salloc_1052 ~]$ ssh hgpn10
[user@hgpn10 ~]$ srun hostname
#或者,您也可以直接用srun進入此Job分配的計算節點執行程式或指令
[user@lgn01 salloc_1052 ~]$ srun --pty /bin/bash
[user@hgpn10 salloc_1052 ~]$ hostname
hgpn10
#欲離開計算節點,輸入exit指令
[user@hgpn10 salloc_1052 ~]$ exit
[user@lgn01 salloc_1052 ~]$
6. 使用sacct 指令查詢Job Step清單與執行結果
1052.0 和1052.1即為前面執行的step,數字0和1是step的編號
[user@lgn01 salloc_1052 ~]$ sacct -j $SLURM_JOBID
JobID JobName Partition Account AllocCPUS State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
1052 interacti+ dev gov113080 1 COMPLETED 0:0
1052.extern extern gov113080 1 COMPLETED 0:0
1052.0 hostname gov113080 1 COMPLETED 0:0
1052.1 hostname gov113080 1 COMPLETED 0:0
1052.2 bash gov113080 1 COMPLETED 0:0
#欲離開互動式工作,輸入exit指令
[user@lgn01 salloc_1052 ~]$ exit
salloc: Relinquishing job allocation 1052
salloc: Job allocation 1052 has been revoked.
[user@lgn01 ~]$
```
:::