【问题标题】:Setting the SGE cluster job name with Snakemake while using DRMAA?使用 DRMAA 时使用 Snakemake 设置 SGE 集群作业名称?
【发布时间】:2017-05-25 01:54:46
【问题描述】:

问题

我不确定是否保存了 -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 调用中连接作业 ID。这样我就有了一个通用的 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 版本) 红帽企业 Linux 服务器 5.4 版 SGE集群

【问题讨论】:

    标签: sungridengine snakemake drmaa


    【解决方案1】:

    解决方案

    在您的 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}")

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      相关资源
      最近更新 更多