【问题标题】:Running multiple instances of a python file with two input files using GNU Parallel on an HPC system with SLURM在具有 SLURM 的 HPC 系统上使用 GNU Parallel 运行具有两个输入文件的 python 文件的多个实例
【发布时间】:2023-07-14 19:05:02
【问题描述】:

我尝试并行运行一个 python 文件 240 次(因为每个 在 HPC 系统上运行单个文件大约需要 9 分钟)。理想情况下,每个 python 文件都应该在一个内核上运行。每个节点有 24 个核心。 python 文件有两个输入文件,每组一个:

  • CN_ONLY0.pdb 最高 CN_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。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 第 0 步。: 向您的 HPC 基础架构技术支持咨询最佳实践,这是最好的起点。总是。

标签: python hpc slurm gnu-parallel


【解决方案1】:

当 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。然后从该值中减去一个并使用它是微不足道的生成脚本参数的名称。

【讨论】:

    最近更新 更多