第九章 通過Snakemake實(shí)現(xiàn)流程自動(dòng)化 Pipeline Automation via Snakemake

介紹

憑借經(jīng)濟(jì)高效的全基因組測(cè)序和廣泛公開的數(shù)據(jù),新一代生物信息學(xué)方法進(jìn)入了超高通量領(lǐng)域。例如,最近發(fā)表的覆蓋度超過30x的 10 多個(gè)小麥基因組的組裝或用泛基因組取代單一參考基因組。然而,這些空前數(shù)量的數(shù)據(jù)的下游處理和分析往往很復(fù)雜。生物信息學(xué)方法通常由多個(gè)步驟組成,利用大量公開可用的第三方軟件進(jìn)行生物分析,這些軟件在 Unix 兼容操作系統(tǒng)上執(zhí)行。然而,每個(gè)步驟的軟件通常使用不同的編程語言,可用在幾個(gè)版本中,或者隨著時(shí)間的推移而變得過時(shí)。管道中順序使用的不同軟件包的交叉兼容性問題已通過多種方式解決。軟件存儲(chǔ)庫采用了維護(hù)每個(gè)包的不同版本的策略,并允許通過獨(dú)立的虛擬環(huán)境使用不同的安裝。 Anaconda 是最流行的版本控制和軟件存儲(chǔ)庫之一,可幫助用戶安裝和維護(hù)不同版本的 Python、PERL、R 和 Unix 包。

由于生物信息學(xué)的發(fā)展,數(shù)據(jù)大小和隨之而來的計(jì)算需求增加了多個(gè)數(shù)量級(jí)。單個(gè)輸入數(shù)據(jù)文件的范圍通常高達(dá)數(shù)百 GB,處理它們可能需要在單個(gè)內(nèi)核上花費(fèi)數(shù)月的計(jì)算時(shí)間。大多數(shù)生物信息學(xué)軟件都可以通過 pthreads(POSIX 線程)多線程進(jìn)行擴(kuò)展,它將計(jì)算工作分配到多個(gè)內(nèi)核上。然而,現(xiàn)代數(shù)據(jù)集的處理通常會(huì)取代臺(tái)式計(jì)算機(jī)的大部分計(jì)算資源。高性能計(jì)算 (HPC) 集群提供數(shù)百個(gè)內(nèi)核、高內(nèi)存和主要數(shù)據(jù)存儲(chǔ)選項(xiàng)。雖然使用 HPC 集群是新一代生物信息學(xué)任務(wù)的最佳選擇,但 HPC 集群的可用性較差。計(jì)算任務(wù)(稱為作業(yè))需要在 HPC 集群的工作節(jié)點(diǎn)上執(zhí)行,這些工作節(jié)點(diǎn)采用獨(dú)立的文件系統(tǒng)和環(huán)境。然后,這些作業(yè)需要在 HPC 集群的作業(yè)調(diào)度程序(例如 SLURM 工作負(fù)載管理器)中排隊(duì),以便在下一個(gè)可用的工作節(jié)點(diǎn)上運(yùn)行。雖然作業(yè)調(diào)度通常由調(diào)度程序有效處理,但為作業(yè)分配的計(jì)算資源不能自動(dòng)確定,必須由用戶預(yù)定義。這給已經(jīng)錯(cuò)綜復(fù)雜的生物信息學(xué)管道工作流程增加了另一層復(fù)雜性。

