我有一个使用以下命令运行的简单 test.ksh:
批量测试.ksh
我不断收到“JobState=FAILED Reason=NonZeroExitCode”(使用“scontrol show job”)
我已经确定了以下几点:
我可以向SLURM提交"单行"吗?
使用bsubLSF和标准Linux实用程序xargs,我可以轻松地提交一个单独的作业来解压缩目录中的所有文件:
ls *.gz | sed 's/.gz$//g' | xargs -I {} bsub 'gunzip -c {}.gz > {}'
Run Code Online (Sandbox Code Playgroud)
使用SLURM,我认为srun或sbatch将会工作,但无济于事:
ls *.gz | sed 's/.gz$//g' | xargs -I {} srun 'gunzip -c {}.gz > {}'
gzip: srun: error: compute-node-01: task 0: Exited with exit code 1
stdin: unexpected end of file
ls *.gz | sed 's/.gz$//g' | xargs -I {} sbatch 'gunzip -c {}.gz > {}'
sbatch: error: Unable to open file gunzip -c …Run Code Online (Sandbox Code Playgroud) 我想让 slurm 系统myprogram在计算完成后通过电子邮件发送输出。所以我写了SBATCH如下
#!/bin/bash -l
#SBATCH -J MyModel
#SBATCH -n 1 # Number of cores
#SBATCH -t 1-00:00 # Runtime in D-HH:MM
#SBATCH -o JOB%j.out # File to which STDOUT will be written
#SBATCH -e JOB%j.err # File to which STDERR will be written
#SBATCH --mail-type=END
#SBATCH --mail-user=my@email.com
echo $SLURM_JOB_ID
echo $SLURM_JOB_NAME
/usr/bin/mpirun -np 1 ./myprogram
/usr/bin/mail -s $SLURM_JOB_NAME my@email.com < JOB${SLURM_JOB_ID}.out
Run Code Online (Sandbox Code Playgroud)
邮件系统报告
file .out not found
Run Code Online (Sandbox Code Playgroud)
我如何构建邮件命令来让主题行$SLURM_JOB_NAME和文件中的邮件内容STDOUT,例如JOB${SLURM_JOBID}.out在我的例子中?
我很幸运能够访问我大学的SLURM动力GPU集群.我一直试图让Tensorflow在集群节点中运行,但到目前为止我找不到任何文档.(我在大学里与之交谈的每个人都在使用CPU节点之前或使用单个GPU节点运行它.
我在这里找到了上一个问题的一些优秀文档.不幸的是,它相当不完整.我发现的所有其他分布式示例(例如此示例)都依赖于显式指定参数服务器.
当我尝试使用SO问题中的代码运行它时,我似乎工作得很好,直到它无法连接到不存在的参数服务器,或者在调用server.join时挂起并且没有向sbatch outfile提供打印输出(我明白应该发生).
简而言之,我的问题是如何在SLURM集群上启动Tensorflow?从sbatch阶段开始.这是我第一次在AWS上处理SPARK之外的分布式计算框架,我很想了解更多关于如何正确配置Tensorflow的信息.如何指定tf_hostlist中的哪个项目作为参数服务器?另外,我可以使用sbatch向每个worker发送稍微不同的命令,正如我在其他示例中看到的那样?
我发现了一些非常相似的问题,这些问题帮助我找到了一个似乎有用的脚本但是我仍然不确定我是否完全理解为什么,因此这个问题......
我的问题(例子):在3个节点上,我想在每个节点上运行12个任务(总共36个任务).此外,每个任务都使用OpenMP,并且应该使用2个CPU.在我的例子中,一个节点有24个CPU和64GB内存.我的脚本是:
#SBATCH --nodes=3
#SBATCH --ntasks=36
#SBATCH --cpus-per-task=2
#SBATCH --mem-per-cpu=2000
export OMP_NUM_THREADS=2
for i in {1..36}; do
srun -N 1 -n 1 ./program input${i} >& out${i} &
done
wait
Run Code Online (Sandbox Code Playgroud)
这似乎按照我的要求工作,在节点上连续运行任务,直到该节点上的所有CPU都在使用,然后继续在下一个节点上运行更多任务,直到再次使用所有CPU等.
我的问题..我不确定这是否真的是它(?),因为我没有完全理解关于-n的srun的手册页,我之前没有使用srun.主要是我的混淆来自"-n":在-n的手册页中说"默认是每个节点一个任务,",所以我预计如果我使用"srun -n 1"只有一个任务将是在每个节点上运行,但似乎并非如此.此外,当我尝试例如"srun -n 2 ./program"时,似乎只运行完全相同的程序两次作为两个不同的任务,无法使用不同的输入文件..我无法想到为什么会这样有用?
我正在使用 slurm 的 HPC 上运行一条蛇形管道。管道相当长,包含约 22 个步骤。定期,snakemake 在尝试提交作业时会遇到问题。这导致错误
sbatch: error: Batch job submission failed: Socket timed out on send/recv operation
Error submitting jobscript (exit code 1):
Run Code Online (Sandbox Code Playgroud)
我通过带有以下蛇形调用的 sbatch 文件运行管道
snakemake -j 999 -p --cluster-config cluster.json --cluster 'sbatch --account {cluster.account} --job-name {cluster.job-name} --ntasks-per-node {cluster.ntasks-per-node} --cpus-per-task {threads} --mem {cluster.mem} --partition {cluster.partition} --time {cluster.time} --mail-user {cluster.mail-user} --mail-type {cluster.mail-type} --error {cluster.error} --output {cluster.output}'
Run Code Online (Sandbox Code Playgroud)
这不仅会导致snakemake sbatch 作业的输出,还会导致snakemake 创建的作业的输出。上述错误出现在 sbatch 文件的 slurm.out 中。
错误指示的特定作业步骤将成功运行,并给出输出,但管道失败。作业步骤的日志显示作业 ID 运行没有问题。我在谷歌上搜索了这个错误,它似乎经常在 slurm 中发生,尤其是当调度程序处于高 IO 时,这表明这将是不可避免且经常发生的。我希望有人遇到过这个问题,并且可以提供解决方法的建议,这样整个管道就不会失败。
我正在整理一个 Snakemake slurm 工作流程,但我的工作目录因 slurm 输出文件变得混乱而遇到麻烦。我希望我的工作流程至少将这些文件定向到我的工作目录内的“slurm”目录。我目前的工作流程设置如下:
配置.yaml:
reads:
1:
2:
samples:
15FL1-2: /datasets/work/AF_CROWN_RUST_WORK/2020-02-28_GWAS/data/15FL1-2
15Fl1-4: /datasets/work/AF_CROWN_RUST_WORK/2020-02-28_GWAS/data/15Fl1-4
Run Code Online (Sandbox Code Playgroud)
集群.yaml:
localrules: all
__default__:
time: 0:5:0
mem: 1G
output: _{rule}_{wildcards.sample}_%A.slurm
fastqc_raw:
job_name: sm_fastqc_raw
time: 0:10:0
mem: 1G
output: slurm/_{rule}_{wildcards.sample}_{wildcards.read}_%A.slurm
Run Code Online (Sandbox Code Playgroud)
蛇文件:
configfile: "config.yaml"
workdir: config["work"]
rule all:
input:
expand("analysis/fastqc_raw/{sample}_R{read}_fastqc.html", sample=config["samples"],read=config["reads"])
rule clean:
shell:
"rm -rf analysis logs"
rule fastqc_raw:
input:
'data/{sample}_R{read}.fastq.gz'
output:
'analysis/fastqc_raw/{sample}_R{read}_fastqc.html'
log:
err = 'logs/fastqc_raw/{sample}_R{read}.out',
out = 'logs/fastqc_raw/{sample}_R{read}.err'
shell:
"""
fastqc {input} --noextract --outdir 'analysis/fastqc_raw' 2> {log.err} > {log.out}
"""
Run Code Online (Sandbox Code Playgroud)
然后我打电话:
snakemake --jobs 4 …Run Code Online (Sandbox Code Playgroud) 目标:
研究:
代码片段:
#!/bin/bash
#SBATCH --job-name LEBT
#SBATCH --partition=angel
#SBATCH --nodelist=node38
#SBATCH --sockets-per-node=1
#SBATCH --cores-per-socket=1
#SBATCH --time 00:10:00
#SBATCH --output LEBT.out
# the slurm module provides the srun command
module load openmpi
srun -n 1 ./LU.exe -i 100 -s 100 &
srun -n 1 ./BT.exe &
wait
Run Code Online (Sandbox Code Playgroud)
手册页:
[srun]-->[https://computing.llnl.gov/tutorials/linux_clusters/man/srun.txt]
[mpirun]-->[https://www.open-mpi.org/doc/v1.8/man1/mpirun.1.php]
Run Code Online (Sandbox Code Playgroud) 我想问你是否可以将全局系统变量传递给#SBATCH标签。
我想做一些类似的事情
批处理文件
#!/bin/bash -l
ARG=64.dat
NODES=4
TASK_PER_NODE=8
NP=$((NODES*TASK_PER_NODE))
#SBATCH -J 'MPI'+'_'+$NODES+'_'+$TASK_PER_NODE
#SBATCH -N $NODES
#SBATCH --ntasks-per-node=$TASK_PER_NODE
Run Code Online (Sandbox Code Playgroud)
这不是工作,所以这就是我问你的原因。
我正在使用 slurm 运行多个数组作业。对于给定的数组作业 ID(假设为 885881),我想列出失败作业和已完成作业的计数。像这样的东西:
输入:
<some-command> -j 885881
Run Code Online (Sandbox Code Playgroud)
输出:假设数组中有 200 个作业。
count | status
120 | failed
80 | completed
Run Code Online (Sandbox Code Playgroud)
其次,如果我能够获得任务失败的唯一原因列表,那就太好了。
输入:
`<some-command> -j 885881`
Run Code Online (Sandbox Code Playgroud)
输出:
count | reason
80 | OUT_OF_MEMORY
40 | TIMED_OUT
Run Code Online (Sandbox Code Playgroud)
我相信sacct可以利用命令以某种方式获得这些结果,但不确定如何实现。