You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nextflow进程间无拷贝传输文件及清理工作区

Nextflow大文件优化:共享存储与工作区清理方案

问题1:使用共享存储避免大文件拷贝

Nextflow默认会将上游进程的输出文件拷贝到下游进程的独立工作区,大文件场景下效率极低。可以通过以下两种方式解决:

方式1:配置全局共享工作区+软链接模式

在nextflow.config中指定共享存储路径作为工作区,并设置文件 staging 模式为软链接(避免物理拷贝):

// nextflow.config
process {
    // 指定共享存储上的工作目录
    workDir = "/shared/storage/nextflow_work"
    // 输入输出用软链接替代拷贝
    stageInMode = 'symlink'
    stageOutMode = 'symlink'
}

原代码无需大幅修改,Nextflow会自动通过软链接在进程间共享文件,完全跳过拷贝步骤。

方式2:直接在进程中写入共享存储路径

让进程直接将输出写入共享存储的固定路径,下游进程直接访问该路径:

process download {
    input:
        val zip
    output:
        // 输出到共享存储绝对路径
        path "/shared/storage/${zip}/${zip}.zip", emit: zipPath
    shell:
        """
        mkdir -p "/shared/storage/${zip}"
        echo "foo" > "/shared/storage/${zip}/${zip}.zip"
        echo "bar" >> "/shared/storage/${zip}/${zip}.zip"
        """
}

process decompress {
    input:
        path zipPath
    shell:
        """
        echo ${zipPath}
        cat ${zipPath}
        """
}

workflow { 
    download("ZIP01")
    println download.out.zipPath
    decompress(download.out.zipPath)
}

这种方式下,下游进程直接读取共享存储的文件,彻底避免文件拷贝开销。


问题2:自动清理工作区,仅保留进程元文件

要在流程完成后自动清理工作区的大文件,仅保留command.*、.exitcode等进程元文件,可通过以下方法实现:

方式1:运行时启用清理

启动流程时添加-cleanup参数:

nextflow run your_script.nf -cleanup

方式2:全局配置自动清理

在nextflow.config中添加全局配置,所有流程运行都会自动执行清理:

// nextflow.config
cleanup = true

方式3:事后清理旧运行

如果需要清理已完成的旧流程工作区,使用nextflow clean命令:

# 强制清理所有已完成的运行工作区
nextflow clean -f

启用cleanup后,Nextflow会在进程成功执行完成后,自动删除工作区中除进程元文件外的所有数据文件,避免存储空间被大量占用。


内容的提问来源于stack exchange,提问作者jlo-gmail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:20:21