為了簡化鏈接生物軟件和在 HPC 集群上的數(shù)百個(gè)輸入文件上運(yùn)行正確版本的過程,已經(jīng)開發(fā)了多種管道自動(dòng)化工具。 Snakemake 是 GNU Make 的演變,用于在 UNIX 系統(tǒng)上編譯軟件。雖然代碼通常在自上而下的系統(tǒng)中運(yùn)行,但 Snakemake 會(huì)根據(jù)已完成的依賴項(xiàng)執(zhí)行步驟。一旦它們的依賴關(guān)系都得到滿足,步驟就會(huì)啟動(dòng) [7]。 Snakemake 還與 SLURM 等 HPC 集群作業(yè)調(diào)度程序交互,以自動(dòng)提交作業(yè)。設(shè)置和運(yùn)行 Snakemake 將在以下部分使用示例管道進(jìn)行討論。該示例將涉及使用 Bowtie2 [8] 將整個(gè)基因組測(cè)序文件與參考比對(duì),使用 Samtools [9] 將 BAM 文件轉(zhuǎn)換為 FASTQ 文件,并使用 Samtools 創(chuàng)建每個(gè)堿基的覆蓋率表。

材料

輸入文件

此示例的輸入文件是 fastq 格式的測(cè)序讀?。簊ample-A.R1.fq、sample-A.R2.fq、sample-B.R1.fq 和 sample-B。 R2.fq。這些應(yīng)該放在名為 input_data 的數(shù)據(jù)目錄中。
此外,應(yīng)在工作目錄中創(chuàng)建一個(gè)名為 snakefile 的新空白文件,稍后將對(duì)其進(jìn)行修改

硬件

該協(xié)議旨在用于 HPC 集群。雖然具體要求因任務(wù)而異,但處理 WGS 數(shù)據(jù)通常需要 GB 到 TB 范圍內(nèi)的磁盤空間和至少具有八個(gè)內(nèi)核的多個(gè)節(jié)點(diǎn)才能有效地?cái)U(kuò)展流程。

軟件

所有軟件都在 HPC 集群上的 UNIX 環(huán)境中運(yùn)行。包管理器 Anaconda 用于安裝 Snakemake??梢栽谝韵挛恢毛@取 Anaconda:https://www.anaconda.com/products/individual 一旦 Anaconda 被初始化,它可以用來安裝 Snakemake 和對(duì)各個(gè)步驟進(jìn)行故障排除。

方法

安裝軟件

Anaconda

wget https://repo.anaconda.com/archive/Anaconda3-2020.07-Linux-x86_64.sh 
chmod +x Anaconda3-2020.07-Linux-x86_64.sh
binbash Anaconda3-2020.07-Linux-x86_64.sh

創(chuàng)建一個(gè)新的 Anaconda 環(huán)境,激活它,并安裝 Snakemake。

conda create -n snakemake 
conda activate snakemake 
conda install -c bioconda snakemake

為了保持 Snakemake 和 HPC 集群之間的穩(wěn)定交互,應(yīng)該使用 Anaconda 的更新功能定期更新 Snakemake

使用 Snakemake 運(yùn)行流程

Snakemake 使用蛇文件來指定在哪個(gè)數(shù)據(jù)文件上運(yùn)行哪個(gè)命令。 snakefile 由在每個(gè)管道步驟執(zhí)行的規(guī)則組成。每個(gè)規(guī)則指定輸入文件、輸出文件和使用輸入文件生成輸出文件的命令(在本例中為 bash shell)。

基本snakefile示例

rule bowtie2_alignment: 
    input: 
    R1=’input_data/sample-A_R1.fq’ 
    R2=’input_data/sample-A_R2.fq’ 
    output: 
    sam=’bowtie2_output/sample-A.sam’ 
    stats=’bowtie2_output/sample-A.stats’ 
    shell: 
    ’’’bowtie2 -X 1000 -x reference-genome -1 {input.R1} -2 {input.R2} -S {output.sam} --end-to-end --sensitive -threads 20 2> {output.stats}’’’

