簡體   English   中英

Slurm + drake:空閑作業數組工作者的免費資源用於動態分支

[英]Slurm + drake: free resources of idle job array workers for dynamic branching

編輯:在發現所描述的行為不是源於 SLURM 而是源於 R package {drake} 后,對問題標題和標簽進行了調整,后者用作執行 SLURM 數組作業的代理。

我有以下情況:

  • 一個n=70的 Slurm 作業數組,每個作業有 X CPU 和 Y Mem
  • 120個任務要運行
  • 每個任務需要相同的 CPU + 內存,但需要不同的時間來完成

這會導致以下情況:

對於任務 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM