WDL 应用管理(图形编辑)

最近更新时间:2024-06-28 11:56:41

我的收藏

图形编辑模式特性

平台支持以图形编辑模式编辑 WDL 工作流,您可以通过直观的图形界面和拖拉拽操作,轻松地创建和编辑工作流,定义任务间的依赖关系。图形编辑模式具有以下特性:
低代码:在组件内容编辑器直接定义和编辑任务的输入、输出、参数等属性,无需编写复杂工作流代码。
细颗粒度:颗粒度细至 Task 级,支持任务组、条件组等多种组件,自由灵活。
可预览:通过 DAG 概览图实时预览工作流的结构和任务间的依赖关系,便于调整和优化。
高复用性:任务中定义的输入输出支持复用,方便灵活。
方便快捷:支持快捷使用平台公共数据及公共镜像。
可迁移:支持一键导出工作流代码文件(WDL),流程可迁移。
图形编辑器由组件拖拽画布组件内容编辑器三部分组成。
布局如图:




创建应用(图形编辑模式)

进入工作项目,单击右上角新增,显示新建应用弹窗,选择应用类型为 WDL



选择创建空白应用模式,输入必要信息(应用名称、描述等),编辑模式选择图形编辑,添加应用名称和简单描述,确认后即可以图形编辑模式进入应用。




编辑应用(图形编辑模式)

图形编辑模式下,应用编辑步骤如下:
1. 新增组件
在图形编辑模式下,可新增五种组件,包括任务(Task)、任务组(Scatter)、条件组(if/else)、全局输入(Workflow-input)和全局输出(Workflow- output),这些组件可覆盖 WDL 常见元素类型。
2. 编辑组件
选中组件后,在组件内容编辑器中可以定义组件的命令行、输入输出等内容。
3. 创建组件间关联
通过连线或任务间定义关联输入输出的方式,创建组件间关联。
4. 运行应用
图形编辑模式下,仅支持创建单 workflow 应用,应用在创建时平台默认会自动生成一个空 workflow 以组织各个组件。应用可执行需具备以下条件:至少具备一个 task 组件,且该 task 组件的运行设置中须指定可用的 docker 地址。

新增组件

应用可执行至少需要一个 task 组件。组件分类及对应可编辑内容如下表所示:
模块
任务(必选)
任务组
条件组
全局输入
全局输出
WDL 对应模块名称
Task
Scatter
If/else
Workflow-input
Workflow-output
可编辑内容
名称(必填)
名称
名称
名称
名称
输入
遍历条件(必填)
条件(必填)
输入
输出
命令行(必填)
运行设置
输出

编辑组件

在组件内容编辑器中,您可以定义组件的名称、输入输出等信息。选中任意组件,显示该组件对应内容编辑器。内容编辑器支持定义组件的输入输出变量、命令行、运行设置(即 WDL 中 runtime 模块)等。




任务(Task)

任务组件(Task)包含输入、运行设置、命令行、输出四个模块,其中命令行是必填模块。
输入模块
目前输入模块支持以下变量类型:
字符串(String)
整数(Int)
浮点数(Float)
文件(File)
布尔值(Boolean)
数组(Array[])
二维数组(Array[Array[]])
键值对数组(Pair[])
除了支持定义输入参数的类型和名称外,编辑器还支持设置输入参数的属性。当勾选“必填”复选框时,该参数将被设置为必填参数,进入运行流程后,需要在运行参数设置页面完成相应参数的填写。当复用其他组件的输出参数作为任务组件的输入参数时,会自动建立两个组件间的关联关系,并在画布上以连线方式显示。

输出模块
输出模块支持的变量类型与输入模块相同。任务组件的输出参数可被其他组件复用,作为其输入参数。当被其他组件复用为输入参数时,会自动建立两个组件间的关联关系,并在画布上以连线方式显示。



命令行
Command 模块是task组件中的重要部分,也是一个任务中必填的模块,它定义了任务需要执行的命令。在该模块中,可以使用各种编程语言来编写需要执行的命令,例如 bash、Python、R 等。例如运行一个生物信息学工具或者执行一个 bash 脚本。以 fastp 工具为例,如果需要进行数据质量控制,可以在 command 模块中输入以下命令:
command {
fastp -i input.fastq -o output.fastq
}
在这个例子中,fastp 工具被用于进行数据质量控制。通过 -i 参数指定输入文件,-o 参数指定输出文件。这些参数可以根据实际需求进行修改。
在图形编辑模式下,可在任务组件内容编辑器的命令行模块完成命令行相关配置。




任务组(Scatter)

