使用 DRMAA 时使用 Snakemake 设置 SGE 集群作业名称?
Setting the SGE cluster job name with Snakemake while using DRMAA?
问题
我不确定是否保存了 -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 }}
编辑添加了#5 w/解决方案
5) 我可以使用 config.json 设置作业名称,然后在我的 snakemake 调用中连接作业 ID。这样我就有了一个通用的 snakemake 调用(--jobname "{cluster.jobName}.{jobid}")和一个高度可配置的特定作业名称({rule}-{wildcards.sampleMPUS}_chr{wildcards.chrMPUS}) 结果是:
mpileupSPLIT-Pfeiffer_chr19.1.e7152298
根据DAG,1是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}"
}
文档已审核
我已阅读文档,但无法理解。
http://snakemake.readthedocs.io/en/latest/executable.html?-highlight=job_name#cluster-execution
- https://groups.google.com/forum/#!topic/snakemake/whwYODy_I74
系统
Snakemake v3.10.2 (明天试试最新的conda版本)
Red Hat Enterprise 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# 和 Cluster Job#,两者都很有价值,因为第一个对应于 Snakemake DAG,后者用于集群日志记录。 (例如 --jobname "{cluster.jobName}.{jobid}")
编辑 添加解决方案以解决 post。
问题
我不确定是否保存了 -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 }}
编辑添加了#5 w/解决方案
5) 我可以使用 config.json 设置作业名称,然后在我的 snakemake 调用中连接作业 ID。这样我就有了一个通用的 snakemake 调用(--jobname "{cluster.jobName}.{jobid}")和一个高度可配置的特定作业名称({rule}-{wildcards.sampleMPUS}_chr{wildcards.chrMPUS}) 结果是:
mpileupSPLIT-Pfeiffer_chr19.1.e7152298
根据DAG,1是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}"
}
文档已审核
我已阅读文档,但无法理解。
http://snakemake.readthedocs.io/en/latest/executable.html?-highlight=job_name#cluster-execution
- https://groups.google.com/forum/#!topic/snakemake/whwYODy_I74
系统
Snakemake v3.10.2 (明天试试最新的conda版本) Red Hat Enterprise 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# 和 Cluster Job#,两者都很有价值,因为第一个对应于 Snakemake DAG,后者用于集群日志记录。 (例如 --jobname "{cluster.jobName}.{jobid}")
编辑 添加解决方案以解决 post。