1.3. 基本概念#

本章节介绍用户开始运用通用工作流语言(CWL)所需的基本概念。读者应了解工作流管理工具和 YAML, 且能较为自如地按照文中指示操作命令行。这些概念在《用户指南》其他部分有更详尽的说明。如果您已了解 CWL, 或想查阅进阶内容,可以考虑跳过本章节。

1.3.1. CWL 规约#

CWL 的作用在于描述各种命令行工具,并且将它们连接起来,以创建工作流 (workflow)。CWL 是一种规范,而非某种特定的软件。因此,由 CWL 描述的工具和工作流能够移植到支持 CWL 标准的多种平台。

CWL 规约由 CWL 社群撰写并维护,此规约现有多个版本,本《用户指南》所涵盖的是版本 v1.2.

规约的版本号码由至多三个数字构成,以 .(圆点)分隔。第一个数字为主发布版本,用于向后不可兼容的更改,例如删除过时的功能。第二个数字是次级发布版本,用于新增功能或向后兼容的小幅调整。最后一个数字用于错误修复,例如打字错误或其他更正。

备注

规约所使用的版本标号模型称为“语义型版本”,请参阅本章结尾以了解更多相关信息。

1.3.2. 实现#

所谓 CWL 规约的某种“实现” (implementation), 指的是任何一种依照某版本的规约内容而编写的软件。然而,诸实现未必能将规约的每个方面都转化为软件实体。目前,CWL 各种实现的许可协议包括开源和商业许可。

CWL非常适用于描述集群、云计算和高性能计算 (HPC) 等多节点、任务并行调度环境中的大规模工作流。

digraph G { compound=true; rankdir="LR"; ranksep=0.75; fontname="Verdana"; fontsize="10"; graph [splines=ortho]; node [fontname="Verdana", fontsize="10", shape=box]; edge [fontname="Verdana", fontsize="10"]; subgraph cluster_0 { label="Implementations"; ranksep=0.25; cwltool; toil; Arvados; runner_others[label="..."]; label="CWL Runners"; } subgraph cluster_1 { label="Tools"; ranksep=0.25; subgraph cluster_2 { "vscode-cwl"; "vim-cwl"; benten; editor_others[label="..."]; label="Editors"; } subgraph cluster_3 { "CWL Viewer"; "vue-cwl"; viewer_others[label="..."]; label="Viewers"; } "And more"; } cwltool -> "CWL Specification" [ltail=cluster_0, dir=back]; "CWL Specification" -> "vscode-cwl" [lhead=cluster_1]; "vscode-cwl" -> "CWL Viewer" [style=invis]; "CWL Viewer" -> "And more" [style=invis]; }

CWL 规约、实现及其他工具。#

1.3.3. 流程和要求#

流程 (process) 是指接收输入并生成输出的计算单元,影响其行为的包括输入 (input)、要求 (requirement) 及提示 (hint)。CWL 规约 v1.2 版定义了如下四种流程:

  • 命令行工具。

  • 表达式工具。

  • 操作。

  • 工作流。

digraph "A GraphViz graph with the CWL processing units, e.g. Process, Workflow, CommandLineTool, etc." { rankdir="TB"; graph [splines=false]; node [fontname="Verdana", fontsize="10", shape=box]; edge [fontname="Verdana", fontsize="10"]; Process; CommandLineTool; ExpressionTool; Operation; Workflow; node[label="", width=0, height=0]; edge[arrowhead=none]; n1; {rank=same; CommandLineTool; ExpressionTool; Operation; Workflow;} Process -> n1 [arrowhead=normal, dir=back]; n1 -> CommandLineTool; n1 -> ExpressionTool; n1 -> Operation; n1 -> Workflow; }

可用在 CWL 对象模型中的处理单元。#

“命令行工具”指的是 echolstar 等命令行程序的包装器 (wrapper)。从工作流中可以调用命令行工具。

“表达式工具”是 JavaScript 表达式的包装器。通过将工作流执行过程中的相同部分整理为可重用的 JavaScript 代码,像命令行工具一样接受输入并生成输出,工作流和命令行工具可以得到简化。

“操作”是一种抽象的过程,它同样可接受输入、生成输出,并用于工作流中。但是,这一类特殊操作并不十分常用。用户指南的 《操作》一节将进行讨论。

“工作流”指的是可分为步骤的流程。“步骤”可以是其他工作流(嵌套工作流),也可以是命令行工具或表达式工具。工作流的输入可以传递给它的任一步骤,而其步骤生成的输出可用作工作流的最终输出。

CWL 规约允许其实现提供额外功能,或通过 requirements (要求)指定工作流的先决条件。CWL 规约定义了诸种要求,如:

某些 CWL 运行程序可能提供规约之外的需求。例如 cwltool 提供 cwltool:CUDARequirement 以支持GPU需求,但这不在 v1.2 版本规约之内,可能不受其他 CWL 运行程序支持。

“提示”与需求类似。其区别是,列为“需求”的功能是不可缺少的,而提示仅列出可选功能。更详细介绍请见 《需求》一章。

1.3.4. FAIR 工作流#

The FAIR principles have laid a foundation for sharing and publishing digital assets, and in particular, data. The FAIR principles emphasize machine accessibility and that all digital assets should be Findable, Accessible, Interoperable, and Reusable. Workflows encode the methods by which the scientific process is conducted and via which data are created. It is thus important that workflows both support the creation of FAIR data and themselves adhere to the FAIR principles. — FAIR Computational Workflows, Workflows Community Initiative.

CWL 滥觞于“make”一类推定任务间依赖关系,并据此决定其执行次序的工具。但与“make”的不同在于,CWL 任务是存在于独立环境中的,其输入和输出需要明确指定。

明确而独立,其益处在于灵活、可移植及可扩缩。CWL 所描述的工具和工作流,既能无缝对接 Docker 等技术以发挥其优势,又能通用于不同供应方的 CWL 实现环境中。

同时,cwltool 将 PROV-O 标准本体 (standard ontology) 运用于数据来源的保证。

1.3.5. 了解更多信息#