目录
- 生信工作流框架搭建 | 03-nextflow与AWS Batch
- 前情提要
- 批量计算基本概念
- 批量计算服务(Batch Computing Service)是一种适用于大规模并行批处理作业的分布式云服务。
- 术语表
- AWS 构建
- 如果你使用除大陆外的区域
- 如果你恰好在EU或者Ireland
- 如果你使用大陆区
- 开始使用
- 配置
- 安装 AWS CLI 工具、docker,自定义AMI
- 简而言之
- 注意事项
- 下期预告?
生信工作流框架搭建 | 03-nextflow与AWS Batch
本篇为biodoge《生信工作流框架搭建》系列笔记的第4篇,该系列将持续更新。
前情提要
上回生信工作流框架搭建 | 02-nextflow 实战为大家提供了nextflow的实用教程。可能我们并不满足于本地跑nextflow流程,毕竟容器化、可移植,才是工作流框架的最有力之处。
批量计算基本概念
批量计算服务(Batch Computing Service)是一种适用于大规模并行批处理作业的分布式云服务。
国内的云服务厂商阿里云和腾讯云等,为批量计算提供了丰富的API接口,与亚马逊相对原生的环境相比,架构和术语有所不同,对于初学者来说,使用起来更加方便。
术语表
术语 | 说明 |
---|---|
集群 Cluster | 一系列的实例组在 Batch 中被定义为一个集群(Cluster)。一个集群可以由多个实例组(Group)组成,一个组中的实例共享同样的实例类型定义(如指定的 CPU 核数和内存大小组合),多个组之间共享镜像(Image) |
作业 Job | 用户的每个特定的计算需求在 BatchCompute 中被描述为一个作业(Job),作业是用户提交批处理工作的最小单位,它由单个或多个有前后依赖关系的任务组成。 |
任务 Task | 一个作业由一组任务(Task)及其依赖关系组成。批量计算支持能以有向无环图 DAG(directed acyclic graph)形式描述,来给多个批处理任务设置依赖关系,共同组成一个作业,然后依次执行各个任务,直到所有任务完成,即作业完成。任务间的依赖关系只能在作业提交时指定,提交完成后不能进行修改。 |
任务模板 | 可以将常用的任务制作成任务模板,基于任务模板定制不同的任务,实现作业的快速提交。 |
实例 Instance | 实例是 Batch 调度与执行的最小单元,这些实例会动态的运行在系统分配的虚拟服务器节点上。每个任务可以有一个或多个执行实例(Instance)。同一任务的各个实例并行处理各自的输入数据。 |
镜像 Image | 镜像(Image)是集群资源创建或者作业运行环境的模板。它是一个标准的或者自定义的 ECS (阿里云的)镜像,需要预先将计算环境和应用程序准备好并制作成自定义镜像。 |
通过自定义脚本->DAG描述任务依赖,阿里云的任务调度相对简单,可以轻松将不同工具串起来,而不需要工作流框架如nextflow。
然而在AWS中,如何调度呢?
术语 | 说明 |
---|---|
EC2 | 亚马逊弹性计算云(Amazon EC2)在亚马逊Web服务(AWS)云中提供可扩展的计算能力。使用AmazonEC2无需在硬件上进行前期投资,因此您可以更快地开发和部署应用程序。您可以使用AmazonEC2根据需要启动任意数量的虚拟服务器,配置安全性和网络,并管理存储。 |
S3 | Amazon Simple Storage Service (Amazon S3)是一种对象存储服务,提供业界领先的可伸缩性、数据可用性、安全性和性能。各种规模和行业的客户都可以使用 Amazon S3存储和保护各种用例的任意数据,比如数据湖、网站、移动应用程序、备份和恢复、归档、企业应用程序、物联网设备和大数据分析。 |
作业队列 | 当你提交AWS Batch作业,你将其提交到特定的作业队列中,该作业将一直驻留在那里,直到它被安排到计算环境中。您可以将一个或多个计算环境与作业队列关联。您还可以为这些计算环境分配优先级值,甚至可以为作业队列本身分配优先级值。例如,您可以有一个高优先级队列供您提交对时间敏感的作业,而一个低优先级队列用于在计算资源较便宜时可以随时运行的作业。 |
计算环境 | 计算环境是一组用于运行任务的托管或非托管计算资源。使用托管计算环境,您可以在多个详细级别上指定所需的计算类型(Fargate 或 EC2)。您可以设置使用特定类型的 EC2 实例的计算环境,例如特定模型c5.2xlarge要么m5.10xlarge. 或者,您可以选择只指定要使用最新的实例类型。您还可以指定环境的 vCPUs 的最小数量、所需数量和最大数量,以及您愿意为竞价型实例支付的金额占按按需实例价格和目标 VPC 子网集合的百分比。AWS Batch根据需要高效启动、管理和终止计算类型。 |
基本的处理模式(S3存储、EC2实例的基本概念默认你已经懂啦)
AWS还有个叫step function的服务,可以管理工作流,但是是否能做到DAG调度,我们并没有实验过。只知道,它的语法看起来有些复杂。并且,并不针对生物数据处理。
因此,官方提供给我们的建议是,使用第三方开源框架:nextflow,为生信而生。使用工作流语言给我们带来的便利不必说,组织起来必然是比一个一个零散的脚本更为系统的。
上图来自AWS的官方讲稿《CMP412: Orchestrating complex genomics pipelines with AWS Batch》 可在 AWS re:Invent 2019 Presentations 中获取
AWS 构建
重要的一个概念是,AWS不同区域提供的服务不同(咱大陆特别待遇),如果你登录AWS网站就会理解,.cn和.com是完全不同的服务。你当然可以注册任何区域,各有利弊,比如宁夏区和北京区传输很快、“安全”;美东区数据传输较慢,但是支持的服务多。
如果你使用除大陆外的区域
非常好,欢迎了解Amazon Genomics CLI 开源服务,除了 AWS GovCloud (美国) 和位于中国的区域之外,你可以在任何AWS 区域使用它。
集成了WDL、Nextflow、CWL 和 Snakemake等工作流语言,专为基因数据批量处理打造。
可以跟着【伯乐大典】基于Nextflow基因组测序的AWS Batch实验(上) 一步步在workshop中练习。 大陆区也可以看这个视频,手把手教很详细,虽然不能用其他区的服务。
如果你恰好在EU或者Ireland
那么再好不过了!你可以了解nextflow tower。繁复的构建不用操心了。
集成aws batch、HPC、Azure batch等环境,海量模板,一键启动,随时追踪,可视化,真乃神器也。
如果你使用大陆区
恭喜你,天选之子!你只能靠自己!
当然,你还有贴心的nextflow官方文档可以参考哩!
开始使用
-
在 AWS 控制台中, 在您的 AWS Batch 服务中创建计算环境 (CE)。
a. 如果您使用的是自定义 AMI,则必须在 CE 配置中指定 AMI ID
b. 确保选择安装了 Docker 的 AMI(自定义或现有)
c. 确保策略 AmazonS3FullAccess (授予对 S3 存储桶的访问权限)附加到为 CE 配置的实例角色
d. 如果您计划使用 Amazon ECS 容器中的 Docker 映像,请确保策略AmazonEC2ContainerServiceforEC2Role 也附加到实例角色 -
在 AWS 控制台中,创建(至少)一个作业队列并将其绑定到计算环境。
-
在 AWS 控制台中,根据需要为存储桶目录(见下文)创建 S3 存储的存储桶,并为输入数据和结果创建其他存储桶。
-
确保管道进程使用容器指令指定一个或多个 Docker 容器 。
-
容器镜像需要发布在 Docker 注册表中,例如 Docker Hub、Quay 或 ECS 容器注册表,ECS Batch 可以访问这些注册表。
配置
配置管道时:
- 导入 nf-amazon插件
- 指定 AWS 批处理执行程序
- 使用队列指令指定一个或多个 AWS Batch 队列以执行
- 使用 containerOptions 指令指定 AWS 作业容器属性。
nextflow.config 中国区特别版
profiles {
standard {
process.container = 'nextflow/rnaseq-nf:s3'
docker.enabled = true
aws.client.endpoint = 'https://s3.cn-northwest-1.amazonaws.com.cn'
}
batch {
aws.region = 'cn-northwest-1'
process.container = 'nextflow/rnaseq-nf:s3'
process.executor = 'awsbatch'
process.queue = 'job-queue'
}
}
安装 AWS CLI 工具、docker,自定义AMI
尽管默认你都会了
稍微讲一下我安装Cli的命令,和nf官方的有点区别:
##从本地linux访问aws实例后,获得管理员权限
sudo -s
#AWS CLI S3访问工具
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
##或者直接安装!
$ pip install awscli
##配置密钥
#Access Key在“aws-我的安全凭证”那里,只允许访问一次密钥
$ aws configure
AWS Access Key ID [None]: AKIAIOTHISISAEXAMPLE*
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY*
Default region name [None]: cn-northwest-1
Default output format [None]: json
*THIS IS A EXAMPLE
其他的按官方文档来就好。
而batch的配置那里,可以看上面伯乐大典的视频,是比较清楚的。
另外还需要配置 Docker Register,创建 Nextflow 头节点镜像并推送流程镜像到 Repo。不能具体讲解因为这里并不是我负责配置,涉及知识产权问题不能分享,但是如果有问题欢迎提问。
在这里的坑真是不计其数~
简而言之
如果文档看不太懂,我们大概可以这样理解:nextflow在本地调度得好好的,到云端呢,就是由一个头节点(也是EC2示例,只是计算资源很少)负责调配,【其中一种模式】是一个process一种任务定义,根据需要的资源开启相应的机器,一个样本一台机器批量计算(至于什么任务跑什么机器,一边是aws上job队列和计算环境定义,一边是nextflow的config里配置),比如我qc需要的cpu和内存很少,那么开个两核16G的就够了;组装需要的很多,开个72核144G,这不是美滋滋?
然后数据传输就靠S3桶(共享存储)来完成。
AWS控制台
nextflow.config:
注意事项
- 大陆区无法使用–resume功能,也就是断点重投。但是nextflow tower可以(泪奔)
- 学会用nextflow log来debug,即便如此很多时候也会不明不白地失败。
- 请注意超时问题。AWS 默认EC2实例运行周期1天,超时执行中断任务,这个可以修改。
- 用好nextflow report
下期预告?
nextflow的分享可以告一段落了。
这个系列还会有下期吗?你们还希望什么样的分享呢?如果工作流系列结束,我将可能分享Perl的学习笔记,也请多多交流哦。