标准流程描述语言 WDL 阿里云最佳实践

本文涉及的产品
对象存储 OSS,20GB 3个月
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
简介: WDL 作为全球基因组与健康联盟 (Global Alliance for Genomics and Health)支持的工作流描述语言,已经被越来越多的客户所采用。通过阿里云的 Cromwell 方案,用户可以本地开发测试WDL流程,再使用云计算强大的计算能力,来完成基因组学数据分析工作。

我们为什么需要标准的工作流描述语言

script-workflow.jpg

在构造生物信息工作流时,如果不使用标准工作流描述语言,我们一般是使用脚本语言来构造:

  • 直接采用shell、R、Python 等编写脚本,封装基因计算软件的命令行
  • 多个脚本组成一个工作流
  • 执行时输入参数执行命令行

这种方式构造的工作流,在使用过程中可能面临下面的挑战:

  • 不同的基因流程可能使用不同的脚本语言、对使用者的计算机技能要求较高
  • 脚本类的工作流的执行,无专业的解析引擎,运行状态无法监控
  • 脚本健壮性要求高,如果错误处理没有做好,可能造成时间和资源的浪费

如果您也遇到了上面的痛点,那么您急需要引入标准的工作流来规范流程。比如 WDL 就是个很好的选择。

WDL

什么是 WDL

WDL 是 Workflow Description Language的缩写,有时也写作 Workflow Definition Language,是美国 Broad Institute 推出的工作流描述语言。
WDL.png
经过几年的发展,WDL 已经是生信行业广泛接受的一种工作流标准,具有下面的优势:

  • Human-readable
    WDL 作为一种为工作流领域定制的语言,和 Shell、Python 等通用的脚本语言相比,没有过多复杂的概念,对使用者的计算机技能要求不高,对于生信用户容易上手。
  • Portable Workflow
    WDL 可以在多个平台执行,比如本地服务器、SGE 集群,云计算平台等,可以做到一次编写多处执行。
  • Standard
    作为GA4GH支持的工作流描述语言之一,已经得到了众多大厂和行业协会的支持,形成了比较完善的生态。

从 Hello world 开始编写WDL

像我们学习其他语言一样,先从经典的 hello world 开始,学习 WDL 的编写

task echo {
  String out

  command {
    echo Hello World! > ${out}
  }

  runtime {
    cluster: "OnDemand ecs.sn1.medium img-ubuntu-vpc"
    docker: "registry.cn-shanghai.aliyuncs.com/mynamespace/myubuntu:0.1"
  }

  output {
    File outFile = "${out}"
  }
}

workflow wf_echo {
  call echo
  output {
    echo.outFile
  }
}

上面的例子是一个简单的 WDL,作用是输出 Hello world 并保存在一个文件里面,输出文件名可以指定。一个完整的 WDL 一般由下面几个部分组成:

  • workflow:工作流定义
  • task:工作流包含的任务定义
  • call:调用或触发工作流里面的 task 执行
  • command:task在计算节点上要执行的命令行
  • runtime:task在计算节点上的运行时参数,包括 CPU、内存、docker 镜像等
  • output:task 或 workflow 的输出定义

wdl-framework.png

使用变量

我们要把一个处理步骤构造成一个 task, 就要封装计算软件的命令行,那么命令行的参数如何传入呢?输出文件的名字如何指定呢?这些问题在 WDL 中可以通过变量来解决。比如 Hello world 例子中的 String out 就是一个字符串类型的输入,用于指定输出文件的名字。WDL 中的变量可以定义在 workflow 中,也可以定义在 task中。在command 和 output 中可以通过$和{}的方式来引用变量。
image.png

变量的类型主要有以下几种:

  • String
  • Int
  • Float
  • File
  • Boolean
  • Array[T]
  • Map[K, V]
  • Pair[X, Y]
  • Object

关于每一种变量的使用,以及 WDL 的更多使用技巧,请参考官方规范文档

task 如何组装成 workflow

一个 workflow 里面包含多个 task,task 之前的串行或并行关系如何表达呢?主要有下面三种情况:

Linear Chaining

image.png
第一种是最常见的场景,简单的线性串联,多个 task 依次执行,前面步骤的输出作为后面步骤的输入,最后一个 task 的输出作为整个 workflow 的输出。

Multi-input / Multi-output

image.png
第二种是多输入多输出的场景,一个 task 可以定义多个输入和输出,比如上面的例子,task B 有两个输出,作为 taskC 的输入。

Scatter-Gather Parallelism

