Snakemake中如何从指定规则重新运行流程并忽略上游依赖
在Snakemake工作流管理系统中,有时我们需要从某个特定规则重新运行流程,而不关心其上游依赖是否完整。这种需求常见于以下场景:上游规则生成了大型临时文件,这些文件在流程完成后已被删除,但我们希望仅重新执行下游规则。
问题背景
假设我们有一个典型的Snakemake工作流,包含四个规则a、b、c、d,其中每个规则的输出都是下一个规则的输入:
rule a → rule b → rule c → rule d
当我们需要重新运行rule d时,默认情况下Snakemake会检查整个依赖链,包括rule b的输出。但如果rule b生成了大型临时文件且已被删除,这种检查就会导致问题。
解决方案:使用ancient函数
Snakemake提供了ancient()函数来解决这个问题。该函数可以标记输入文件,告诉Snakemake忽略这些文件的时间戳检查,仅检查文件是否存在。
基本用法
对于简单的规则依赖,可以直接在输入文件前使用ancient():
rule d:
input:
ancient("path/to/output/of/c")
output:
"path/to/output/of/d"
shell:
"..."
复杂场景:动态输入文件列表
当rule d的输入是通过函数动态生成的文件列表时,可以将整个列表包裹在ancient()中:
def get_lst_of_c_output(wildcards):
smpl_list = sample_list[wildcards.tag]
return expand("path/to/output/of/c/{smpl}.txt", smpl=smpl_list)
rule d:
input:
ancient(get_lst_of_c_output)
output:
"path/to/output/of/d"
shell:
"..."
重要注意事项
-
rule all的输入:确保rule all仅依赖于最终输出文件(如rule d的输出),而不是中间文件。如果rule all依赖于中间文件,Snakemake仍会尝试重建这些文件。
-
命令行参数:运行时需要添加
--rerun-triggers mtime参数,确保Snakemake仅检查文件存在性而不检查时间戳。 -
文件存在性:虽然
ancient()跳过了时间戳检查,但输入文件必须实际存在,否则会报错。
实际应用示例
以下是一个完整的工作示例,展示了如何正确使用ancient():
rule all:
input:
"d/output.txt"
rule a:
output:
"a/output.txt"
shell:
"echo a > {output}"
rule b:
input:
rules.a.output
output:
"b/output.txt"
shell:
"echo b > {output}"
rule c:
input:
rules.b.output
output:
"c/{smpl}.txt"
shell:
"echo c > {output}"
def get_lst_of_c_output(wildcards):
return expand("c/{smpl}.txt", smpl=range(3))
rule d:
input:
ancient(get_lst_of_c_output)
output:
"d/output.txt"
shell:
"echo d > {output}"
在这个例子中,即使删除了rule b的输出文件,只要rule c的输出文件存在,就可以直接运行rule d:
snakemake --rerun-triggers mtime
总结
通过使用ancient()函数,我们可以灵活控制Snakemake工作流的执行方式,在需要时跳过对上游依赖的检查。这种方法特别适用于处理大型中间文件的场景,可以显著提高工作流的执行效率。记住要正确设置rule all的依赖关系,并添加必要的命令行参数,才能确保这一机制正常工作。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
compass-metrics-modelMetrics model project for the OSS CompassPython00