簡體   English   中英

在具有 SLURM 的 HPC 系統上使用 GNU Parallel 運行具有兩個輸入文件的 python 文件的多個實例

[英]Running multiple instances of a python file with two input files using GNU Parallel on an HPC system with SLURM

我嘗試在 HPC 系統上並行運行單個 python 文件 240 次(因為每個單獨的文件運行大約需要 9 分鍾)。 理想情況下,每個 python 文件都應在單個內核上運行。 每個節點有 24 個核心。 python 文件采用兩個輸入文件,每組一個:

  • CN_ONLY0.pdbCN_ONLY239.pdb
  • I_ONLY0.pdbI_ONLY239.pdb

當我運行以下發布的代碼時:

parallel="parallel --delay .2         \
                    -j $SLURM_NTASKS   \
                   --joblog runtask.log \
                   --resume              \
                   --max-args=2"

srun="srun --exclusive -N1 -n1 --cpus-per-task=1 --cpu-bind=cores"

find . -type f \( -name "CN_ONLY*.pdb" -o -name "I_ONLY*.pdb" \) |
        sort -t Y -k 2 -g     |
        TMPDIR=$SLURM_SCRATCH \
        $parallel python python_test.py

它正確運行 Python 程序,但不會將程序分發到所有不同的請求 CPU。

有誰知道如何解決這個問題?

當 SLURM 本身通過數組作業(或作業數組)提供該功能時,無需使用 GNU 並行。 只需將--array=1-240添加到srun命令,然后提交以下腳本:

#!/bin/sh

id=$(expr ${SLURM_ARRAY_TASK_ID} - 1)
python python_test.py CN_ONLY${id}.pdb I_ONLY${id}.pdb

發生的情況是 SLURM 將啟動此腳本 240 次,並將SLURM_ARRAY_TASK_ID的值設置為每個不同的值,范圍從 1 到 240。然后從該值中減去一個並使用它來生成名稱腳本 arguments。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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