image.png
第三种场景是用于 task 的并发执行。如果一个 task 有多个样本需要并发处理,可以使用数组的方式将样本传入,然后使用 scatter 并发的处理每个样本,每个执行的单元称为一个 shard。所有的 shard 执行完成,则当前 task 执行完成,所有 shard 的输出,又作为一个数组,可以传递到下一个 task 处理。

输入参数如何传入

workflow 的输入,比如基因样本的存储位置、计算软件的命令行参数、计算节点的资源配置等,可以通过 json 文件的形式来指定。使用 wdltools 工具可以根据 WDL 文件来生成输入模板:
image.png
模板格式如下:
image.png
当然,如果工作流不是很复杂,也可以按照上面的格式手写 input 文件。下面是一个 GATK 工作流的 input 文件的片段:
image.png

实际的例子

使用 GATK 构建的Jointcalling

workflow定义
image.png

task 定义:HaplotypeCallerERC
image.png

task定义 GenotypeGVCFs
image.png
工作流解析
image.png

  • 整个 workflow 由2个 task 组成
  • Task1 通过 Scatter 并发处理多份样本,得到一组 vcf 文件
  • Task2 处理 Task1 输出的一组 vcf 文件,得到最终的workflow 输出

一个稍微复杂的例子--使用 GATK 做外显子分析

工作流定义
image.png
task定义:UnmappedBamToAlignedBam
image.png
工作流解析
image.png

  • 整个 Workflow 由5个 task 组成
  • Task 之间通过 Linear Chaining 的方式组合
  • 每个 Task 是子 Workflow,由多个 Task 组合而成。也就是说 WDL 支持嵌套,workflow 里面的任务,既可以是一个 task,也可以是一个完整的 workflow,这个 workflow 被称为sub workflow。更多关于嵌套的用法请参考官方规范文档

WDL 怎么运行

执行引擎 Cromwell

Cromwell 是 Broad Institute 开发的工作流管理引擎。具有如下的优势:

  • 支持 WDL 和 CWL 两种工作流描述语言
  • 多平台支持,包括本地服务器、SGE集群、云计算平台等
  • 阿里云批量计算是官方支持的云平台之一
  • 丰富的元数据,展示工作流执行过程
  • 支持多种高级特性,优化 workflow 的执行

image.png

使用 Cromwell 运行 WDL

使用 Cromwell 运行 WDL 有两种模式

  • Run 模式
    用来执行单个 WDL,适用于调试初期,快速执行一个WDL。

    $ java -jar cromwell.jar run echo.wdl --inputs input.json
  • Server 模式
    用下面的命令启动一个 HTTP server

    $ java -Dconfig.file=application.conf -jar cromwell.jar server

再使用 RESTful API 提交工作流到 server 执行:

$ java -jar cromwell.jar submit -t wdl -i input.json -o option.json -h http://localhost:8000

相比 Run 模式,Server 模式有以下优势:

- 可以并行处理多个 workflow,适用于生产环境
- 有 Call caching 等高级特性(下文会讲到),优化 workflow 的执行
- 提供丰富的 workflow metadata,来展示 workflow 的执行过程

注意:不管是使用Run 模式还是 Server模式,要使用批量计算作为后端运行 WDL,都需要对应的配置文件支持,配置文件详解请参考批量计算官方文档Cromwell 官方文档

工具和支持

编辑工具及插件支持

image.png
上图的三个主流编辑器或 IDE 都有 WDL 的官方插件,支持语法高亮。

语法检查工具

WDL 编写完成后,在真正执行之前,我们可以使用官方工具进行语法检查:

$ java -jar wdltool.jar validate myWorkflow.wdl

Broad WDL 论坛

在使用 WDL 和 Cromwell 的过程中,如果遇到问题,可以到 Broad WDL 官方论坛寻求帮助,常见的问题,在论坛都可以找到答案。
image.png

WDL 参考样例

在学习编写 WDL 的过程中,可以参考 Broad 官方的一些 GATK 工作流,借鉴和学习 WDL 的用法。
image.png

WDL + Cromwell 在阿里云批量计算的最佳实践

批量计算服务云上基因计算

批量计算是阿里云上的一种适用于大规模并行批处理作业的分布式云服务。BatchCompute可支持海量作业并发规模,系统自动完成资源管理,作业调度和数据加载,并按实际使用量计费,是一种很适合基因计算的云计算平台,当前是 Cromwell 官方支持的云计算平台后端之一。
image.png

Cromwell + 批量计算实现 WDL 流程

