我试图将给定规则的集群内存分配基于输入文件的文件大小。这在snakemake中可能吗?如果可以的话如何实现?
到目前为止,我已经尝试在该resource:部分中指定它,如下所示:
rule compute2:
input: "input1.txt"
output: "input2.txt"
resources:
mem_mb=lambda wildcards, input, attempt: int(os.path.getsize(str(input))/(1024*1024))
shell: "touch input2.txt"
Run Code Online (Sandbox Code Playgroud)
但似乎 Snakemake 尝试在创建文件之前预先计算此值,因为我收到此错误:
InputFunctionException in line 35 of test_snakemake/Snakefile:
FileNotFoundError: [Errno 2] No such file or directory: 'input1.txt'
Run Code Online (Sandbox Code Playgroud)
我使用以下命令运行我的snakemake:
snakemake --verbose -j 10 --cluster-config cluster.json --cluster "sbatch -n {cluster.n} -t {cluster.time} --mem {resources.mem_mb}"
Run Code Online (Sandbox Code Playgroud)
小智 1
使用该选项可以实现这一点--default-resources。正如 Snakemake 的 --help 信息中所解释的:
除了普通整数之外,还允许超过输入大小的 python 表达式(例如
'2*input.size_mb')。当不带任何参数 (--default-resources) 指定此项时,它定义'mem_mb=max(2*input.size_mb, 1000)''disk_mb=max(2*input.size_mb, 1000)',即默认磁盘和内存使用量是输入文件大小的两倍,但至少为 1GB。
| 归档时间: |
|
| 查看次数: |
1334 次 |
| 最近记录: |