GNU 并行 - 未找到命令

问题描述 投票:0回答:1

我正在尝试将GNU并行SLURM一起使用来运行具有不同输入参数的同一脚本的多个实例。为此,我通过 SLURM 分配 3 个节点,然后通过 GNU Parallel 创建多个线程,这些线程运行 Python 脚本,每个线程仅使用一个 CPU 核心。

此外,脚本非常占用内存,因此如果由于 RAM 不足而失败,我需要能够重新启动作业。为此,我求助于使用

--retry-failed
--retries
标志。

我的问题是,除了最后一个节点上的作业之外的所有作业都会以以下输出完成:

/bin/bash: 0: command not found
/bin/bash: 1: command not found
/bin/bash: 2: command not found
/bin/bash: 3: command not found
/bin/bash: 4: command not found
/bin/bash: 5: command not found
/bin/bash: 6: command not found

显然,我的输入在某种程度上被误解了,但我不知道如何解释,因为我不是 GNU Parallel 的经验丰富的用户。

我的工作脚本如下所示:

#!/usr/bin/env bash
#SBATCH --job-name job-name
#SBATCH --cpus-per-task=1
#SBATCH --array=0-2

[ -z "$PARALLEL_SEQ" ] && { exec parallel --retry-failed --retries 5 --joblog joblog.txt -a numtasks $0 ; }

TASKS_PER_NODE=`cat numtasks | wc -l`

IDX=$(( ${TASKS_PER_NODE} * ${SLURM_ARRAY_TASK_ID} + ${PARALLEL_SEQ} - 1 ))

mkdir "res-${IDX}"
cd "res-${IDX}"
source ${HOME}/.bashrc
conda activate myenv
cp ../myscript.py .

python3 ./myscript.py ${IDX}
linux bash gnu gnu-parallel
1个回答
0
投票

我认为你应该编辑你的作业脚本以正确地将

${IDX}
的值作为参数传递给你的 Python 脚本!

类似这样的:

#!/usr/bin/env bash
#SBATCH --job-name job-name
#SBATCH --cpus-per-task=1
#SBATCH --array=0-2

[ -z "$PARALLEL_SEQ" ] && { exec parallel --retry-failed --retries 5 --joblog joblog.txt -a numtasks $0 ; }

TASKS_PER_NODE=$(cat numtasks | wc -l)

IDX=$(( ${TASKS_PER_NODE} * ${SLURM_ARRAY_TASK_ID} + ${PARALLEL_SEQ} - 1 ))

mkdir "res-${IDX}"
cd "res-${IDX}"
source ${HOME}/.bashrc
conda activate myenv
cp ../myscript.py .

python3 ./myscript.py "${IDX}"
© www.soinside.com 2019 - 2024. All rights reserved.