規(guī)則 bowtie2_alignment 搜索兩個(gè)輸入文件 sample-A.R1.fq 和 sample-A.R2.fq。如果找到這兩個(gè)文件,則規(guī)則可以執(zhí)行并運(yùn)行 Bowtie2 比對(duì)。除了執(zhí)行命令的規(guī)則之外,每個(gè) Snakemake 運(yùn)行都需要一個(gè)“全部規(guī)則(rule all)”,它表示所有輸入文件都已處理并且 Snakemake 可以關(guān)閉。 “Rule all”只接受輸入文件,一旦找到“rule all”的所有輸入文件,就會(huì)自動(dòng)終止 Snakemake 運(yùn)行。 “rule all”的輸入文件可以通過python 樣式列表傳遞。

添加rule all

rule all: 
    input: 
        [’bowtie2_output/sample-A.sam’, ’bowtie2_output/sample-A.stats’] 
    rule bowtie2_alignment: 
        input: 
            R1=’input_data/sample-A_R1.fq’ 
            R2=’input_data/sample-A_R2.fq’ 
            output:
            sam=’bowtie2_output/sample-A.sam’ 
            stats=’bowtie2_output/sample-A.stats’ 
            shell: 
            ’’’bowtie2 -X 1000 -x reference-genome -1 {input.R1} -2 {input.R2} -S {output.sam} --end-to-end --sensitive -threads 20 2> {output.stats}’’’

rule all 和規(guī)則 bowtie2_alignment 保存在一個(gè)名為 snakefile 的文件中,現(xiàn)在可以執(zhí)行 Snakemake:

$ Snakemake -j 4

Snakemake 現(xiàn)在將執(zhí)行所有指定的作業(yè),在四個(gè)本地內(nèi)核上運(yùn)行。

Snakemake 中的通配符

在基本示例中,Snakemake 將使用 sample-A.R1.fq 和 sample-A.R2.fq 作為輸入文件。 Snakemake 無需手動(dòng)指定所有輸入文件,而是理解通配符輸入。要在 Snakemake 中使用通配符,使用 glob_wildcards 函數(shù)創(chuàng)建通配符列表,然后在單獨(dú)的規(guī)則中使用這些通配符。 glob_wildcards 函數(shù)適用于大多數(shù) python 正則表達(dá)式模式,但具有清晰的文件結(jié)構(gòu)使用戶能夠創(chuàng)建簡單有效的通配符。

將 glob_wildcards 函數(shù)添加到 snakefile

IDS, = glob_wildcards(’input_data/{id}_R1.fq’)

glob_wildcards 現(xiàn)在將通過篩選與 glob_wildcards 輸入匹配的所有文件來生成對(duì)象 IDS。這將在給定示例中找到兩個(gè)文件:

input_data/sample-A.r1.fq 
input_data/sample-B.r1.fq.

在找到文件之后,glob_wildcards 提取替換變量部分 sample-A 和 sample-B,并自動(dòng)將它們添加到 IDS 的 python 風(fēng)格列表中。通配符列表 IDS 現(xiàn)在可以在 snakefile 中使用了,它的語法略有改變。

通配符 snakefile 示例

IDS, = glob_wildcards(’input_data/{id}_R1.fq’) 
rule all: 
    input: 
    expand[’aligned/{id}.sam’, id={IDS}] 
rule bowtie2_alignment: 
    input: 
    R1=’input_data/{id}_R1.fq’ 
    R2=’input_data/[2]_R2.fq’ 
    output: 
    sam=’bowtie2_output/[2].sam’ 
    stats=’bowtie2_output/[2].stats’ 
    shell: 
    ’’’bowtie2 -X 1000 -x reference-genome -1 {input.R1} -2 {input.R2} -S {output.sam} --end-to-end --sensitive -threads 20 2> {output.stats}’’’

這里通配符有兩種使用方式。首先,通配符是單獨(dú)指定的,例如在規(guī)則 bowtie2_alignment 中。這將分別對(duì)每個(gè)匹配的通配符運(yùn)行規(guī)則?;蛘?,由于 Snakemake 接受 python 樣式列表作為輸入和輸出變量,我們可以使用 expand 函數(shù)聚合 IDS 列表的所有變量,如 rule_all 所示??梢栽趦?yōu)秀的 Snakemake 小插圖中找到有關(guān) Snakemake 通配符的綜合指南:https://Snakemake.readthedocs.io/en/stable/snakefiles/rules.html#wildcards