Scatter 是 WDL 中的一个关键概念,用于实现并行处理以提高工作流的执行效率。在图形编辑模式下,可以通过编辑任务组来实现一个类似 Scatter 的模块。任务组需要设置遍历条件,并拖拽需要触发的任务到任务组模块内。用户可以使用任务组来批量处理多个输入数据。设置任务组的遍历条件为数据集合,将需要执行的操作定义为一个任务并将其拖入任务组中。这样,在执行到该任务组时,它会自动对数据集合中的每个数据执行该任务。这种方式可以更加方便地并行处理多条数据。使用任务组可以提高处理效率,减少重复操作,使数据处理更加高效。




条件组

在编写工作流中,您可能希望某些步骤只在满足特定条件的情况下才运行。 这可能意味着在两条执行路径之间切换(例如,在模式 A 中运行工具与在模式 B 中运行工具)或完全跳过一个步骤(例如,运行工具与不运行工具)。 在此类情况下,WDL 支持使用条件语句 if 。以下是一个 WDL 中的条件语句的例子:
if((shouldICallStepB == 0&& (m_value == "123"){
call stepB {input: in=stepA.out}}
在图形编辑模式下,可以通过在画布中添加条件组中完成条件语句的设置,条件组由条件和触发任务两部分组成,有以下功能特性:
1. 支持设置复合条件
2. 支持在条件组嵌套任务,拖拽需要触发的任务至条件组内,即可完成嵌套。
3. 支持在条件内添加函数/二元逻辑关系
上述 WDL 条件语句在图形编辑模式下设置如下图所示:



说明:
条件组变量仅支持从已有变量中选择,可选择的范围包括:1. 全局输入中有定义的变量,2. 任意任务中有定义的输出变量。

全局输入(Input)

WDL 语言中, input 是工作流中的一个重要模块,用于定义工作流的全局输入参数。在图形编辑模式下,全局输入组件(Input)允许用户在工作流的开始阶段定义一些全局的输入参数。这些参数可以在整个工作流中的任何地方使用,包括任务和任务组中。全局输入参数的主要优点是它们可以使工作流更加灵活和可重用,因为用户可以在运行工作流时改变这些参数的值。在图形编辑模式下,编辑全局输入组件需要添加全局输入参数。这些参数可以是文件、整数、字符串等各种类型。例如,以下是一个 WDL 中的全局输入的例子:
input{File bam_input Int mem_gb}
说明:
在这个例子中,定义了两个全局输入参数:bam_inputmem_gbbam_input是一个文件类型的参数,用于指定输入的 BAM 文件。mem_gb是一个整数类型的参数,用于指定使用的内存大小。
如下图所示,在图形编辑模式下,可通过在画布中添加全局输入组件,在组件内容编辑器中完成对输入参数类型和名称的定义。




全局输出(Output)

全局输出(Output)是在工作流(workflow)中定义的一种输出参数,可以被工作流中的所有任务(task)访问和使用。这种输出参数的设定方式,使得用户可以在工作流的结束阶段设定好一些全局性的参数,如文件路径、结果文件等,这些参数在整个工作流中可能被多次使用。
例如,以下是一个 WDL 中的全局输出的例子:
output {
File clean_fastq = clean_fastq_output
File inbd = inbd_output
}
如下图所示,在图形编辑模式下,可通过在画布中添加全局输出组件,在组件内容编辑器中完成对输出参数类型和名称的定义。



说明:
全局输入变量赋值仅支持从已有变量中选择,可选择的范围包括:1. 全局输入中有定义的变量,2. 任意任务中有定义的输出变量。

创建组件间关联

在图形编辑模式下,可以使用以下两种方式创建组件间关联:
1. 在画布中,使用连线连接各个组件之间的参数,建立它们之间的逻辑依赖关系。例如,将一个任务的输出参数连接至其他任务的输入参数进行赋值。
2. 在任务的组件内容编辑器中,复用其他组件的输出参数,对输入参数进行赋值。



说明:
1. 仅支持对没有赋值的参数通过连线进行赋值。
2. 支持关联的组件范围包括任务、任务组、条件组、全局输出。

保存和运行应用

更新画布内容后,建议及时保存修改,避免意外丢失内容,单击编辑页面右上角保存,即可保存更新内容,每次保存更新都会在时间轴生成一条历史记录。



图形编辑模式下,仅支持创建单 workflow 应用,应用在创建时平台默认会自动生成一个空 workflow 以组织各个组件。应用可运行需具备以下条件:至少具备一个 task 组件,且该 task 组件的运行设置中须指定可用的 docker 地址。
单击编辑页面右上角运行,即触发校验和运行流程。



校验通过后,进入运行设置页面,完成运行任务设置和运行参数设置。



1. 设置运行任务
在用一个工作项目内,任务名称不能重复。



运行选项
使用 Call-Caching 功能:使用 Call-Caching 功能,完全相同的任务无需重复执行,将自动使用之前的运算结果。
使用相对目录输出:若使用相对目录输出,所有作业输出文件将归档至相同目录,即只保留任务运行目录内的目录层级,需确保各个作业输出文件不重名。不勾选时,将保留任务多次运行的所有结果至指定目录。
举例:
当某工作流任务输出目录设置为"cos://bucket-12345678/pipeline/output",作业中输出的文件为sample.vcf:
若选择使用相对目录输出,最终输出文件为cos://bucket-12345678/pipeline/output/sample。当不同作业中有重名输出文件时,将在任务输出目录下产生文件冲突,冲突的文件会相互覆盖;
不勾选使用相对目录输出选项,最终输出文件为:cos://bucket-12345678/pipeline/output/wgs/ade68a6d876e8d-8a98d7e9-ad989a8d/call-gatk/execution/sample.vcf。不同作业输出到不同的目录中,重名输出文件不会造成冲突。
本平台支持两种运行失败模式(Cromwell 特性),NoNewCalls 和ContinueWhilePossible,可指定在工作流执行期间针对作业失败的情况采取相应的操作。 ○ NoNewCalls(默认):一旦作业失败,Cromwell 不会立即启动任何新程序。Cromwell 仍将监控其余的工作,直到它们完成(成功与否)。 ○ ContinueWhilePossible:尝试运行尽可能多的作业,直到无法再启动为止。当所有正在运行的作业都完成时,工作流将失败。
关于运行失败模式更多介绍,可参见 Cromwell 官方文档
任务输出目录(可选):指定任务输出目录后,作业输出文件将归档至该目录。
缓存保留期限:缓存保留期限分为4档:24小时、3天、7天和永久。
注意:
超过设定保留期限时,缓存将被删除,届时可能对 call caching 功能产生影响。
2. 设置运行参数
运行参数可根据 WDL 解析出的参数填写。
运行参数必须按照 WDL 中声明的类型,提供有效的值。
部分有默认值的参数可保留默认值。
变量名左上角带有星号的为必填输入。
可以将运行参数保存为模板,以后直接调用,也可下载输入参数为 JSON 文件。
平台为公共应用提供了参考模板,导入工作项目时,匹配工作项目所在地域的参数模板,在运行参数设置页可选择相应模板。



3. 投递单个任务 单个任务无需上传表格,手动完成运行参数的设置即可完成投递。
4. 批量运行 输入文件不同,整体流程相同的情况下,用户也可以通过上传表格批量投递任务。详情参见 可视化批量任务投递及管理

版本管理

版本管理功能涵盖发布和历史时间轴两大功能,能帮助您更好地掌握应用的进展和质量情况,从而提高应用的效率、质量和性能,优化工作流的开发和管理。
发布功能:通过发布功能,您可轻松发布正式版本,待权限管理功能上线后,您可以在不同成员范围内控制查看和使用权限,以更好地管理应用的版本。
历史时间轴:通过时间轴,您可查看历史和版本记录,追溯应用开发过程,帮助您及时发现、解决和优化问题,提高应用质量和性能,并优化您的开发流程和管理规范。

发布应用版本

工作流阶段性开发完成后,您可以发布正式版本。发布前请确认应用无语法错误且已设置主文件。确认无误单击右上角发布,即可进入发布流程。



单击发布会触发保存和校验流程,通过校验后进入发布流程,显示弹窗“发布版本”,填写发布版本名称、描述,选择参数模板后确认,完成发布。



发布完成后,在历史版本时间轴内可切换至该版本,支持查看和运行该历史版本。



说明:
历史版本仅支持查看和运行,不支持在应用内编辑、删除、发布。

查看历史记录和版本记录

查看时间轴
时间轴是应用的完整历史记录的可视化展示,包括版本记录和历史记录。时间轴视图按时间顺序排列,展示了应用工作流文件的所有更新,您可以通过时间轴追溯开发过程的关键时间节点,比较不同版本和历史记录,使得管理和控制开发过程更加容易。
查看历史记录
在时间轴视图中,应用文件每次更新后保存,都会生成一条历史记录。单击任意历史记录,资源管理器界面内容切换至该历史记录对应工作流画布。



说明:
历史记录仅供查看,不支持编辑、运行、发布和删除。
查看历史版本
时间轴视图中,发布的正式版本按历史版本同样按时间顺序排列,单击任意历史版本,资源管理器界面内容切换至该历史版本对应工作流画布。




其他功能

查看 DAG 概览图

支持查看图形编辑模式下创建的应用概览图。如下图所示,单击应用编辑页右上角 DAG(有向无环图) 按钮,显示应用 DAG 概览图。




导出 WDL 文件

组学平台支持一键导出工作流代码文件(WDL),流程可迁移。图形编辑模式下开发的应用可导出为 WDL 文件,单击编辑页面右上角扩展按钮,显示导出WDL,单击后自动导出对应 WDL 文件。