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

如何实现自动从/dvs_ro读取输入的Snakemake存储插件

解决Snakemake区分输入/输出以适配NERSC只读挂载的方案

方案1:直接利用路径替换结合输入输出标记

Snakemake天然区分输入与输出文件,无需复杂插件就能实现路径适配:

  • 对规则中input字段的所有路径,将/global替换为/dvs_ro;output字段保持/global路径不变。
  • 示例代码:
    def adapt_input_path(path):
        return path.replace("/global", "/dvs_ro")
    
    rule process_data:
        input:
            adapt_input_path("/global/dataset/raw_data.csv")
        output:
            "/global/processed/clean_data.csv"
        shell:
            "python process.py {input} {output}"
    

方案2:自定义存储插件中通过is_output参数判断

如果坚持使用存储插件,可借助Snakemake传递的is_output参数区分文件类型:

  • 插件的get_file方法会接收is_output布尔值,据此选择对应挂载路径:
  • 核心代码示例:
    class NERSCStorage(StorageInterface):
        def get_file(self, path, is_output=False):
            if is_output:
                return f"/global{path}"
            else:
                return f"/dvs_ro{path}"
    
  • 注册插件后,Snakemake会自动为输入、输出文件分配对应路径。

方案3:配置文件+通配符批量管理路径

针对大规模工作流,可在配置文件中定义路径规则,结合通配符批量适配:

  • 配置文件(config.yaml):
    nersc_paths:
        input_root: "/dvs_ro"
        output_root: "/global"
    
  • 规则中调用示例:
    rule batch_process:
        input:
            expand("{input_root}/samples/{sample}.fastq", 
                   input_root=config["nersc_paths"]["input_root"],
                   sample=["S1", "S2", "S3"])
        output:
            expand("{output_root}/alignments/{sample}.bam",
                   output_root=config["nersc_paths"]["output_root"],
                   sample=["S1", "S2", "S3"])
        shell:
            "aligner {input} -o {output}"
    

内容的提问来源于stack exchange,提问作者gipert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 21:12:05