Nextflow 工作流程定義詳細資訊 - AWS HealthOmics

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Nextflow 工作流程定義詳細資訊

HealthOmics 支援 Nextflow DSL1 和 DSL2。如需詳細資訊,請參閱Nextflow 版本支援

Nextflow DSL2 以 Groovy 程式設計語言為基礎,因此參數是動態的,並且可以使用與 Groovy 相同的規則來強制類型。輸入 JSON 提供的參數和值可在工作流程的參數 (params) 映射中使用。

使用 nf-schema 和 nf-validation 外掛程式

注意

外掛程式的 HealthOmics 支援摘要:

  • v22.04 – 不支援外掛程式

  • v23.10 – 支援 nf-schemanf-validation

  • v24.10 – 支援 nf-schema

HealthOmics 為 Nextflow 外掛程式提供下列支援:

  • 對於 Nextflow v23.10,HealthOmics 會預先安裝 nf-validation@1.1.1 外掛程式。

  • 對於 Nextflow v23.10 和更新版本,HealthOmics 會預先安裝 nf-schema@2.3.0 外掛程式。

  • 您無法在工作流程執行期間擷取其他外掛程式。HealthOmics 會忽略您在 nextflow.config 檔案中指定的任何其他外掛程式版本。

  • 對於 Nextflow v24 和更高版本, nf-schema是已棄用nf-validation外掛程式的新版本。如需詳細資訊,請參閱 Nextflow GitHub 儲存庫中的 nf-schema

指定儲存 URIs

使用 Amazon S3 或 HealthOmics URI 建構 Nextflow 檔案或路徑物件時,只要授予讀取存取權,就會將相符的物件提供給工作流程。允許 Amazon S3 URIs 使用字首或目錄。如需範例,請參閱 Amazon S3 輸入參數格式

HealthOmics 支援在 Amazon S3 URIs 或 HealthOmics 儲存 URIs 中使用 glob 模式。在工作流程定義中使用 Glob 模式來建立 pathfile頻道。

Nextflow 指令

您可以在 Nextflow 組態檔案或工作流程定義中設定 Nextflow 指令。下列清單顯示 HealthOmics 用來套用組態設定的優先順序,從最低到最高優先順序:

  1. 組態檔案中的全域組態。

  2. 工作流程定義的任務區段。

  3. 組態檔案中的任務特定選擇器。

使用 的任務重試策略 errorStrategy

使用 errorStrategy指令來定義任務錯誤的策略。根據預設,當任務傳回錯誤指示 (非零結束狀態) 時,任務會停止,且 HealthOmics 會終止整個執行。如果您將 errorStrategy設定為 retry,HealthOmics 會嘗試重試失敗的任務一次。若要增加重試次數,請參閱 使用 的任務重試嘗試 maxRetries

process { label 'my_label' errorStrategy 'retry' script: """ your-command-here """ }

如需有關 HealthOmics 在執行期間如何處理任務重試的資訊,請參閱 任務重試

使用 的任務重試嘗試 maxRetries

根據預設,HealthOmics 不會嘗試任何重試失敗的任務,或者如果您設定 ,則嘗試重試一次errorStrategy。若要增加重試次數上限,請將 errorStrategy設定為 retry,並使用 maxRetries指令設定重試次數上限。

下列範例會將全域組態中的重試次數上限設定為 3。

process { errorStrategy = 'retry' maxRetries = 3 }

下列範例示範如何在工作流程定義的任務區段maxRetries中設定 。

process myTask { label 'my_label' errorStrategy 'retry' maxRetries 3 script: """ your-command-here """ }

下列範例顯示如何根據名稱或標籤選擇器,在 Nextflow 組態檔案中指定任務特定的組態。

process { withLabel: 'my_label' { errorStrategy = 'retry' maxRetries = 3 } withName: 'myTask' { errorStrategy = 'retry' maxRetries = 3 } }

使用 選擇退出任務重試 omicsRetryOn5xx

對於 Nextflow v23 和 v24,如果任務因服務錯誤 (5XX HTTP 狀態碼) 失敗,HealthOmics 支援任務重試。根據預設,HealthOmics 最多會嘗試兩次失敗任務的重試。

您可以設定 omicsRetryOn5xx以選擇退出服務錯誤的任務重試。如需 HealthOmics 中任務重試的詳細資訊,請參閱 任務重試

下列範例會在全域組態omicsRetryOn5xx中設定 ,以選擇退出任務重試。

process { omicsRetryOn5xx = false }

下列範例顯示如何在工作流程定義的任務區段omicsRetryOn5xx中設定 。

