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頻道。

使用時間指令設定任務持續時間上限

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

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

如需 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. 組態檔案中的全域組態。

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

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

下列範例顯示如何在 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 """ }