本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Nextflow 工作流程定义细节
HealthOmics 支持 Nextflow DSL1 和 DSL2。有关更多信息,请参阅 Nextflow 版本支持。
Nextflow DSL2 基于 Groovy 编程语言,因此参数是动态的,可以使用与 Groovy 相同的规则进行类型强制。输入 JSON 提供的参数和值可在工作流程的参数 (params) 映射中找到。
主题
使用 nf-schema 和 nf 验证插件
注意
插件 HealthOmics 支持摘要:
v22.04 — 不支持插件
v23.10 — 支持和
nf-schemanf-validationv24.10 — 支持
nf-schemav25.10、v26.04 — 支持
nf-schema、、和nf-core-utilsnf-fgbionf-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插件的新版本。有关更多信息,请参阅 Next GitHub flow 存储库中的 nf-schema。
指定存储 URI
当使用 Amazon S3 或 HealthOmics URI 构建 Nextflow 文件或路径对象时,只要授予读取访问权限,它就会将匹配的对象提供给工作流程。允许对 Amazon S3 URI 使用前缀或目录。有关示例,请参阅 亚马逊 S3 输入参数格式。
HealthOmics 部分支持在 Amazon S3 URI 或 HealthOmics 存储 URI 中使用全局模式。在工作流程定义中使用 Glob 模式来创建path或file频道。有关预期行为和确切案例,请参阅Nextflow 处理 Amazon S3 输入中的 Glob 模式。
下一步流指令
您可以在 Nextflow 配置文件或工作流程定义中配置 Nextflow 指令。以下列表显示了应用配置设置的 HealthOmics 优先顺序,从最低到最高优先级:
-
配置文件中的全局配置。
-
工作流定义的任务部分。
-
Task-specific 配置文件中的选择器。
使用 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 } }
选择不使用 om RetryOn ics 5xx 重试任务
对于 Nextflow v23 及更高版本,如果任务由于服务错误(5XX HTTP 状态码)而失败,则 HealthOmics 支持任务重试。默认情况下,对失败的任务最多 HealthOmics 尝试两次重试。
您可以配置omicsRetryOn5xx为因服务错误选择不重试任务。有关任务重试的更多信息 HealthOmics,请参阅任务重试次数。
以下示例在全局配置omicsRetryOn5xx中配置为选择不重试任务。
process { omicsRetryOn5xx = false }
以下示例显示如何在工作流定义的任务部分omicsRetryOn5xx中进行配置。
process myTask { label 'my_label' omicsRetryOn5xx = false script: """ your-command-here """ }
以下示例显示如何根据名称或标签omicsRetryOn5xx选择器在 Nextflow 配置文件中设置为特定任务的配置。
process { withLabel: 'my_label' { omicsRetryOn5xx = false } withName: 'myTask' { omicsRetryOn5xx = false } }
使用时间指令的任务持续时间
HealthOmics 提供可调整的配额(参见HealthOmics 服务配额),用于指定跑步的最大持续时间。对于 Nextflow v23 及更高版本的工作流程,您还可以使用 Nextflow 指令指定最长任务持续时间。time
在新工作流程开发期间,设置最长任务持续时间可帮助您捕捉失控的任务和长时间运行的任务。
有关 Nextflow 时间指令的更多信息,请参阅 Nextflow 参考中的
HealthOmics 为 Nextflow 时间指令提供以下支持:
-
HealthOmics 支持时间指令的 1 分钟粒度。您可以指定介于 60 秒和最大运行持续时间值之间的值。
-
如果您输入的值小于 60,则将其 HealthOmics 四舍五入到 60 秒。对于大于 60 的值,向下 HealthOmics 舍入到最接近的分钟。
-
如果工作流支持重试任务,则在任务超时时时 HealthOmics 重试该任务。
-
如果任务超时(或最后一次重试超时),则 HealthOmics 取消该任务。此操作的持续时间可能为一到两分钟。
-
任务超时时, HealthOmics 将运行和任务状态设置为失败,并取消运行中的其他任务(对于处于 “启动”、“待处理” 或 “正在运行” 状态的任务)。 HealthOmics 将其在超时之前完成的任务的输出导出到您指定的 S3 输出位置。
-
任务处于待处理状态的时间不计入任务持续时间。
-
如果运行是运行组的一部分,并且该运行组的超时时间早于任务计时器,则运行和任务将转换为失败状态。
使用以下一个或多个单位指定超时持续时间:mss、m、h、或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 配置文件是一组名为配置设置,你可以在运行时选择这些设置。在文件profiles块中定义配置nextflow.config文件:
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 引擎。有关更多信息,请参阅 指定 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 及更高版本,您可以导出在单个任务之外生成的文件,例如来源报告或管道DAG。要导出这些文件,请将它们写入/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-core 工作流程中很常见。params.outdir
{ "outdir": "/mnt/workflow/output/" }
导出任务内容
对于使用 Nextflow 编写的工作流程,定义一个 PublishDir 指令,将任务内容导出到您的输出 Amazon S3 存储桶。如以下示例所示,将 p ublishDir 值设置为。/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,您可以使用工作流程输出来导出任务内容。以下示例说明如何定义将任务结果导出到 Amazon S3 的工作流程output块。
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 可以为每次运行生成四个内置报告:执行报告 (report)、时间表 (timeline)、跟踪文件 (trace) 和工作流程图 (dag)。 HealthOmics 要将这些文件导出到运行的 Amazon S3 输出位置,请将每个文件配置为将其输出写入您的nextflow.config文件/mnt/workflow/output/中:
report { enabled = true file = '/mnt/workflow/output/report.html' overwrite = true } timeline { enabled = true file = '/mnt/workflow/output/timeline.html' overwrite = true } trace { enabled = true file = '/mnt/workflow/output/trace.txt' overwrite = true } dag { enabled = true file = '/mnt/workflow/output/dag.html' overwrite = true }
HealthOmics 将写在下方的文件导出/mnt/workflow/output/到运行的 Amazon S3 输出位置output/的前缀中。有关此导出路径的更多信息,请参阅导出工作流程级别的内容。外部/mnt/workflow/output/编写的报告不会导出到您运行的 Amazon S3 输出位置。
任务容器必须包含 ps
启用reporttimeline、或trace报告后,Nextflow 通过在每个任务容器ps内调用来收集每项任务的指标。您在container指令中指定的容器镜像必须包含该ps命令。在大多数 Linux 发行版上,使用 procps (Debian/Ubuntu) 或procps-ng(亚马逊 Linux、红帽、Fedora)软件包进行安装。如果进程未声明container指令,则在已包含的默认容器中 HealthOmics 运行任务ps。
工作流程图格式
该dag报告支持多种输出格式,由扩展名选择dag.file。HTML、Mermaid 和 DOT 格式由 Nextflow 直接呈现,不需要额外的工具。PDF、PNG 和 SVG 格式需要 Graphviz,而 Graphviz 不包含在 Nextfl HealthOmics ow 引擎中。如果设置dag.file为 PDF、PNG 或 SVG 路径,Nextflow 会记录警告并将工作流程图作为.dot源文件写入其位置;运行仍能成功完成。我们建议dag.file将.dot路径设置为.html.mmd、或以避免警告并生成所要求的格式。
指定 Nextflow 语法版本
默认情况下,Nextflow v26.04.0 使用严格 (v2) 语法解析器。对于使用旧版 (v1) 语法编写的工作流程,这是一项重大更改,这是 Nextflow v25.10.0 及更早版本中的默认语法。有关 v2 语法的信息,请参阅 Seqera Nextflow 文档中的
要运行针对旧版 (v1) 解析器编写的工作流程,请在请求v1中设置engineSettings.syntaxVersion为:StartRun
{ "engineSettings": { "syntaxVersion": "v1" } }
对于 Nextflow v25.10.0 及更早版本, HealthOmics 不支持 v2 解析器。
在工作流程创建期间自动进行语法验证
HealthOmics 当你创建或更新 Nextflow DSL2 工作流程时,会自动运行 Nextflow 内置的严格 DSL2 linter (nf-lang/v2)。这个 linter 在CreateWorkflow和CreateWorkflowVersion期间运行。它适用于所有支持的 DSL2 版本(v22.04、v23.10、v24.10、v25.10 和 v26.04)。DSL1 工作流程不受限制。
linter 在非阻塞模式下运行。Lint 的发现并不能阻止工作流程变为活跃状态。调查结果在GetWorkflow响应statusMessage字段中以结构化 JSON 的形式显示。
注意
内置的 linter 会在创建时验证您的工作流程定义语法。它与 Nextflow v26.04 中可用的严格语法解析器不同,后者受运行时行为控制engineSettings.syntaxVersion并影响运行时行为。无论工作流程在运行时使用哪个解析器,linter 都会在创建时检查所有 DSL2 版本的语法。在 Nextflow v22.04、v23.10 和 v24.10(传统语法)上,调查结果仅供参考。在 Nextflow v25.10 和 v26.04 上,调查结果反映了严格的模式语法要求。
有关 lint 输出格式以及如何处理发现的更多信息,请参阅工作流程提示器已输入 HealthOmics。
在 Nextflow 中高效使用临时存储
Nextflow 的scratch指令控制进程写入其临时工作文件的位置。启用临时存储 (scratchStorageMode: LOCAL) 后,使用该scratch指令将暂存定向 I/O 到的快速本地卷。/tmp
下表描述了支持的scratch指令值及其在中的行为 HealthOmics:
| 值 | 中的行为 HealthOmics | 建议 |
|---|---|---|
scratch true |
使用 $TMPDIR。当出现时,Scratch 会 I/O 被引导到本地临时体积。scratchStorageMode LOCAL |
推荐 |
scratch '/some/path' |
使用指定的文字路径作为临时目录。要使用临时存储,请将路径设置为/tmp或的子目录。/tmp该路径必须存在于容器中并且是可写的。 |
路径在下方时有效 /tmp |
scratch 'ram-disk' |
尝试使用/dev/shm(内存中的 tmpfs)。不建议将其用于中的本地临时存储 HealthOmics。 |
不推荐使用 |
推荐的方法是在流程定义scratch true中进行设置,该定义会自动使用$TMPDIR且不需要路径配置:
process my_process { scratch true disk '200 GB' script: """ my-tool --input ${input} --output ${output} """ }
有关临时存储和该disk指令的更多信息,请参阅。工作流程任务的临时存储 HealthOmics
Nextflow v26.04 版本说明
下表汇总了对 Nextflow 版本 26.04 中发布的新功能、增强功能和弃用版本的 HealthOmics 支持。
新功能和增强功能
| 功能 | 之前版本 | HealthOmics 支持 | 注意 |
|---|---|---|---|
| 严格的语法解析器(默认) | 26.04 | 是 | 从 v26.04 开始默认启用。旧版解析器可通过syntaxVersion: "v1"引擎设置获得。 |
| 记录类型 | 26.04 | 是 | 有关更多信息,请参阅 Seqera Nextflow 文档中的 |
| 工作流程输出摘要 | 26.04 | 是 | 运行完成时打印工作流程输出摘要。输出格式可通过引擎设置进行outputFormat配置。有关更多信息,请参阅 指定 NextfLOW 引擎设置。 |
| 代理记录模式 | 26.04 | 是 | 可通过agentMode引擎设置进行配置。有关更多信息,请参阅 指定 NextfLOW 引擎设置。 |
| 模块系统(Nextflow 注册表) | 26.04 | 否 | HealthOmics 工作流程在没有出站互联网访问权限的隔离网络中运行。您可以直接在工作流程 zip 中包含模块。 |
| 静态打字(预览) | 26.04 | 否 | HealthOmics 不支持预览功能。 |
| Auto-load 从文件中收集参数 | 26.04 | 否 | 需要静态键入(预览),但 HealthOmics 不支持。 |
| Multi-revision 管道结账 | 26.04 | N/A | 不适用。 HealthOmics 不使用 Git-based 管道结账。 |
弃用
| 已弃用的物品 | 之前版本 | 影响 | 推荐操作 |
|---|---|---|---|
listFiles() 方法 |
26.04 | 弃用警告 | 替换为listDirectory()。 |
nextflow.enable.strict 标志 |
26.04 | 不再需要了 | 从配置中删除。严格模式现在是默认模式。 |
manifest.defaultBranch |
26.04 | 不再需要了 | 从配置中删除。 HealthOmics 不使用 Git-based 管道结账,也从未支持过此选项。 |