[英]Slurm + drake: free resources of idle job array workers for dynamic branching
編輯:在發現所描述的行為不是源於 SLURM 而是源於 R package {drake} 后,對問題標題和標簽進行了調整,后者用作執行 SLURM 數組作業的代理。
我有以下情況:
n=70
的 Slurm 作業數組,每個作業有 X CPU 和 Y Mem這會導致以下情況:
對於任務 71-120(完成 1-70 之后),我有 50 個活躍的工人和 20 個空閑的工人。 空閑的工人將不再做任何工作,只是等待活動的工人完成。
現在隨着時間的推移,越來越多的工人完成工作,在某些時候我有 5 個活躍的工人和 65 個閑置的工人。 假設最后 5 個任務需要相當長的時間才能完成。 在這段時間里,空閑的worker阻塞了集群上的資源,並不斷的將以下內容打印到各自的日志文件中
2021-04-03 19:41:41.866282 | > WORKER_WAIT (0.000s wait)
2021-04-03 19:41:41.868709 | waiting 1.70s
2021-04-03 19:41:43.571948 | > WORKER_WAIT (0.000s wait)
[...]
在沒有更多任務分配后,有沒有辦法關閉這些空閑的工作人員並釋放資源? 目前他們等到所有工作人員都完成后才釋放資源。
感謝@Michael Schubert 的評論,我發現在使用 R package {drake} 及其動態分支功能時會發生這種行為(靜態目標可以很好地關閉)。
在這里,“目標”可以具有動態“子目標”,可以通過 SLURM 將其計算為單獨的數組作業。 在計算完所有子目標之后,這些子目標將被組合起來。 在此聚合步驟發生之前,所有工作人員都保持在“等待”state 中,其中他們 output 上面顯示的WORKER_WAIT
狀態。
大膽猜測:由於 {drake} 中動態目標的設計,這可能無法避免,因為要聚合所有子目標,這些子目標首先需要存在。 因此,必須將各個子目標保存/保存在臨時 state 中,直到所有子目標都可用。
以下 {drake} R 代碼可與 SLURM 集群結合使用,以重現解釋的行為:
list_time = c(30,60),
test_dynamic = target(
Sys.sleep(time = list_time),
dynamic = map(list_time)
),
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.