image.png
上图是使用批量计算实现 WDL 流程的总架构图:

  • 用户使用 WDL 构造 工作流
  • 使用命令行工具提交 WDL 到 Cromwell server
  • Cromwell server 解析 WDL 并将 task 转化为批量计算的作业提交
  • 批量计算作业提交会后根据作业数量动态的申请计算资源
  • 作业开始运行后,会从 OSS 对象存储读取测试数据,计算完成后会将结果上传到 OSS
  • 针对基因数据分发中数据拷贝的痛点,推出了对应的分发解决方案:CCP(内容协作平台),生信分析公司通过CCP实现对象存储的目录-Drive的映射,实现租户级分目录管理,管理不同的测序公司访问权限,生物样本交付给第三方测序公司测序,测序公司直接上传数据到网盘,实现云上交付

Cromwell On 批量计算

批量计算作为官方支持的云计算后端,在存储、计算等方面做了大量的适配和优化。
image.png

支持的高级特性

从官方版本45开始,Cromwell 使用批量计算作为后端,支持 glob 和 Call caching 两个高级特性。

glob

glob 是指对 workflow 或 task 的输出,支持通配符匹配。

output {
  Array[File] output_bams = glob("*.bam")
}
  • 使用场景
    输出文件有多个,且文件名不确定
  • 使用方法
    采用 glob 表达式,用 array 方式存储多个输出文件
  • 价值
    输出结果支持通配符匹配,简化 WDL 编写,采用数组方式,方便并发处理

Call caching

Call caching 是 Cromwell 的一个很有用的高级特性,通过 task 的复用,帮助客户节省时间,节省成本。

  • 适用场景
    输入和运行环境不变的情况下,复用之前 task 的运行结果
  • 命中条件
    输入 + 运行时参数相同
  • 价值
    复用之前的执行结果,节省时间,节省成本

image.png
例如上图的 workflow,一共有4个 task,当执行到第三个 task 时,由于参数错误失败了。当我们排除了错误之后,再次提交 workflow,Crowell 会检测到前两个 task 已经执行过,则直接复用其结果,从 task3 开始继续执行,从而达到节省时间,节省成本的目的。
关于 Call caching 的配置和使用,请参考批量计算官方文档

批量计算 runtime

使用批量计算作为后端时,主要的 runtime 参数有:

  • cluster

    • 计算集群环境
    • 支持serverless 模式和固定集群模式
  • mounts

    • 挂载设置
    • 支持 OSS 和 NAS
  • docker

    • 容器镜像地址
    • 支持容器镜像服务
  • systemDisk

    • 系统盘设置
    • 包括磁盘类型和磁盘大小
  • dataDisk

    • 数据盘设置
    • 包括磁盘类型、磁盘大小和挂载点
  • timeout

    • 作业超时时间

具体的参数解释及填写方法,请参考 Cromwell 官方文档

启动 Cromwell server

为了方便用户部署 Cromwell server,我们推出了免费的 Cromwell server ECS 镜像,内置 Cromwell 运行需要的 java 环境、docker 工具、mysql 镜像及配置文件模板等,使用一键启动工具,就可以启停 Cromwell server:

$ cd /home/cromwell/docker-compose-mysql/

#初次部署,使用init来初始化配置并启动服务
$ ./server.sh init --id=xxxx --key=xxxx --root=oss://my-bucket/cromwell_dir --instance=ecs.sn1.medium --image=img-ubuntu-vpc

#停止服务
$ ./server.sh stop

#再次启动服务
$ ./server.sh start

服务启动后,可以使用镜像内置的命令行工具 widdler 来提交和查看 workflow。widdler命令行集成了Crowmell server 和批量计算服务,可以提供如下功能:

  • 支持工作流的提交、查询等操作
  • 支持工作流对应的批量计算日志的查询
  • 支持失败工作流快速定位原因
  • 支持workflow 级别的 metric 统计
  • 支持workflow 级别的 billing 统计

在 Cromwell server 上一个完整的工作流执行

提交 workflow

image.png

查看 workflow 状态

image.png

查看 workflow 输出

image.png
image.png

查询 workflow 总览信息

image.png

查看 workflow 级别 metric 统计

image.png

查看 workflow billing 统计

image.png

查看 workflow 日志

image.png

