标签: slurm

提交的作业是否会复制源文件?作业排队?

使用 提交作业时sbatch,我的可执行文件的副本是否会被带到计算节点?或者它只是执行来自的文件/home/user/?有时,当我杂乱无章时,我会提交一个作业,然后更改源并重新编译以提交另一个作业。这似乎不是一个好主意,特别是当作业仍在队列中时。同时,似乎应该允许这样做,如果在调用sbatch源代码时制作了副本,则会安全得多。

我运行了一些测试,证实(毫不奇怪)一旦作业运行,重新编译源代码就没有效果。但当工作在队列中时,我不确定。测试起来很困难。

编辑:man sbatch除了说该作业“立即”提交给 Slurm 控制器之外,似乎没有提供太多见解。

slurm

2
推荐指数
1
解决办法
821
查看次数

SLURM 作业依存于作业名称而不是作业 ID

文档中作业依赖关系的格式如下:

sbatch --dependency=<type:job_id[:job_id][,type:job_id[:job_id]]> ...

是否可以使用作业名称而不是作业 ID 来建立作业依赖关系?

slurm

1
推荐指数
1
解决办法
1805
查看次数

如何使用Shell创建具有不同名称的输出文件?

我有一个R脚本(abc.R):

#!/usr/bin/env Rscript

print("HELLO")
Run Code Online (Sandbox Code Playgroud)

还有一个包含R脚本(example.sh)的批处理脚本:

#!/bin/bash
module load Rstats
module load RstatsPackages


Rscript /home1/R_scripts/abc.R   > "result.txt"
Run Code Online (Sandbox Code Playgroud)

还有另一个批处理脚本(multiple.sh),它调用上述脚本:

#!/bin/sh

for((i=1;i<=10;i++))
do

     sbatch -p normal -t 4:00:00 -N 1 -n 4 example.sh $i

done

sh multiple.sh
Run Code Online (Sandbox Code Playgroud)

该脚本调用上述脚本十次,因此我的Rscript将运行十次。它运行10次,但仅生成一个result.txt。不过,我想多个结果文件,如result1.txtresult2.txtresult3.txt等等。

linux bash slurm

1
推荐指数
1
解决办法
54
查看次数

SLURM:更改正在运行的阵列作业的最大同时运行任务数

我有一组数组作业如下:

sbatch --array=1:100%5 ...
Run Code Online (Sandbox Code Playgroud)

这会将同时运行的任务数量限制为 5。作业现在正在运行,我想将此数字更改为 10(即我希望我运行sbatch --array=1:100%10 ...)。

阵列作业文档提到您可以scontrol在作业开始后使用更改选项。不幸的是,目前还不清楚该选项的变量名是什么,我不认为这是sbatch命令的文档中列出这里

任何指针都受到好评。

slurm sbatch

1
推荐指数
1
解决办法
1121
查看次数

使用 joblib 和 SLURM 在 Python 中并行化 for 循环

我有一个包含 100 个元组的列表tuplelist,用作外部函数的输入。外部函数返回一个值,并且该值被附加到一个数组中,如下所示 ( MainFile.py):

from ExternalPythonFile import ExternalFunction

valuelist = []
for a,b in tuplelist:
    value = ExternalFunction(a,b)
    # more functions here
    valuelist.append(value)
print(len(valuelist))
Run Code Online (Sandbox Code Playgroud)

print(len(valuelist))使用上面的 for 循环时的输出是(100,)

现在,由于元组的顺序以及它们的附加方式在我的情况下并不重要,因此我想并行化 for 循环,因为处理 100 个元组需要大约 10 分钟,并且我希望扩展该数字。我尝试了下面的 joblib 实现(MainFileJoblib.py):

from ExternalPythonFile import ExternalFunction
from joblib import Parallel, delayed, parallel_backend
import multiprocessing

valuelist = []

def TupleFunction(a,b):
        value = ExternalFunction(a,b)
        # more functions here
        valuelist.append(value)

with parallel_backend('multiprocessing'):
    Parallel(n_jobs=10)(delayed(TupleFunction)(a,b) for a,b in tuplelist)

print(len(valuelist))
Run Code Online (Sandbox Code Playgroud)

我在 unix …

python parallel-processing for-loop slurm joblib

1
推荐指数
1
解决办法
2444
查看次数

如何在 sbatch 命令行中传递参数?

我想将参数传递到 sbatch 命令行。

RHO_COR.sh

#!/bin/bash
#SBATCH -o job-%A_task.out
#SBATCH --job-name=paral_cor
#SBATCH --partition=normal
#SBATCH --time=1-00:00:00
#SBATCH --mem=200G
#SBATCH --cpus-per-task=16
#SBATCH --array=1-10

#Set up whatever package we need to run with

module load gcc/8.1.0 openblas/0.3.3 R

# SET UP DIRECTORIES

OUTPUT="$HOME"/PROJET_M2/data/$(date +"%Y%m%d")_parallel_nodes_test
mkdir -p "$OUTPUT"