日志和基準(zhǔn)

單個(gè) Snakemake 作業(yè)的日志和基準(zhǔn)有助于排除故障和優(yōu)化作業(yè)執(zhí)行。兩者都需要指定為 Snakemake 選項(xiàng),并且必須通過在命令中指定 2 > {log} 將每個(gè)命令的 std.out 傳遞給日志對(duì)象。
日志和基準(zhǔn)示例 snakefile

IDS, = glob_wildcards(’input_data/{id}_R1.fq’) 
rule all: 
    input: 
    expand[’aligned/{id}.sam’, id={IDS}] 
rule bowtie2_alignment: 
    input: 
    R1=’input_data/{id}_R1.fq’
    R2=’input_data/{id}_R2.fq’ 
    output: 
    sam=’bowtie2_output/{id}.sam’ 
    stats=’ bowtie2_output/{id}.stats’ 
    conda: ’path/to/conda-config.yaml’ 
    shell: 
    ’’’bowtie2 -X 1000 -x reference-genome -1 {input.R1} -2 {input.R2} -S {output.sam} --end-to-end --sensitive -threads 20 2> {log}’’’

Snakemake 中的版本控制

Snakemake 將不同軟件的無限命令鏈接在一起的能力增加了軟件或依賴項(xiàng)沖突的風(fēng)險(xiǎn)。為了避免沖突,Snakemake 可以使用 Anaconda 為每個(gè)規(guī)則創(chuàng)建一個(gè)臨時(shí)的 conda 環(huán)境。
運(yùn)行與 Anaconda 相關(guān)的 Snakemake 需要三件事。
1.創(chuàng)建一個(gè).yaml文件,指定該規(guī)則的conda環(huán)境應(yīng)該安裝哪些軟件包:

vim bowtie2_conda.yaml
  1. 將需要的環(huán)境添加到bowtie2_conda.yaml。
channels: - bioconda dependencies: - bowtie2=2.4.2

這個(gè) Anaconda 配置文件現(xiàn)在使用 conda 選項(xiàng)傳遞給 snakefile。
Anaconda snakefile 示例

IDS, = glob_wildcards(’input_data/{id}_R1.fq’) rule all: input: expand[’aligned/[2].sam’, id={IDS}] rule bowtie2_alignment: input: R1=’input_data/{id}_R1.fq’ R2=’input_data/{id}_R2.fq’ output: sam=’bowtie2_output/{id}.sam’ stats=’ bowtie2_output/{id}.stats’ conda: ’path/to/conda-config.yaml’ shell: ’’’bowtie2 -X 1000 -x reference-genome -1 {input.R1} -2 {input.R2} -S {output.sam} --end-to-end --sensitive -threads 20 2> {output.stats}
  1. 在 Snakemake 執(zhí)行中使用 --use-conda。
Snakemake --j 4 --use-conda

執(zhí)行Snakemake后,創(chuàng)建指定的Anaconda環(huán)境并執(zhí)行工作。

HPC 環(huán)境中的 Snakemake

在前面的示例中,Snakemake 在本地系統(tǒng)上運(yùn)行。雖然 snakefile 和數(shù)據(jù)結(jié)構(gòu)在 HPC 系統(tǒng)上是相同的,但需要調(diào)整作業(yè)執(zhí)行以適應(yīng) HPC 作業(yè)調(diào)度程序(本例中為 SLURM)。使用 Snakemake 在 SLURM 上安排作業(yè)的最簡單方法是使用 Snakemake 配置文件。配置文件是 .yaml 格式的文件,其中包含傳遞給 Snakemake 執(zhí)行的標(biāo)志。由于 config.yaml 文件是 YAML 格式,因此需要調(diào)整使用的選項(xiàng)的語法,詳見注釋 2。在此示例中,配置文件將被稱為 slurm,使用它的 Snakemake 調(diào)用將如下所示:

