13 Workflow caching and checkpointing

像 Nextflow 这样的工作流管理系统的一个关键特性是可重入性,即在上次成功执行的流程出现错误后重新启动管道的能力。可重入性允许在向管道添加更多数据时跳过耗时的已经完成的步骤,例如创建索引。这会促进更快的工作流原型的开发,以及更快的附加数据分析。Nextflow 通过缓存和检查点自动跟踪管道中执行的所有进程来实现重入。

Resume

为了从最后一个成功执行的进程重新启动,可以在命令行中添加-resume选项。例如:

$ nextflow run wc.nf --input 'data/yeast/reads/ref1*.fq.gz' -resume

如何恢复工作

这个机制依赖于为每个任务分配的唯一的ID。这个ID用来创建一个单独的执行目录在work目录下,在这个目录中执行任务并存储结果。
当恢复一个workflow时会使用这个ID检查:

  1. 工作目录是否存在
  2. 命令行的退出状态是否正确
  3. 是否包含期望的输出文件

如果以上全部满足,那么这部分任务会跳过并且使用之前的计算结果。当任务需要重新计算时,如上述条件不能满足时,下游的任务会自动失效。

因此,如果修改了脚本的某些部分,或者修改了输入数据,使用-resume执行时将只执行实际修改的进程。
未被修改的进程将不会执行,使用缓存的结果。

work目录

默认情况下,管道结果缓存在work目录,也是管道执行的地方。
可以使用tree命令来查看work目录的内容。默认tree不会显示隐藏文件,可以使用-a查看所有的文件。

$ tree -a work

输出:

work/
├── 12
│   └── 5489f3c7dbd521c0e43f43b4c1f352
│       ├── .command.begin
│       ├── .command.err
│       ├── .command.log
│       ├── .command.out
│       ├── .command.run
│       ├── .command.sh
│       ├── .exitcode
│       └── temp33_1_2.fq.gz -> /home/training/data/yeast/reads/temp33_1_2.fq.gz
├── 3b
│   └── a3fb24ad3242e4cc8e5aa0c24d174b
│       ├── .command.begin
│       ├── .command.err
│       ├── .command.log
│       ├── .command.out
│       ├── .command.run
│       ├── .command.sh
│       ├── .exitcode
│       └── temp33_2_1.fq.gz -> /home/training/data/yeast/reads/temp33_2_1.fq.gz
├── 4c
│   └── 125b5e5a5ee144fa25dd9bccd467e9
│       ├── .command.begin
│       ├── .command.err
│       ├── .command.log
│       ├── .command.out
│       ├── .command.run
│       ├── .command.sh
│       ├── .exitcode
│       └── temp33_3_1.fq.gz -> /home/training/data/yeast/reads/temp33_3_1.fq.gz
├── 54
│   └── eb9d72e9ac24af8183de569ab0b977
│       ├── .command.begin
│       ├── .command.err
│       ├── .command.log
│       ├── .command.out
│       ├── .command.run
│       ├── .command.sh
│       ├── .exitcode
│       └── temp33_2_2.fq.gz -> /home/training/data/yeast/reads/temp33_2_2.fq.gz
├── e9
│   └── 31f28c291481342cc45d4e176a200a
│       ├── .command.begin
│       ├── .command.err
│       ├── .command.log
│       ├── .command.out
│       ├── .command.run
│       ├── .command.sh
│       ├── .exitcode
│       └── temp33_1_1.fq.gz -> /home/training/data/yeast/reads/temp33_1_1.fq.gz
└── fa
    └── cd3e49b63eadd6248aa357083763c1
        ├── .command.begin
        ├── .command.err
        ├── .command.log
        ├── .command.out
        ├── .command.run
        ├── .command.sh
        ├── .exitcode
        └── temp33_3_2.fq.gz -> /home/training/data/yeast/reads/temp33_3_2.fq.gz

任务执行目录

work目录中有多个任务执行目录。每次执行进程都有一个目录。这些任务目录使用task ID表示。
任务执行目录包含:

  • .command.sh:命令行执行脚本。
  • .command.run:用于执行任务的包装的命令。
  • .command.out:任务完成的输出。
  • .command.err:任务的错误输出。
  • .command.log:封装的执行输出。
  • .command.begin:任务启动后立即创建的文件。
  • .exitcode:任务的退出码。
  • 任务的输入文件(符号链接)。
  • 任务的输出文件。

指定另外的工作目录

work目录会占用很大的磁盘空间。可以指定其他的目录使用-w选项。

$ nextflow run wc.nf --input 'data/yeast/reads/temp33*' -w second_work_dir -resume

清理工作目录

如果确定不用恢复管道执行,可以使用nextflow clean来定期清理该目录。

$ nextflow clean [run_name|session_id] [options]

可以使用-n选项查看要删除的文件而不会删除它们,或使用-f强制删除这些文件。如果只想删除文件,但保留执行日志和元数据,可以使用-k选项。多次运行可以被清理使用-before, -after, -but选项。例如:下面的命令会删除在gigantic_minsky之前运行的所有的临时文件和日志条目。

$ nextflow clean -f -before gigantic_minsky
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值