如果在下面我用 'srun' 替换 'mpirun',我的 mpi+openmp 作业运行速度会慢 3 倍!
#!bin/bash
#
#SBATCH --job-name=locstack4d_mpi
#SBATCH --output=./res_locstack4d_mpi.txt
#
#SBATCH --ntasks=3
#SBATCH --cpus-per-task=16
#SBATCH --ntasks-per-node=1
#SBATCH --time=10:00
#SBATCH --mem-per-cpu=100
#SBATCH --verbose
export OMP_NUM_THREADS=28
mpirun ./locstack4d ./locstack4d_input.dat
Run Code Online (Sandbox Code Playgroud)
mpi 实现细节:
Version: 3.1
Release Date: Thu Feb 20 11:41:13 CST 2014
CC: gcc -m64 -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC -Wl,-z,noexecstack
CXX: g++ -m64 -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC -Wl,-z,noexecstack
F77: gfortran -m64 -O2 -g -pipe …Run Code Online (Sandbox Code Playgroud) 我试图了解如何使用 squeue 按提交时间排序。我知道我可以使用队列如下,所以它会显示提交时间,
squeue -O "stepid:6,username:8,account:7,name:53,partition:15,submittime:20"
Run Code Online (Sandbox Code Playgroud)
但我如何让它按 sumbittime 排序。
谢谢。
我工作的集群上有几个分区。随着sinfo我可以看到每个分区的时间限制。我把我的代码放在mid1有时间限制的分区上8-00:00:00,我知道时间限制是 8 天。我不得不等待,1-15:23:41这意味着将近 1 天 15 小时。但是,我的代码仅运行了00:02:24近 2.5 分钟(并且解决方案正在收敛)。另外,我没有在提交的文件中设置时间限制sbatch我的代码停止的原因如下:
JOB 3216125 CANCELLED AT 2015-12-19T04:22:04 DUE TO TIME LIMIT
Run Code Online (Sandbox Code Playgroud)
那么,如果我没有超过时间限制,为什么我的代码被停止了?我向负责集群的人提出了这个问题,但他们没有回来。
我已经在计算集群上提交了几个作业,但没有设置 --mail-user。我现在可以更新规范吗?希望在作业完成后收到电子邮件。非常感谢!
我想使用 sbatch 运行 python 脚本,但是,似乎使用 sbatch 运行 python 脚本的唯一方法是拥有一个 bash 脚本,然后运行 python 脚本。就像有batch_main.sh:
#!/bin/bash
#SBATCH --job-name=python_script
arg=argument
python python_batch_script.sh
Run Code Online (Sandbox Code Playgroud)
然后运行:
sbatch batch_main.sh
Run Code Online (Sandbox Code Playgroud)
问题是我希望有一个单独的参数配置文件(因为它通常不是单个数字或参数)并且还能够使用数组选项。另外,我通常同时运行多个不同的sbatch 作业(使用不同的配置),因此,如果更改配置文件不会使不同的 sbatch 运行相互妨碍(因为如果作业排队,然后配置文件稍后更改,它将运行最新的配置文件,而不是我运行 sbatch 时的配置副本)。为了解决这个问题,我发现当我运行 sbatch 脚本时,SLURM 实际上会将提交脚本复制到其内部数据库(我在询问后发现了这一点:在运行期间更改发送到 slurm 中的 bash 脚本是一个坏主意吗?)。因此,我实际上决定将配置硬编码到 bash 提交脚本中(本质上使提交脚本成为配置文件)。这样我只需编辑提交脚本,然后运行该文件。然而,我想阻止这个,因为这让我用 bash 编写,我想不惜一切代价避免。
理想情况下,我想运行一个直接运行 python 的 sbatch。
由于这可能不可能,我想知道还有哪些其他选项可以解决这个问题。例如,是否可以让 slurm 将不同的文件(如 python 配置文件)复制到其内部数据库,以便当它对作业进行排队时,它运行我确切想要运行的作业?(请注意,运行 sbatch 作业然后更改配置文件不是执行此操作的方法,因为这可能会在更改配置文件时导致问题,slrum 将读取配置的最新副本而不是配置的副本当作业运行时)。或者我还有什么其他选择?我真的坚持编写 bash 还是我可以做其他事情来处理 python 中的配置而不是其他一些奇怪的黑客?
总的来说,我还想知道人们在现实世界中为此做了什么,或者对此有什么好的实践/标准。
我有一个由三部分组成的 R 分析(partA、partB和partC)。我将每个部分提交给 SLURM(例如sbatch partA),并且每个部分都通过 并行化#SBATCH --array=1-1500。这些零件是连续的,所以我需要等待一个零件完成才能开始下一个零件。现在我正在手动启动每项工作,但这不是一个很好的解决方案。
我想自动化这三个批处理调用。例如:
sbatch partApartA完成,sbatch partBpartB完成,sbatch partC我使用此解决方案获取 的作业 ID partA,并将其传递给strigger完成上面的步骤 2。然而我陷入了困境,因为我不知道如何获取partBfromstrigger的工作 ID 。我的代码如下所示:
#!/bin/bash
# step 1: sbatch partA
partA_ID=$(sbatch --parsable partA.sh)
# step 2: sbatch partB
strigger --set --jobid=$partA_ID --fini --program=/path/to/partB.batch
# step 3: sbatch partC
... ?
Run Code Online (Sandbox Code Playgroud)
我该如何完成第 3 步?
我正在运行CentOS 6.9。我想从命令行测试当前是否正在使用Matlab许可证。目前,我能想到的最好方法是
/opt/matlab/R2018b/bin/matlab -nodesktop -nosplash -r "exit;"
export RETURN_VALUE=$?
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?也许从Matlab本身捕获了实际的许可错误?我不想在这种情况下使用grep方法。
我正在寻找可以使用Matlab可执行文件(或其他Mathwork的可执行文件)来仅测试许可证是否可用的东西。
编辑:Matlab发出不同的许可错误,具体取决于许可证是否不可用以及您是否是未授权用户。能够区分两者很重要,因为我最终希望为Slurm编写一个序言脚本来处理两者之间的差异。允许某些用户使用许可证,而其他用户则不允许。这就是我上面的示例不足的原因。
我正在运行一个 sbatch 脚本,它已成功提交。
sbatch sbatch_script.sh
Submitted batch job 309376
squeue -u <my_username>但是当我运行并且没有生成输出时它不会显示。
有没有办法检查出了什么问题?例如,我可以检查一些环境变量设置/输出日志吗?
为了轻松更改我在软件中使用的软件包的版本,我生成了一个bash带有调用底层软件的函数的接口。这样,我的主脚本可以保持相同的界面,我只需要更改/添加每个要使用的版本的帮助程序脚本:
助手_v1.sh:
method1() {
cmd1 params
}
method2() {
cmd1 other_params
}
Run Code Online (Sandbox Code Playgroud)
helper_v2.sh:
method1() {
cmd2 params
}
method2() {
cmd2 other_params
}
Run Code Online (Sandbox Code Playgroud)
现在我需要通过启动这些命令来srun将工作分配到不同的节点上。所以我正在尝试(在使用 启动的脚本内sbatch):
source helper_v2.sh
srun method1 params
Run Code Online (Sandbox Code Playgroud)
但它失败并出现错误:
slurmstepd: error: execve(): method1: No such file or directory
Run Code Online (Sandbox Code Playgroud)
有什么办法可以使用这些bash功能吗srun?不得不将它们全部重新实现为单独的脚本将是一种遗憾。
我对 HPC 和 SLURM 尤其是新手。下面是我用来运行 python 脚本的示例代码:
#!/bin/bash
# Slurm submission script, serial job
#SBATCH --time 48:00:00
#SBATCH --mem 0
#SBATCH --mail-type ALL
#SBATCH --partition gpu_v100
#SBATCH --gres gpu:4
#SBATCH --nodes 4
#SBATCH --ntasks-per-node=4
#SBATCH --output R-%x.%j.out
#SBATCH --error R-%x.%j.err
export NCCL_DEBUG=INFO
export PYTHONFAULTHANDLER=1
module load python3-DL/torch/1.6.0-cuda10.1
srun python3 contrastive_module.py \
--gpus 4 \
--max_epochs 1024 \
--batch_size 256 \
--num_nodes 4 \
--num_workers 8 \
Run Code Online (Sandbox Code Playgroud)
现在,每次我使用它运行此脚本时,sbatch run.sl它都会生成两个 .err 和 .out 文件,我只能将“run.sl”文件名和作业 ID 编码到这两个文件名中。但是如何保存我在上面的脚本中设置的所有参数的副本,无论是 slurm 配置还是与作业 ID 以及生成的 …