$Snakemake --profile slurm

Snakemake 現(xiàn)在將在 slurm/ 文件夾中查找 config.yaml 文件??梢詫?slurm/ 文件夾的絕對(duì)路徑傳遞給 --profile 標(biāo)志,或者在預(yù)定義位置創(chuàng)建文件夾,默認(rèn)位置為 HOME/.config/Snakemake/ 或 /etc./xdg/Snakemake/。對(duì)于此示例,在用戶的HOME 目錄中創(chuàng)建了 slurm/ 文件夾和 config.yaml 文件:

$ mkdir $HOME/.config/Snakemake/slurm 
$ touch $HOME/.config/Snakemake/slurm/config.yaml

此示例的 config.yaml 文件

jobs: 50 
cluster: ’sbatch -A ’HPC-account-name’ 
--cpus-per-task {resources.cpus} 
-p {resources.p} 
-n 1
 -t {resources.time} 
 --mem {resources.mem} 
 --cluster {resources.cluster} 
 -o ’slurm_logs/%j.{rule}_{wildcards}.out’ 
 -e ’slurm_logs/%j.{rule}_{wildcards}.err’ ’ 
    use-conda: true 
    keep-going: true 
    rerun-incomplete: true 
    default-resources: [cpus=20, mem=’58G’, time=’24:00:00’, p=’workq’]

通常,配置文件包含 Snakemake 標(biāo)志,例如包含 srun 標(biāo)志的集群選項(xiàng),以通過 SLURM 控制作業(yè)提交。使用標(biāo)志的細(xì)分:

jobs: 50

Snakemake 將向集群并行提交最多 50 個(gè)作業(yè),并在達(dá)到 50 個(gè)作業(yè)后暫停提交。作業(yè)完成后,將提交更多作業(yè)以再次達(dá)到限制。

use-conda: true

啟用 Snakemake conda 支持。對(duì)應(yīng)于 --useconda 標(biāo)志。

keep-going: true

默認(rèn)情況下,一旦出現(xiàn)錯(cuò)誤,Snakemake 將停止提交作業(yè)。如果 keep-going 設(shè)置為 true,獨(dú)立于失敗作業(yè)以外的作業(yè)仍將被提交。

rerun-incomplete: true

如果 Snakemake 運(yùn)行中斷,Snakemake 將刪除不完整的文件,任何中斷的作業(yè)將在下一次 Snakemake 執(zhí)行時(shí)重新運(yùn)行。

cluster:

集群標(biāo)志控制 HPC 提交(本例中為 SLURM)。通常,SLURM 使用 sbatch 函數(shù)提交作業(yè),sbatch 選項(xiàng)可以在 SLURM 文檔中找到。

-A {HPC-user-account} 
--cpus-per-task {integer, number of cores requested for a job} 
-p {queue, e.g., ’workq’} 
-t {requested wall time in ’hh:mm:ss’ format} 
--mem {requested job memory} 
-o {path/to/job-stdout-file} 
-e {path/to/job-error-file} ’

集群參數(shù)可以是固定值,也可以傳遞給一個(gè)對(duì)象,該對(duì)象是示例中的資源對(duì)象。資源對(duì)象本身包含在 config.yaml 中指定的值。例如,t {resources.time} 會(huì)指示 Snakemake 在對(duì)象資源中查找時(shí)間值并將其傳遞給 SLURM 的 -t wall time 標(biāo)志。通過添加資源選項(xiàng),為 snakefile 中的每個(gè)規(guī)則單獨(dú)創(chuàng)建資源對(duì)象。

HPC 資源 snakefile 示例

IDS, = glob_wildcards(’input_data/{id}_R1.fq’) 
rule all: 
input: 
    expand[’aligned/{id}.sam’, id={IDS}] 
