docker 本地资源的Snakemake奇点/关于--use-singularity的Snakemake的问题

5n0oy7gb  于 2023-01-20  发布在  Docker
关注(0)|答案(2)|浏览(145)

我开始尝试在Snakemake中使用容器,我有一个问题,即哪些需要预构建到容器中,哪些不需要。例如:
我想在一个容器中运行一个python脚本(例如,存储在workflow_root/scripts/ www.example.com中myScript.py),并通过管道从另一个程序导入。我是否需要将python脚本构建到容器中,将其声明为输入文件,或者可以从容器中访问它(以及如何指向它)?我当前的规则如下所示:

rule myRule:
    params:
        sample = get_sample,
        basePath = sys.path[0]
    input:
        in1=get_in1,
        in2=get_in2
    output:
        out1 = "{runPath}/{sample}_read1_dcs.fq.gz",
        out2 = "{runPath}/{sample}_read2_dcs.fq.gz"
    priority: 50
    conda:
       "envs/myEnv.yaml"
    log:
        "{runPath}/logs/{sample}_myRule.log"
    shell:
        """
        set -e
        set -o pipefail
        set -x
        {{
        picard FastqToSam \
        F1={input.in1} \
        F2={input.in2} \
        O=/dev/stdout \
        SM={params.sample} \
        TMP_DIR=picardTempDir \
        SORT_ORDER=unsorted \
        | python3 {params.basePath}/scripts/myScript.py \
        --input /dev/stdin \
        --prefix {wildcards.sample}
        }} 2>&1 | tee -a {log}
        """

我想运行bwa,在那里我需要使用一个相当大的用户提供的引用。我可以这样做吗?或者我需要将该引用构建到容器中吗?(我还想使用ensemble-VEP,它有自己的相当大的引用数据库要处理)。
我想我的问题归结起来就是:Snakemake将哪些文件/位置挂载到容器中,当我编写涉及shell命令的规则时,我在哪里可以找到它们?文档似乎对此不是很清楚,如果能够在不做大量实验的情况下弄清楚这一点,那就太好了。

yhqotfr8

yhqotfr81#

我将分享我如何使用snakemake与singularity和conda。这个设置已经为我工作了一年多。这个设置可能适合也可能不适合你的目的;所以你可以随便问问题。

  • Snakemake工作流沿着必要的脚本、配置和文档都在单独的git repo中。数据不会存储在这里。
  • 奇点容器是通过工作流中的singularity:指令在全局级别定义的,我没有手工构建容器;造蛇者就是这样。
  • Conda环境是通过conda:指令定义的。在复杂的项目中,有时可能有超过15-20个独立的conda环境。Snakemake在singularity容器中构建这些conda环境。
  • 数据与源代码是分开保存的。相反,工作流配置文件(通常通过configfile:指令定义)包含它们的路径信息。

示例Snakefile如下所示:

# config for the workflow
configfile: "configs/workflow_configs.yaml"

# singularity image to use
singularity: "docker://continuumio/miniconda3:4.7.12"

rule all:
   input:
       .....

rule some_job:
    input:
        .....
    output:
        .....
    conda: 
        "path/to/conda_env.yaml"
    shell:
        "....."

只要工作流程所需的所有工具都可通过conda使用,此设置就有效。也可以覆盖特定规则的全局奇点容器,并使用不同的奇点容器或根本不使用容器。
此外,我不构建自己的奇点容器,而是使用docker-hub提供的通用容器。无论如何,我没有权限在我使用的HPC系统中构建自己的奇点容器。因此,这种设置消除了在某处构建映像,然后将其移动到HPC环境的麻烦。

tzdcorbm

tzdcorbm2#

工作目录下的所有内容都是可用的,并且可以按预期访问。但是,通过绝对路径引用的内容需要挂载。
因此,如果您的脚本位于scripts/my_script.py目录下,那么它将按原样可用。但是,如果您使用诸如/scratch/user42之类的临时目录,那么您需要使用类似于

snakemake --singularity-args '-B /scratch/user42:/scratch/user42'

就我个人而言,我在config.yaml中为cluster profile指定挂载,因此我不必再为额外的CLI参数而烦恼。

~/.config/snakemake/[配置文件名称]/配置文件名称

singularity-args: '-B /scratch/user42:/scratch/user42'

无论何时使用--profile [profile_name],都将包括此设置。

相关问题