本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Nextflow 工作流程定義詳細資訊
HealthOmics 支援 Nextflow DSL1 和 DSL2。如需詳細資訊,請參閱Nextflow 版本支援。
Nextflow DSL2 是以 Groovy 程式設計語言為基礎,因此參數是動態的,而且類型強制可以使用與 Groovy 相同的規則。輸入 JSON 提供的參數和值可在工作流程的參數 (params) 映射中使用。
主題
使用 nf-schema 和 nf-validation 外掛程式
注意
外掛程式的 HealthOmics 支援摘要:
v22.04 – 不支援外掛程式
v23.10 – 支援
nf-schema和nf-validationv24.10 – 支援
nf-schemav25.10、v26.04 – 支援
nf-schema、nf-core-utils、nf-fgbio和nf-prov
HealthOmics 為 Nextflow 外掛程式提供下列支援:
-
針對 Nextflow v23.10,HealthOmics 會預先安裝 nf-validation@1.1.1 外掛程式。
-
對於 Nextflow v23.10 和 v24.10,HealthOmics 會預先安裝 nf-schema@2.3.0 外掛程式。
-
對於 Nextflow v25.10,HealthOmics 會預先安裝 nf-schema@2.6.1、nf-core-utils@0.4.0、nf-prov@1.7.0 和 nf-fgbio@1.0.1 外掛程式。
-
對於 Nextflow v26.04,HealthOmics 會預先安裝 nf-schema@2.7.2、nf-core-utils@0.4.0、nf-prov@1.7.0 和 nf-fgbio@1.0.1 外掛程式。
-
您無法在工作流程執行期間擷取其他外掛程式。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 Storage URIs 中使用 glob 模式。在工作流程定義中使用 Glob 模式來建立 path或 file頻道。如需預期行為和確切案例,請參閱 Amazon S3 輸入中 Glob 模式的下一個流程處理。
Nextflow 指令
您可以在 Nextflow 組態檔案或工作流程定義中設定 Nextflow 指令。下列清單顯示 HealthOmics 用來套用組態設定的優先順序,從最低到最高優先順序:
-
組態檔案中的全域組態。
-
工作流程定義的任務區段。
-
組態檔案中的任務特定選擇器。
使用 的任務重試策略 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 和更新版本,如果任務因服務錯誤 (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 和更新版本的工作流程,您也可以使用 Nextflow time指令指定任務持續時間上限。
在新的工作流程開發期間,設定任務持續時間上限可協助您擷取失控任務和長時間執行的任務。
如需 Nextflow 時間指令的詳細資訊,請參閱 Nextflow 參考中的時間指令
HealthOmics 為 Nextflow 時間指令提供下列支援:
-
HealthOmics 支援時間指令的 1 分鐘精細程度。您可以指定介於 60 秒和最大執行持續時間值之間的值。
-
如果您輸入的值小於 60,HealthOmics 會四捨五入至 60 秒。對於 60 以上的值,HealthOmics 會四捨五入到最接近的分鐘。
-
如果工作流程支援重試任務,HealthOmics 會在任務逾時時重試任務。
-
如果任務逾時 (或上次重試逾時),HealthOmics 會取消任務。此操作的持續時間可以是一到兩分鐘。
-
在任務逾時時,HealthOmics 會將執行和任務狀態設定為失敗,並取消執行中的其他任務 (適用於處於啟動、待定或執行狀態的任務)。HealthOmics 會將輸出從逾時之前完成的任務匯出到您指定的 S3 輸出位置。
-
任務花費在待定狀態的時間不會計入任務持續時間。
-
如果執行是執行群組的一部分,且執行群組比任務計時器快逾時,則執行和任務會轉換為失敗狀態。
使用下列一或多個單位指定逾時持續時間:ms、mh、 s或 d。
下列範例顯示如何在 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 設定檔
Nextflow 設定檔是一組命名的組態設定,您可以在執行時間選取。在 nextflow.config 檔案的 profiles區塊中定義設定檔:
profiles { standard { process.cpus = 2 process.memory = '4 GB' } production { process.cpus = 16 process.memory = '64 GB' params.input = 's3://bucket/production-data.bam' } }
當您開始執行時,請使用 engineSettings 參數指定一或多個設定檔。HealthOmics 會將 -profile旗標傳遞至 Nextflow 引擎。如需詳細資訊,請參閱指定引擎設定。
aws omics start-run \ --workflow-idworkflow-id\ --role-arnrole-arn\ --output-uri s3://bucket/prefix/ \ --engine-settings '{"profile": "production"}'
指定多個設定檔時 (例如,"test,docker"),Nextflow 會按照命令列中指定的順序套用它們。稍後的設定檔會針對衝突的設定覆寫先前的設定檔。對於低於 26 的 Nextflow 版本,設定檔會按照組態檔案中定義的順序套用,而非命令列順序。
注意下列事項:
-
設定檔支援適用於所有 HealthOmics 支援的 Nextflow 版本。
-
設定檔可以包含參數、程序指令、
includeConfig陳述式和資訊清單覆寫 (包括manifest.nextflowVersion)。 -
明確執行參數優先於設定檔定義的參數值。
-
如果您指定不存在的設定檔,HealthOmics 會傳回驗證錯誤。
-
設定檔必須在工作流程定義 zip 檔案中定義。HealthOmics 不支援從外部來源擷取設定檔定義。
-
如果您未指定設定檔,執行會在工作流程定義中的
standard設定檔下定義設定檔時使用該設定檔。否則,執行會使用預設 (頂層) 組態。 -
使用設定檔時,建議您使用 在工作流程定義中釘選 Nextflow 版本
manifest.nextflowVersion,以確保跨執行的設定檔應用程式行為一致。
匯出工作流程層級內容
對於 Nextflow v25.10 和更新版本,您可以匯出在個別任務之外產生的檔案,例如來源報告或管道 DAGs。若要匯出這些檔案,請將它們寫入 /mnt/workflow/output/。HealthOmics 會將置於此目錄中的檔案匯出至執行 Amazon S3 輸出位置的output/字首。
下列範例顯示如何設定nf-prov外掛程式,將來源報告寫入 /mnt/workflow/output/。
prov { formats { bco { file = "/mnt/workflow/output/pipeline_info/manifest.bco.json" } } }
您也可以在執行的輸入 JSON 中將此路徑做為參數傳遞。此方法常見於使用 的 nf 核心工作流程params.outdir。
{ "outdir": "/mnt/workflow/output/" }
匯出任務內容
對於以 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 """ }
對於 Nextflow v25.10 和更新版本,作為 的替代方案publishDir,您可以使用工作流程輸出來匯出任務內容。下列範例示範如何定義工作流程output區塊,將任務結果匯出至 Amazon S3。
process myTask { input: val data output: path 'result.txt' script: """ echo ${data} > result.txt """ } workflow { main: output_file = myTask('hello') publish: results = output_file } output { results { path '.' } }
如需工作流程輸出的詳細資訊,請參閱 Nextflow 文件中的工作流程輸出
指定 Nextflow 語法版本
Nextflow v26.04.0 預設使用嚴格 (v2) 語法剖析器。這是使用舊版 (v1) 語法寫入的工作流程的重大變更,這是 Nextflow v25.10.0 和更早版本中的預設值。如需 v2 語法的相關資訊,請參閱 Seqera Nextflow 文件中的嚴格語法
若要執行針對舊版 (v1) 剖析器撰寫的工作流程,請在StartRun請求v1中將 engineSettings.syntaxVersion設定為 :
{ "engineSettings": { "syntaxVersion": "v1" } }
對於 Nextflow v25.10.0 和更早版本,HealthOmics 不支援 v2 剖析器。
Nextflow v26.04 版本備註
下表摘要說明 HealthOmics 對 Nextflow 26.04 版中發行的新功能、增強功能和取代的支援。
新功能和增強功能
| 功能 | 原始版本 | HealthOmics 支援 | 備註 |
|---|---|---|---|
| 嚴格語法剖析器 (預設) | 26.04 | 是 | 預設為從 v26.04 啟用。舊版剖析器可透過引擎設定syntaxVersion: "v1"中的 取得。 |
| 記錄類型 | 26.04 | 是 | 如需詳細資訊,請參閱 Seqera Nextflow 文件中的記錄 |
| 工作流程輸出摘要 | 26.04 | 是 | 執行完成時列印工作流程輸出的摘要。可在引擎設定outputFormat中透過 設定的輸出格式。如需詳細資訊,請參閱指定引擎設定。 |
| 客服人員記錄模式 | 26.04 | 是 | 可在引擎設定agentMode中透過 設定。如需詳細資訊,請參閱指定引擎設定。 |
| 模組系統 (Nextflow 登錄檔) | 26.04 | 否 | HealthOmics 工作流程會在沒有傳出網際網路存取的隔離網路中執行。您可以直接在工作流程 zip 中包含模組。 |
| 靜態類型 (預覽) | 26.04 | 否 | HealthOmics 不支援預覽功能。 |
| 從 檔案自動載入集合參數 | 26.04 | 否 | 需要 HealthOmics 不支援的靜態類型 (預覽)。 |
| 多修訂管道結帳 | 26.04 | N/A | 不適用。HealthOmics 不會使用 Git 型管道結帳。 |
棄用
| 已棄用的項目 | 原始版本 | 影響 | 建議的動作 |
|---|---|---|---|
listFiles() 方法 |
26.04 | 棄用警告 | 將 取代為 listDirectory()。 |
nextflow.enable.strict 標記 |
26.04 | 不再需要 | 從組態中移除 。嚴格模式現在為預設值。 |
manifest.defaultBranch |
26.04 | 不再需要 | 從組態中移除 。HealthOmics 不會使用 Git 型管道結帳,而且從未支援此選項。 |