rule bowtie2_alignment: 
    input: 
    R1=’input_data/{id}_R1.fq’ 
    R2=’input_data/{id}_R2.fq’ 
    output: 
    sam=’bowtie2_output/{id}.sam’ 
    stats=’ bowtie2_output/{id}.stats’ 
    conda: ’path/to/conda-config.yaml’ 
    resources: time = ’02:00:00’ 
    shell: 
    ’’’bowtie2 -X 1000 -x reference-genome -1 {input.R1} -2 {input.R2} -S {output.sam} --end-to-end --sensitive -threads 20 2> {output.stats}’’’

資源選項(xiàng)指定 2 小時(shí)的時(shí)間,然后將其傳遞給 SLURM。為避免指定每次創(chuàng)建規(guī)則時(shí)傳遞給 SLURM 的所有資源標(biāo)志,可以為 SLURM 標(biāo)志指定默認(rèn)值。這是通過將 defaultresources 選項(xiàng)添加到 config.yaml 來完成的,如上面的示例 config.yaml 文件所示。

構(gòu)建 Snakemake流程

Snakemake 的核心功能是按順序執(zhí)行多個(gè)任務(wù),從而生成自動(dòng)化管道。這是通過 Snakefile 中的輸入和輸出文件鏈管理的。一旦規(guī)則的輸入文件存在,規(guī)則就會(huì)被執(zhí)行,這會(huì)產(chǎn)生任務(wù)鏈。例如,如果規(guī)則 B 使用規(guī)則 A 的輸出文件作為輸入文件,規(guī)則 B 將在規(guī)則 A 完成后執(zhí)行。

IDS, = glob_wildcards(’input_data/{id}_R1.fq’) 
rule all: 
    input: 
    expand[’depth/{id}.per-base.bed’, id={IDS}] 
rule bowtie2_alignment: 
    input: 
    R1=’input_data/{id}_R1.fq’ 
    R2=’input_data/{id}_R2.fq’ 
    output: 
    sam=’bowtie2_output/{id}.sam’ 
    stats=’ bowtie2_output/{id}.stats’ 
    conda: ’path/to/bowtie2-conda-config.yaml’ 
    resources: time = ’02:00:00’ 
    shell: 
    ’’’bowtie2 -X 1000 -x reference-genome -1 {input.R1} -2 {input.R2} -S {output.sam} --end-to-end --sensitive -threads 20 2> {output.stats}’’’

rule sam2bam: 
    input: 
    sam=’aligned/{id}.sam’ 
    output:
    bam=’aligned/{id}.bam’, 
    benchmark: 
    ’benchmarks/{id}.sam2bam.benchmark.txt’ 
    log: 
    ’logs/{id}.sam2bam.log’, 
    conda: 
    ’path/to/samtools-conda-config.yaml’ 
    resources: 
    cpus=20, 
    time=’00:30:00’ 
    shell: 
    ’’’samtools view -bS -@ 20 {input.sam} > {output.bam}’’’ 
rule sort_bam: 
    input: 
    bam=’aligned/{id}.bam’, 
    output: 
    sorted_bam=’aligned/{id}.sorted.bam’, 
    conda: ’path/to/samtools-conda-config.yaml’ 
    log: ’logs/{id}.sort_bam.log’, 
    benchmark: ’benchmarks/{id}.sort_bam.benchmark’ 
    resources: 
    cpus=20, 
    time=’00:30:00’ 
    shell: 
    ’’’samtools sort -@ 20 {input.bam} -o {output.sorted_bam} 2> {log}’’’ 
rule samtools_depth: 
    input: 
    bam=’aligned/{id}.sorted.bam’, 
    output: 
    base=’depth/{id}.per-base.bed’, 
    conda:
    ’path/to/samtools-conda-config.yaml’ 
    log: 
    ’logs/{id}.samtools-depth.log’,
    benchmark: 
    ’benchmarks/{id}.samtools-depth.benchmark’ 
    resources: 
    cpus=1, 
    time=’01:00:00’ 
    shell: 
    ’’’samtools depth -a {input.bam} > {output.base} 2> {log}’’’