export FILENAME="$HOME"/vipailler/PROJET_M2/bin/RHO_COR.R

subset=$((SLURM_ARRAY_TASK_ID))
file="$HOME"/PROJET_M2/raw/truelength2.prok2.uniref2.rares.tsv 

#Run the program

echo "Start job :"`date` >> "$OUTPUT"/"$SLURM_ARRAY_TASK_ID".txt
echo "Start job :"`date`

echo PWD $PWD

Rscript $FILENAME --file $file --subset $subset   > "$OUTPUT"/"$SLURM_ARRAY_TASK_ID"

wait


echo "Stop job : "`date` >> "$OUTPUT"/"$SLURM_ARRAY_TASK_ID".txt
echo …
Run Code Online (Sandbox Code Playgroud)

parameter-passing slurm

1
推荐指数
1
解决办法
3525
查看次数

对 SLURM 作业进行排队以在 X 分钟后运行

我一直在尝试寻找有关如何使用以下选项来实现作业依赖项的示例-d, --dependency=<dependency_list>

在文档中,语法显示为after:job_id[[+time][:jobid[+time]...]] 但我无法找到任何示例,而且说实话,我发现语法的表示令人困惑。

我已经尝试过sbatch --dependency=after:123456[+5] myjob.slurmand sbatch --dependency=after:123456+5 myjob.slurm,但这会产生错误

sbatch: error: Batch job submission failed: Job dependency problem

如何添加依赖项以Job B使其在Job A启动后 X 分钟启动?

slurm

1
推荐指数
1
解决办法
504
查看次数

请求的处理器数量多于允许的数量

我使用 MPI 并行化了三个嵌套循环。当我运行代码时,弹出一个错误,显示“srun:错误:无法为作业 20258899 创建步骤:请求的处理器数量超过允许的数量”

这是我用来提交作业的脚本。

#!/bin/bash
#SBATCH --partition=workq
#SBATCH --job-name="code"
#SBATCH --nodes=2
#SBATCH --time=1:00:00
#SBATCH --exclusive
#SBATCH --err=std.err
#SBATCH --output=std.out
#---#
module switch PrgEnv-cray PrgEnv-intel
export OMP_NUM_THREADS=1
#---#
echo "The job "${SLURM_JOB_ID}" is running on "${SLURM_JOB_NODELIST}
#---#
srun --ntasks=1000 --cpus-per-task=${OMP_NUM_THREADS} --hint=nomultithread ./example_parallel
Run Code Online (Sandbox Code Playgroud)

我在下面粘贴我的代码。有人可以告诉我我的代码有什么问题吗?是不是我使用的MPI错误?非常感谢。

PROGRAM THREEDIMENSION
USE MPI
IMPLICIT NONE
INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(p=15,r=14)
INTEGER :: i, j, k, le(3)
REAL (KIND=dp), ALLOCATABLE :: kp(:,:,:,:), kpt(:,:), col1(:), col2(:)
REAL (KIND=dp) :: su, co, tot
INTEGER :: world_size, world_rank, …
Run Code Online (Sandbox Code Playgroud)

fortran mpi batch-processing slurm

1
推荐指数
1
解决办法
3345
查看次数

Matlab parfor 使用的内核数少于分配的内核数

我在远程集群的单个节点上运行并行 Matlab 作业。集群的每个节点有 2 个处理器,每个处理器有 24 个内核,每个节点总共有 48 个内核。该作业包含一些顺序代码,后跟一个parfor循环。我使用slurmbash 脚本运行它。

bash脚本test.sh是:

#!/bin/bash
#
########## Begin Slurm header ##########
#
# Give job a reasonable name
#SBATCH -J test_1
#
# Request number of nodes and CPU cores per node for job
#SBATCH --nodes=1
# Request number of tasks/process per nodes
# (determines number of workers in processed based parpool)
#SBATCH --tasks-per-node=48
# Estimated wallclock time for job
#SBATCH -t 1-00
#
# …
Run Code Online (Sandbox Code Playgroud)

parallel-processing bash matlab parfor slurm

1
推荐指数
1
解决办法
62
查看次数

如何从命令行使用 rscript 命令在 R 中运行作业数组?

R我想知道如何使用该函数运行 500 个并行作业Rscript。我目前有一个R文件的标题位于顶部:

args <- commandArgs(TRUE)
B <- as.numeric(args[1])
Num.Cores <- as.numeric(args[2])
Run Code Online (Sandbox Code Playgroud)

在 R 文件之外,我希望传递要运行的 500 个作业中的哪一个,由B. 另外,我想控制每个作业可用的核心/CPU 数量,Num.Cores

我想知道是否有软件或指南可以实现这一点。我目前有一台 CentOS 7/Linux 服务器,我知道一种方法是安装 Slurm。然而,这很麻烦,我想知道是否有办法用队列执行 500 个作业。谢谢。

hpc r cluster-computing parameter-passing slurm

0
推荐指数
1
解决办法
3025
查看次数