<div style="text-align: right; background-color: #f5f5f5; padding: 4px 12px; border-radius: 5px; display: inline-block; float: right; font-size: 1.4rem;"> Last Updated:2025/07/01 </div> # 分配工作(Job)資源 [TOC] <br> 在提交工作(Job)前,必須確保所指定的資源量(如 CPU、記憶體)不超過單一計算節點的最大可分配資源限制。 <font color="red">➤ 用戶可使用指令 `scontrol show node <node>` 查詢節點的最大資源限制</font>: ``` [user@ilgn01]$ sinfo -p visual PARTITION AVAIL TIMELIMIT NODES STATE NODELIST up 2-00:00:00 6 idle gpn[01-06] # 查詢節點 gpn01,欄位 “CfgTRES” 即為最大可分配資源量 # 下面範例說明gpn01最大可分配量為: # CPU 核心數為 112 (cpu=112) # 記憶體為482582M (mem=482582M) # GPU為2 (gres/gpu=2) # 同一佇列下的計算節點(gpn[01-06]),最大可分配資源量通常都是相同的 [user@ilgn01]$ scontrol show node gpn01 NodeName=gpn01 Arch=x86_64 CoresPerSocket=56 … CfgTRES=cpu=112,mem=482582M,billing=112,gres/gpu=2 … ``` <br> --- <br> ## 正確提交範例 - **若未指定記憶體參數(如 `--mem`),系統預設會分配節點的最大可用記憶體。** ``` [user@ilgn01]$ salloc -A <PORJECT_ID> -p development -N 2 -c 112 salloc: Granted job allocation 7202 salloc: Waiting for resource configuration salloc: Nodes icpnq[134-135] are ready for job ``` - **使用 `scontrol show job <job_id>` 查詢成功提交的工作與分配的資源。** ``` # NumNodes=2 : 分配2個計算節點 # NumCPUs=224: 總共分配224 CPU核心,等於每個節點分配112個CPU核心 # mem=965164M: 總共分配965164MiB記憶體,等於每個節點分配482582MiB # NumTasks=2 : 若您沒有指定 task 相關的任何參數,則每個節點預設執行1個任務 # CPUs/Task=112: 每個任務使用112個 CPU 核心 [user@ilgn01 salloc_7202 ~]$ scontrol show job 7202 JobId=7202 JobName=interactive … NumNodes=2 NumCPUs=224 NumTasks=2 CPUs/Task=112 ReqB:S:C:T=0:0:*:* TRES=cpu=224,mem=965164M,node=2,billing=224 … ``` <br> --- <br> ## 常見錯誤範例 若您提交的工作,其指定的資源超過計算節點的最大可分配資源量,就會出現如下的錯誤,導致無法成功提交工作: - **錯誤一:CPU 核心數超過單節點限制** ``` # 佇列 “development” 單一計算節點的CPU最大可分配資源量為112 # 若工作分配二台節點(-N 2),卻需要單節點 120個CPU Core(-c 120),提交就會失敗 # 若您沒指定記憶體相關參數(如 --mem),預設會分配計算節點的最大可用記憶體 [user@ilgn01]$ salloc -A <PORJECT_ID> -p development -N 2 -c 120 salloc: error: CPU count per node can not be satisfied salloc: error: Job submit/allocate failed: Requested node configuration is not available ``` - **錯誤二:記憶體超出單節點限制** ``` # 佇列 “development” 單一計算節點的Memory最大可分配資源量為482582M # 若工作分配二台節點(-N 2),要求單節點 112個CPU Core(-c 112)是正確的 # 但指定單節點500GiB記憶體(--mem=500G),提交一樣會失敗 [user@ilgn01]$ salloc -A <PORJECT_ID> -p development -N 2 -c 112 --mem=500G salloc: error: Memory specification can not be satisfied salloc: error: Job submit/allocate failed: Requested node configuration is not available ``` <br> --- <br> ## 分配多任務進行平行計算 根據計算程式特性,可能需要於**單一節點分配多個任務(Task)進行平行計算**,才能充分利用運算資源並獲得最佳的運算效率。 - **平行計算任務範例:** ``` # 將分配2個節點,每個節點執行112個task,每個 task 用 1 CPU 執行程式 # 若您沒指定記憶體相關參數(如 --mem 或 --mem-per-cpu),預設會分配計算節點的最大可用記憶體 [user@ilgn01]$ salloc -A <PORJECT_ID> -p development -N 2 --ntasks-per-node=112 salloc: Granted job allocation 7203 salloc: Waiting for resource configuration salloc: Nodes icpnq[134-135] are ready for job ``` - **查詢成功提交的工作狀態** ``` # NumNodes=2 : 分配2個計算節點 # NumCPUs=224 : 總共分配224 CPU核心,等於每個節點分配112個CPU核心 # mem=965164M : 總共分配965164MiB記憶體,等於每個節點分配482582MiB # NumTasks=224: 每個節點執行112個任務 # CPUs/Task=1 : 每個任務使用1個 CPU 核心 [user@ilgn01 salloc_7203 ~]$ scontrol show job 7203 JobId=7203 JobName=interactive … NumNodes=2 NumCPUs=224 NumTasks=224 CPUs/Task=1 ReqB:S:C:T=0:0:*:* TRES=cpu=224,mem=965164M,node=2,billing=224 … ``` :::danger <i class="fa fa-exclamation-triangle" aria-hidden="true"></i> **注意:** 若 job script 未指定記憶體參數,系統將根據該 job 索取的 CPU 核心總數量去配置該 job 的最大可用記憶體。若執行過程中出現 OOM(Out of Memory)錯誤,請檢查程式是否需要索取更多記憶體。 - **X86 架構**:ct開頭Queue,每核心最多分配 **4308MB** 記憶體。 - **ARM 架構**:每核心最多分配 **1554MB** 記憶體。 :::