0

问题

我不确定是否正在保存 -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 w/解决方案

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

mpileupSPLIT-Pfeiffer_chr19.1.e7152298

1 是根据 DAG 的 Snakemake jobid。7152298 是我集群的工作编号。

第二次编辑- 刚试过 v3.12,同样的事情。连接必须发生在snakemake 调用中。

替代解决方案

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

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

系统

Snakemake v3.10.2 (明天将尝试最新的 conda 版本) Red Hat Enterprise Linux Server release 5.4 SGE Cluster

4

1 回答 1

0

解决方案

在您的 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# 和 Cluster Job#,两者都很有价值,因为第一个对应于 Snakemake DAG,后者用于集群日志记录。(例如 --jobname "{cluster.jobName}.{jobid}")

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

于 2017-05-25T07:52:34.690 回答