目录
相关文章
|
7天前
|
存储 弹性计算 Linux
阿里云账号注册、完成实名认证、试用云服务器和购买云服务器流程参考
本文为大家介绍新手用户从注册阿里云账号,完成实名认证,然后试用云服务器和购买云服务器的主要流程,适合初次购买和试用阿里云服务器的新手用户参考。
阿里云账号注册、完成实名认证、试用云服务器和购买云服务器流程参考
阿里云域名购买注册流程_创建信息模板_域名实名认证全流程
阿里云域名注册指南:访问[阿里云域名注册入口,查询并注册心仪域名,选择后缀,加入清单后结算。价格因后缀而异,如.com首年78元。创建域名信息模板完成实名认证,首次需上传资料。获取优惠口令并使用可享折扣
|
1月前
|
弹性计算 运维 Java
最佳实践:阿里云倚天ECS在千寻位置时空智能服务的规模化应用
阿里云、平头哥及安谋科技联合举办的飞天技术沙龙探讨了倚天Arm架构在业务创新中的应用。活动中,千寻位置运维专家分享了将核心业务迁移到倚天处理器ECS实例的成功案例,强调了倚天处理器的高能效比和降本增效优势。迁移过程涉及操作系统、CICD系统和监控系统的适配,以及业务系统的性能测试。目前,千寻已迁移了上千台ECS实例到倚天处理器,实现了成本和效率的显著提升。未来计划继续扩展倚天处理器在核心业务和K8S中的应用。
软著干货:阿里云软件著作权申请流程及费用(快速下证)
阿里云软件著作权申请涉及账号注册、实名认证和选择服务。在阿里云官网注册账号,通过实名认证后,选择计算机软件著作权登记服务,如普通359元/件或加急1080元/件。在线填写申请表单,经过阿里云初审、授权提交、打印申请表并邮寄材料。版权中心审查后,20个工作日内可领取证书。详细流程见阿里云百科相关指南。
|
29天前
|
人工智能 前端开发 JavaScript
阿里云安全类云产品,验证码使用时滑动验证流程及线上问题排查
阿里云验证码产品,使用业界先进的风控引擎结合“规则+AI”模型,有效区分真实用户和机器自动化脚本攻击,避免机器请求造成业务损失。主要适用于垃圾注册、刷库撞库,薅羊毛,短信被刷等风险场景。为您提供安全可靠的业务环境。本文为大家介绍验证码使用时滑动验证流程及验证不通过的问题排查。
64814 5
阿里云安全类云产品,验证码使用时滑动验证流程及线上问题排查
|
9天前
|
人工智能 自然语言处理 算法
阿里云PAI大模型评测最佳实践
在大模型时代,模型评测是衡量性能、精选和优化模型的关键环节,对加快AI创新和实践至关重要。PAI大模型评测平台支持多样化的评测场景,如不同基础模型、微调版本和量化版本的对比分析。本文为您介绍针对于不同用户群体及对应数据集类型,如何实现更全面准确且具有针对性的模型评测,从而在AI领域可以更好地取得成就。
|
29天前
|
云安全 算法 数据建模
阿里云SSL证书免费版申请流程,收费版证书收费标准及证书类型选择参考
SSL证书是实现网站https访问必须购买的云安全类产品,现在很多用户在网站做好之后,下一步通常都是给网站域名购买SSL证书实现网站的https访问,阿里云提供申请SSL证书服务,现在每个阿里云个人或企业用户(以实名认证为准)每年可以一次性申请20张免费Digicert DV单域名试用证书(以下简称免费证书),本文为大家介绍具体的申请流程和收费证书的最新收费标准以及不同种类的证书选择参考。
阿里云SSL证书免费版申请流程,收费版证书收费标准及证书类型选择参考
|
1月前
|
数据处理 云计算
阿里云中小企业专享上云权益与上云抵扣金申请流程参考
阿里云针对企业用户推出上云权益和上云抵扣金福利。中小企业如未在阿里云活动页找到适合的产品或解决方案,可通过专门通道申请上云权益,阿里云将派专人提供解决方案和优惠。此外,阿里云为初创企业推出了创业者计划,成功加入该计划后,阿里云为初创企业提供最低3500元、最高100万元的上云抵扣金,助其零成本享受云资源和技术服务。这些措施简化申请流程,为中小企业提供实质性经济支持,让其更轻松享受云技术的便利。
阿里云中小企业专享上云权益与上云抵扣金申请流程参考
|
1月前
|
存储 弹性计算 安全
阿里云创业者计划解读,创业者计划主要内容、申请流程及常见问题解答
目前越来越多的初创企业开始意识到云计算在提升业务效率和降低成本方面的重要性。但是对于许多初创企业来说,由于缺乏技术资源和资金,上云之路并不平坦。为了解决这一问题,阿里云推出了创业者计划,旨在为初创企业提供全方位的赋能与服务,助力其在阿里云上快速构建自己的业务,开启智能时代创业新范式。
阿里云创业者计划解读,创业者计划主要内容、申请流程及常见问题解答
|
1月前
|
弹性计算 Java 关系型数据库
最佳实践:阿里云倚天ECS在千寻位置时空智能服务的规模化应用
当前,千寻已有上千台倚天ECS实例在支撑线上核心业务。

热门文章

最新文章