本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Nextflow 工作流程定義詳細資訊
HealthOmics 支援 Nextflow DSL1 和 DSL2。如需詳細資訊,請參閱Nextflow 版本支援。
Nextflow DSL2 是以 Groovy 程式設計語言為基礎,因此參數是動態的,並且可以使用與 Groovy 相同的規則來強制類型。輸入 JSON 提供的參數和值可在工作流程的參數 (params
) 映射中使用。
使用 nf-schema 和 nf-validation 外掛程式
注意
HealthOmics 外掛程式支援摘要:
v22.04 – 不支援外掛程式
v23.10 – 支援
nf-schema
和nf-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 模式來建立 path
或 file
頻道。
使用時間指令設定任務持續時間上限
HealthOmics 提供可調整的配額 (請參閱 HealthOmics 服務配額),以指定執行的最長持續時間。對於 Nextflow v23 和 v24 工作流程,您也可以使用 Nextflow 時間指令指定任務持續時間上限。
在新的工作流程開發期間,設定任務持續時間上限可協助您擷取失控任務和長時間執行的任務。
如需 Nextflow 時間指令的詳細資訊,請參閱 Nextflow 參考中的時間指令
HealthOmics 提供下列對 Nextflow 時間指令的支援:
-
HealthOmics 支援時間指令的 1 分鐘精細程度。您可以指定介於 60 秒和最大執行持續時間值之間的值。
-
如果您輸入的值小於 60,HealthOmics 會四捨五入至 60 秒。對於 60 以上的值,HealthOmics 會四捨五入到最接近的分鐘。
-
如果工作流程支援任務的重試,HealthOmics 會在任務逾時時重試任務。
-
如果任務逾時 (或上次重試逾時),HealthOmics 會取消任務。此操作的持續時間可以是一到兩分鐘。
-
在任務逾時時,HealthOmics 會將執行和任務狀態設定為失敗,並取消執行中的其他任務 (適用於處於啟動、待定或執行狀態的任務)。HealthOmics 從逾時之前完成的任務將輸出匯出至您指定的 S3 輸出位置。
-
任務花費在待定狀態的時間不會計入任務持續時間。
-
如果執行是執行群組的一部分,且執行群組比任務計時器快逾時,則執行和任務會轉換為失敗狀態。
使用下列一或多個單位指定逾時持續時間:ms
、m
h
、 s
或 d
。您可以在 Nextflow 組態檔案和工作流程定義中指定時間指示詞。下列清單顯示優先順序,從最低到最高優先順序:
-
組態檔案中的全域組態。
-
工作流程定義的任務區段。
-
組態檔案中的任務特定選擇器。
下列範例顯示如何在 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 """ }