Slurm 補充
查詢用戶使用率
CPU:
sreport cluster AccountUtilizationByUser -t HourPer format=accounts,Login,Proper,TresName,Used,Energy start=2025-06-01T00:00:00 end=2025-06-09T23:59:59 tree
GPU:
sreport cluster AccountUtilizationByUser --tres=gres/gpu -t HourPer format=accounts,Login,Proper,TresName,Used,Energy start=2025-06-01T00:00:00 end=2025-06-09T23:59:59 tree
Slurm 如何排序(排序評斷標準)
score = Fairshare_score + WeightAge * (waiting_time_factor)� + WeightJobSize * (size_factor) + WeightAssoc * (assoc_factor)
| 分數 | 備註 |
Fairshare_score | 0~100 | 根據使用者歷史資源使用量計算,使用少者優先權高,用越多優先權下降。 |
WeightAge | 30 | 作業等待時間越久,waiting_time_factor值越大=>分數越高;可避免作業長時間排隊未被執行。 |
WeightJobSize | 10 | 使用更多資源(如 CPU/GPU)者size_factor值越大=>分數略高;鼓勵資源密集型作業有效執行。 |
WeightAssoc | 30 | 根據帳號設定的靜態優先值,預先定義不同使用者的排程等級,有緊急需求時才會變動。 |
註:
score 越高,代表在排隊等待時會越前面。
factor 數值都介在0~1之間
一些解釋
Fairshare_score會依照使用者使用的資源量去做計算,且會採用7天半衰期的方式,以防止之前資源使用很多的人會一直在排隊,無法使用GPU。
這邊舉個例子 : A、B、C 三位user 都在 User 這個群組裡,三人的RawShares(資源分配份額)都設為100,代表3人的Normshare都為1/3,假設三位user都是今天辦的帳號,A在7天前使用15000單位資源(已結束),B在2天前使用5000單位資源(已結束),目前有一位使用者D的JOB剛結束,且三人都有提交JOB進入排程系統 :
A 提交JOB為 使用 2 CPU core 、 Mem 4G 、 GPU 1張 、時間 0.5天,等待時間2小時
B 提交JOB為 使用 16 CPU core 、 Mem 128G 、 GPU 1張 、時間 1天,等待時間1天
C 提交JOB為 使用 4 CPU core 、 Mem 24G 、 GPU 1張 、時間 1天,等待時間1天
分數計算會在之後投影片詳細說明��
| RawUsage | EffectvUsage | Fairshare_score = 100 * min(Normshare / EffectvUsage , 1 ) |
A | 15000 * (0.5)^(7/7)�= 7500 | 7500 / (7500+4100+0) = 0.64 | 100 * min( (1/3) / 0.64 , 1 ) = 52 |
B | 5000 * (0.5)^(2/7)�=4100 | 0.36 | 100 * min( (1/3) / 0.36 , 1 ) = 92 |
C | 0 | 0 | 100 * min( (1/3) / 0 , 1 ) = 100 |
註 :
RawUsage 是原始使用的單位資源量
EffectvUsage 是該使用者在所屬群組裡占用多少比例的資源量
Waiting_time_factor 是如何計算的?
目前使用者等待時間/同群組使用者們總等待時間
以上面例子來計算 :
| 目前等待時間 | Waiting_time_factor | WeightAge * (waiting_time_factor) |
A | 2 小時 | 2 / (2 + 24 + 24) = 0.04 | 30 * 0.04 = 1.2 |
B | 1 天 | 24 / (2 + 24 + 24) = 0.48 | 30 * 0.48 = 14.4 |
C | 1 天 | 24 / (2 + 24 + 24) = 0.48 | 30 * 0.48 = 14.4 |
size_factor 是如何計算的?
目前使用者預計使用CPU core / 同群組使用者們預計使用最大CPU core
以上面例子來計算 :
| 預計使用CPU core | size_factor | WeightJobSize * (size_factor) |
A | 2 | 2 / 16 = 0.125 | 10 * 0.125 = 1.25 |
B | 16 | 16 / 16 = 1 | 10 * 1 = 10 |
C | 4 | 4 / 16 = 0.25 | 10 * 0.25 = 2.5 |
分數總和 :
| Fairshare_score | WeightAge * (waiting_time_factor) | WeightJobSize * (size_factor) | WeightAssoc * (assoc_factor) | Score |
A | 52 | 1.2 | 1.25 | 30 * 0.5 = 15 | 69.45 |
B | 92 | 14.4 | 10 | 30 * 0.5 = 15 | 131.4 |
C | 100 | 14.4 | 2.5 | 30 * 0.5 = 15 | 131.9 |
註 : assoc_factor 預設為 0.5
依照計算,最終會由C優先執行
而JOB完成後,會計算單位資源,以供後續計算Fairshare_score
單位資源計算方式
目前單位資源各權重是�CPU core => 1 , Mem(GB) => 0.25 , GPU => 5
舉例來說,當執行一個Job,使用CPU 2core , Mem 4GB , GPU 1張 , 時間600秒
| 權重 | 用量 | 執行時間 | RawUsage | 合計 |
CPU core | 1 | 2 | 600秒 | 1 * 2 * 600 = 1200 | 4800 |
Mem | 0.25 | 4 | 0.25 * 4 * 600 = 600 | ||
GPU | 5 | 1 | 5 * 1 * 600 = 3000 |