7

我可以向 SLURM 提交“单行”吗?

使用bsubLSF 和标准 Linux 实用程序xargs,我可以轻松地提交一个单独的作业来解压缩目录中的所有文件:

ls *.gz | sed 's/.gz$//g' | xargs -I {} bsub 'gunzip -c {}.gz > {}'


使用 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 naive_S1_L001_R1_001.fastq.gz > naive_S1_L001_R1_001.fastq

bsub从 LSF中看到与SLURM 中的列表等效sbatch,但到目前为止,它们似乎仅等效于提交脚本文件:

                  SLURM                    LSF
                  --------------------     ------------------
Job Submission    sbatch [script_file]     bsub [script_file]

有没有其他方法可以使用 SLURM 提交“单线”作业?

4

3 回答 3

10

尝试使用sbatch. 类似于以下内容:

ls *.gz | sed 's/.gz$//g' | xargs -I {}  sbatch --wrap="gunzip -c {}.gz > {}"

从 `sbatch` 的手册页:
--wrap=<command string>
       Sbatch will wrap the specified command string in  a  simple  "sh"  shell
       script,  and submit that script to the slurm controller.  When --wrap is
       used, a script name and arguments may not be specified  on  the  command
       line; instead the sbatch-generated wrapper script is used.
于 2015-04-23T09:56:28.343 回答
2

您也可以通过管道输入sbatch. 这是一个例子

echo '#!/bin/bash
touch hello_slurm.txt
' | sbatch -e err.log -o out.log

这可以“强制”成一行,也可以与 一起很好地工作xargs -n1,但我认为以这种方式来说明这个想法更具可读性。

我个人更喜欢heredoc这里,因为如果嵌入的“one-liner”或“some-liner”也包含单引号,它会增加更多的灵活性(这使得它与 imho 相比也是一个更通用的解决方案sbatch --wrap):

sbatch  -e err.log -o out.log <<"EOF"
#!/bin/bash
touch 'hello_slurm2.txt'
EOF

bsub顺便说一句,因为问题中也提到了:使用 LSF 时,同样的方法也适用。

于 2016-05-02T16:10:50.723 回答
1

基于Carles Fenoy 的回答,我创建了一个名为sbatch_run的实用程序。

该脚本接受作业名称和引号中的命令,然后为您创建脚本(并为您运行它)。

sbatch_run jobname 'ls -lArt > list_of_files.txt'

将创建以下脚本并为您运行它:

#!/bin/env bash
#SBATCH -J jobname.sbatch
#SBATCH -o jobname.sbatch.o_%j
#SBATCH -e jobname.sbatch.e_%j
#SBATCH --partition c14,general,HighMem
#SBATCH --mem 5G
#SBATCH --cpus-per-task 1
#SBATCH --nodes 1
#SBATCH --time 2-0

ls -lArt > list_of_files.txt

有用于设置每个任务的内存和 CPU 等选项。

于 2015-12-11T21:17:18.353 回答