在示例中,樣本序列使用 bowtie2 與參考序列比對(duì),.sam 文件被轉(zhuǎn)換為.bam 文件,.bam 文件被排序,并計(jì)算它們的深度。一旦計(jì)算出通過代表通配符指定的所有文件的深度,rule all 將終止 Snakemake 運(yùn)行。

與上面概述的作業(yè)順序相反,Snakemake 基于依賴關(guān)系管理作業(yè)執(zhí)行。首先,規(guī)則所有檢查是否存在深度文件。如果它們不存在,Snakemake 會(huì)檢查它們是否在另一個(gè)規(guī)則的輸出中,即示例中的規(guī)則 samtools_depth。同樣,Snakemake 檢查規(guī)則 samtools_depth 的輸入文件是否存在,這些文件存在或被指定為另一個(gè)規(guī)則的輸出。重復(fù)此操作,直到找到現(xiàn)有的輸入文件,然后執(zhí)行一系列規(guī)則以創(chuàng)建深度文件。

附加功能

Snakemake 提供了豐富的附加功能,包括工作流的圖形表示(見注釋 3 和 4)。本指南說明了在 HPC 環(huán)境中構(gòu)建和執(zhí)行 Snakemake 工作流的簡單示例,但無法涵蓋 Snakemake 的全部功能。要了解有關(guān) Snakemake 特定附加功能的更多信息,請(qǐng)參閱 Snakemake 小插圖(請(qǐng)參閱note 5)。

Note

1.雖然 Anaconda 有助于維護(hù)軟件包和 Snakemake 本身的版本,但它不能自動(dòng)執(zhí)行此操作。維護(hù) Snakemake 的最新版本對(duì)于與 HPC 集群上使用的作業(yè)調(diào)度程序進(jìn)行穩(wěn)定的交互是必要的。要使用 anaconda 更新 Snakemake,可以使用以下命令:

conda update -n envname snakemake

或者有時(shí)全新的 Snakemake 安裝可以解決兼容性問題。

conda remove -n snakemake snakemake 
conda activate snakemake 
conda install snakemake

2.集群配置文件 config.yaml 可以包含 Snakemake 和 SLURM 選項(xiàng)。但是,這些以 YAML 格式傳遞,這略微改變了語法。例如,Snakemake 選項(xiàng) --keep_going 變?yōu)?keep-going: true。 SLURM 運(yùn)行參數(shù)在 cluster: config.yaml 的選項(xiàng)中指定,并且是 srun 參數(shù)。所有 srun 參數(shù)均可在以下位置找到:https://slurm.schedmd.com/srun
3.Snakemake 還可以創(chuàng)建設(shè)計(jì)工作流程的圖形表示。這可以通過兩種方式實(shí)現(xiàn)。通過使用 --dag 選項(xiàng)執(zhí)行 Snakemake 并使用管道將其發(fā)送到圖形設(shè)備,可以生成顯示工作流如何處理每個(gè)樣本的有向無directed acyclic graph (DAG):

snakemake --dag | dot -Tpdf > dag.pdf

4..或者,可以使用 --rulegraph 選項(xiàng)生成僅顯示規(guī)則的圖表:

snakemake --rulegraph | dot -Tpdf > rulegraph.pdf

本指南概述了如何在 HPC 環(huán)境中自動(dòng)化管道。雖然這些信息可能足以滿足大多數(shù)項(xiàng)目目標(biāo),但 Snakemake 提供了許多附加功能,例如內(nèi)置的 html 報(bào)告。要探索此附加功能,請(qǐng)參閱出色的 Snakemake 插圖:https://Snakemake.readthedocs.io/en/stable/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容