本篇記錄如何在 PBS Professional 的排程系統下,使用 Cromwell 執行與管理 WDL Workflow。
下載 Cromwell JAR 封裝檔
從 Cromwell 的 GitHub 網站上可以下載包裝好的 JAR 封裝檔案:
wget https://github.com/broadinstitute/cromwell/releases/download/41/cromwell-41.jar
另外建議可以同時下載 WOMtool:
wget https://github.com/broadinstitute/cromwell/releases/download/41/womtool-41.jar
Backend 設定
參考 SGE 的設定檔範例,編寫 PBS Professional 排程系統用的 backend 設定檔,並將其儲存為 pbs_backend.conf
。
# Cromwell PBS Backend 設定檔案 # Backend 設定 backend { # 設定預設的 backend(對應下方的 PBS provider) default = PBS # 定義各種 providers providers { # 定義 PBS backend,「PBS」這個名稱是自訂的 PBS { # 讓 Cromwell 使用下方 config 的設定來送出、管理工作 actor-factory = "cromwell.backend.impl.sfs.config.ConfigBackendLifecycleActorFactory" # PBS backend 設定 config { # 最大同時執行的工作數量 concurrent-job-limit = 2 # 定義 HPC 工作執行時所需要的變數 runtime-attributes = """ Int cpu = 10 Int gpu = 1 String pbs_queue = "ctest" String pbs_project """ # PBS Pro 送出工作指令 submit = """ qsub \ -l select=1:ncpus=${cpu}:mpiprocs=${cpu}:ngpus=${gpu} \ -N ${job_name} \ ${"-q " + pbs_queue} \ ${"-P " + pbs_project} \ -j oe \ ${script} """ # 擷取工作 ID 的正規表示法(regular expression) job-id-regex = "(\\d+)" # 中止工作的 PBS Pro 指令 kill = "qdel ${job_id}" # 檢查工作是否正在執行的 PBS Pro 指令 check-alive = "qstat ${job_id}" } } } }
WDL Workflow 檔案
準備 WDL Workflow 檔案,將其儲存為 hpc_workflow.wdl
。
task myTask01 { # 輸出 NVIDIA 顯示卡資訊 command { nvidia-smi } # 指定 PBS Pro 在送工作時所需要的參數 runtime { cpu: 10 gpu: 1 pbs_queue: "gtest" pbs_project: "GOV108018" } # 輸出檔案 output { File nvidia_smi = stdout() } } task myTask02 { # 輸入檔案 File in_file # 計算 'Tesla' 關鍵字出現次數 command { grep 'Tesla' ${in_file} | wc -l } # 指定 PBS Pro 在送工作時所需要的參數 runtime { cpu: 2 pbs_queue: "ctest" pbs_project: "GOV108018" } # 輸出整數 output { Int count = read_int(stdout()) } } task myTask03 { # 輸入檔案 File in_file # 計算文字行數 command { cat ${in_file} | wc -l } # 指定 PBS Pro 在送工作時所需要的參數 runtime { cpu: 2 pbs_queue: "ctest" pbs_project: "GOV108018" } # 輸出整數 output { Int count = read_int(stdout()) } } # 定義 Workflow # +--> myTask02 # myTask01 ---+ # +--> myTask03 workflow myWorkflow { call myTask01 call myTask02 { input: in_file=myTask01.nvidia_smi } call myTask03 { input: in_file=myTask01.nvidia_smi } }
送出工作
準備好 pbs_backend.conf
設定檔以及 hpc_workflow.wdl
檔案之後,送出前可以使用 WOMtool 檢查一下 WDL 檔案是否正確。
java -jar womtool-41.jar validate hpc_workflow.wdl
Success!
接著執行 Cromwell 透過 PBS Professional 排程系統,將整個 workflow 送出計算:
java -Dconfig.file=pbs_backend.conf -jar cromwell-41.jar run hpc_workflow.wdl
參考資料:Cromwell Doc、Cromwell RuntimeAttributes、WDL language specification、OpenWDL、WDL Draft-3
LI
您好,我之前参考您的这篇博文想通过调整.conf把wdl直接提交到学校的PBS系统里,但是我一直在失败,我想问问这会不会跟HPC有关呢?这是我学校的HPC系统有关的参数:https://www.imperial.ac.uk/admin-services/ict/self-service/research-support/rcs/computing/job-sizing-guidance/high-throughput/
非常感谢你的分享