process myTask { label 'my_label' omicsRetryOn5xx = false script: """ your-command-here """ }

下列範例顯示如何根據名稱或標籤選擇器,在 Nextflow 組態檔案中omicsRetryOn5xx將 設定為任務特定組態。

process { withLabel: 'my_label' { omicsRetryOn5xx = false } withName: 'myTask' { omicsRetryOn5xx = false } }

使用 time指令的任務持續時間

HealthOmics 提供可調整的配額 (請參閱 HealthOmics 服務配額),以指定執行的最長持續時間。對於 Nextflow v23 和 v24 工作流程,您也可以使用 Nextflow time指令指定任務持續時間上限。

在新的工作流程開發期間,設定任務持續時間上限可協助您擷取失控任務和長時間執行的任務。

如需 Nextflow 時間指令的詳細資訊,請參閱 Nextflow 參考中的時間指令

HealthOmics 為 Nextflow 時間指令提供下列支援:

  1. HealthOmics 支援時間指令的 1 分鐘精細程度。您可以指定介於 60 秒和最大執行持續時間值之間的值。

  2. 如果您輸入的值小於 60,HealthOmics 會四捨五入至 60 秒。對於 60 以上的值,HealthOmics 會四捨五入到最接近的分鐘。

  3. 如果工作流程支援重試任務,HealthOmics 會在任務逾時時重試任務。

  4. 如果任務逾時 (或上次重試逾時),HealthOmics 會取消任務。此操作的持續時間可以是一到兩分鐘。

  5. 在任務逾時時,HealthOmics 會將執行和任務狀態設定為失敗,並取消執行中的其他任務 (適用於處於啟動、待定或執行狀態的任務)。HealthOmics 會將輸出從逾時之前完成的任務匯出到您指定的 S3 輸出位置。

  6. 任務花費在待定狀態的時間不會計入任務持續時間。

  7. 如果執行是執行群組的一部分,且執行群組比任務計時器快逾時,則執行和任務會轉換為失敗狀態。

使用下列一或多個單位指定逾時持續時間:msmhsd

下列範例顯示如何在 Nextflow 組態檔案中指定全域組態。它將全域逾時設定為 1 小時 30 分鐘。

process { time = '1h30m' }

下列範例顯示如何在工作流程定義的任務區段中指定時間指令。此範例會設定 3 天、5 小時和 4 分鐘的逾時。此值優先於組態檔案中的全域值,但不優先於my_label組態檔案中 的任務特定時間指令。

process myTask { label 'my_label' time '3d5h4m' script: """ your-command-here """ }

下列範例顯示如何根據名稱或標籤選擇器,在 Nextflow 組態檔案中指定任務特定的時間指令。此範例會設定 30 分鐘的全域任務逾時值。它會為任務設定 2 小時的值,myTask並為具有標籤 的任務設定 3 小時的值my_label。對於符合選取器的任務,這些值優先於全域值和工作流程定義中的值。

process { time = '30m' withLabel: 'my_label' { time = '3h' } withName: 'myTask' { time = '2h' } }

匯出任務內容

對於以 Nextflow 撰寫的工作流程,請定義 publishDir 指令,將任務內容匯出至輸出 Amazon S3 儲存貯體。如下列範例所示,將 publishDir 值設定為 /mnt/workflow/pubdir。若要將檔案匯出至 Amazon S3,檔案必須位於此目錄中。

nextflow.enable.dsl=2 workflow { CramToBamTask(params.ref_fasta, params.ref_fasta_index, params.ref_dict, params.input_cram, params.sample_name) ValidateSamFile(CramToBamTask.out.outputBam) } process CramToBamTask { container "<account>.dkr.ecr.us-west-2.amazonaws.com/genomes-in-the-cloud" publishDir "/mnt/workflow/pubdir" input: path ref_fasta path ref_fasta_index path ref_dict path input_cram val sample_name output: path "${sample_name}.bam", emit: outputBam path "${sample_name}.bai", emit: outputBai script: """ set -eo pipefail samtools view -h -T $ref_fasta $input_cram | samtools view -b -o ${sample_name}.bam - samtools index -b ${sample_name}.bam mv ${sample_name}.bam.bai ${sample_name}.bai """ } process ValidateSamFile { container "<account>.dkr.ecr.us-west-2.amazonaws.com/genomes-in-the-cloud" publishDir "/mnt/workflow/pubdir" input: file input_bam output: path "validation_report" script: """ java -Xmx3G -jar /usr/gitc/picard.jar \ ValidateSamFile \ INPUT=${input_bam} \ OUTPUT=validation_report \ MODE=SUMMARY \ IS_BISULFITE_SEQUENCED=false """ }