在使用 DRMAA 时使用 Snakemake 设置 SGE 群集作业名称?



>问题

我不确定是否正在保存 -N 参数。SGE 集群。除了 -N 参数之外,一切正常。

  • Snakemake 需要有效的 -N 调用
  • 它未正确设置作业名称。

它始终恢复为默认名称。这是我的调用,无论是否使用 -N 参数,它都有相同的结果。

snakemake --jobs 100 --drmaa "-V -S /bin/bash -o log/mpileup/mpileupSPLIT -e log/mpileup/mpileupSPLIT -l h_vmem=10G -pe ncpus 1 -N {rule}.{wildcards}.varScan"

我发现影响作业名称的唯一方法是使用 --jobname。

snakemake --jobs 100 --drmaa "-V -S /bin/bash -o log/mpileup/mpileupSPLIT -e log/mpileup/mpileupSPLIT -l h_vmem=10G -pe ncpus 1 -N {rule}.{wildcards}.varScan" --jobname "{rule}.{wildcards}.{jobid}"

背景

我尝试了各种各样的东西。通常我实际上只使用集群配置文件,但这也不起作用,所以这就是为什么在上面的代码中,我放弃了文件系统以确保它是没有保存的"-N"命令。

我通常的电话是:

snakemake --drmaa "{cluster.clusterSpec}" --jobs 10 --cluster-config input/config.json 

1) 如果我使用"-n"而不是"-N",则会收到工作流错误:

drmaa.errors.DeniedByDrmException: code 17: ERROR! invalid option argument "-n"

2)如果我使用"-N",但给它一个不正确的通配符,说{rule.name}:

AttributeError: 'str' object has no attribute 'name'

3) 我不能同时使用 --drmaa 和 --cluster:

snakemake: error: argument --cluster/-c: not allowed with argument --drmaa

4)如果我在config.json文件中指定{jobid},那么Snakemake不知道如何处理它。

RuleException in line 13 of /extscratch/clc/projects/tboyarski/gitRepo-LCR-BCCRC/Snakemake/modules/mpileup/mpileupSPLIT:
NameError: The name 'jobid' is unknown in this context. Please make sure that you defined that variable. Also note that braces not used for variable access have to be escaped by repeating them, i.e. {{print $1}}

编辑添加#5带解决方案

5)我可以使用config.json设置作业名称,然后在我的snakemake调用中连接jobid。这样我就有了一个通用的蛇做调用(--jobname "{cluster.jobName}.{jobid}"),以及一个高度可配置的特定作业名称({rule}-{wildcards.sampleMPUS}_chr{wildcards.chrMPUS}),其结果是:

mpileupSPLIT-Pfeiffer_chr19.1.e7152298

根据 DAG 的 Snakemake jobid,1 是 Snakemake jobid。 7152298是群集的作业编号。

第二次编辑- 刚刚尝试了v3.12,同样的事情。串联必须在蛇形调用中发生。

替代解决方案

我也可以接受这样的事情:

snakemake --drmaa "{cluster.clusterSpec}" --jobname "{cluster.jobName}" --jobs 10 --cluster-config input/config.json

使用我的集群文件,如下所示:

"mpileupSPLIT": {
"clusterSpec": "-V -S /bin/bash -o log/mpileup/mpileupSPLIT -e log/mpileup/mpileupSPLIT -l h_vmem=10G -pe ncpus 1 -n {rule}.{wildcards}.varScan",
"jobName": "{rule}-{wildcards.sampleMPUS}_chr{wildcards.chrMPUS}.{jobid}"
}

已审查的文档

我已经阅读了文档,但我无法弄清楚。

  1. http://snakemake.readthedocs.io/en/latest/executable.html?-highlight=job_name#cluster-execution

  2. http://snakemake.readthedocs.io/en/latest/snakefiles/configuration.html#snakefiles-cluster-configuration

  3. https://groups.google.com/forum/#!topic/snakemake/whwYODy_I74

系统

蛇制作 v3.10.2 (明天会尝试最新的康达版本) 红帽企业 Linux 服务器 5.4 版 SGE 集群

解决方案

在 snakemake 调用中使用 '--jobname' 而不是 qsub 参数提交中的 '-N'

将群集配置文件设置为具有作业名称后缀的可定位参数。在这种情况下,这些是我的名为"mpileupSPLIT"的Snakemake规则的覆盖:

"mpileupSPLIT": {
"clusterSpec": "-V -S /bin/bash -o log/mpileup/mpileupSPLIT -e log/mpileup/mpileupSPLIT -l h_vmem=10G -pe ncpus 1",
"jobName": "{rule}-{wildcards.sampleMPUS}_chr{wildcards.chrMPUS}"
}

使用包含 {jobid} 的通用 Snakemake 调用。在集群 (SGE) 上,"jobid"变量同时包含 Snakemake Job# 和集群作业 #,两者都很有价值,因为前者对应于 Snakemake DAG,后者用于集群日志记录。(例如 --jobname "{cluster.jobName}.{jobid}")

编辑添加了解决帖子的解决方案。

最新更新