生信工作流框架搭建 | 03-nextflow与AWS批量计算

生信工作流框架搭建 | 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根据需要启动任意数量的虚拟服务器,配置安全性和网络,并管理存储。
S3Amazon 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是完全不同的服务。你当然可以注册任何区域,各有利弊,比如宁夏区和北京区传输很快、安全;美东区数据传输较慢,但是支持的服务多。
在这里插入图片描述

如果你使用.com的AWS服务

非常好,欢迎了解Amazon Genomics CLI开源服务,除了 AWS GovCloud (美国) 和位于中国的区域之外,你可以在任何AWS 区域使用它。
集成了WDL、Nextflow、CWL 和 Snakemake等工作流语言,专为基因数据批量处理打造。
可以跟着【伯乐大典】基于Nextflow基因组测序的AWS Batch实验(上) 一步步在workshop中练习。 中国区也可以看这个视频,手把手教很详细,虽然不能用其他区的服务。

如果你恰好使用EU或者Ireland

那么再好不过了!你可以了解nextflow tower。繁复的构建不用操心了。
集成aws batch、HPC、Azure batch等环境,海量模板,一键启动,随时追踪,可视化,真乃神器也。
请添加图片描述

如果你使用.cn服务

恭喜你,天选之子!你只能靠自己!
当然,你还有贴心的nextflow官方文档可以参考哩!

开始使用
  1. 在 AWS 控制台中, 在您的 AWS Batch 服务中创建计算环境 (CE)。

    a. 如果您使用的是自定义 AMI,则必须在 CE 配置中指定 AMI ID
    b. 确保选择安装了 Docker 的 AMI(自定义或现有)
    c. 确保策略 AmazonS3FullAccess (授予对 S3 存储桶的访问权限)附加到为 CE 配置的实例角色
    d. 如果您计划使用 Amazon ECS 容器中的 Docker 映像,请确保策略AmazonEC2ContainerServiceforEC2Role 也附加到实例角色

  2. 在 AWS 控制台中,创建(至少)一个作业队列并将其绑定到计算环境。

  3. 在 AWS 控制台中,根据需要为存储桶目录(见下文)创建 S3 存储的存储桶,并为输入数据和结果创建其他存储桶。

  4. 确保管道进程使用容器指令指定一个或多个 Docker 容器 。

  5. 容器镜像需要发布在 Docker 注册表中,例如 Docker Hub、Quay 或 ECS 容器注册表,ECS Batch 可以访问这些注册表。

配置

配置管道时:

  1. 导入 nf-amazon插件
  2. 指定 AWS 批处理执行程序
  3. 使用队列指令指定一个或多个 AWS Batch 队列以执行
  4. 使用 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:
在这里插入图片描述

注意事项

  1. 中国区无法使用–resume功能,也就是断点重投。但是nextflow tower可以(泪奔)
  2. 学会用nextflow log来debug,即便如此很多时候也会不明不白地失败。
  3. 请注意超时问题。AWS 默认EC2实例运行周期1天,超时执行中断任务,这个可以修改。
  4. 用好nextflow report
    在这里插入图片描述
    在这里插入图片描述

下期预告?

nextflow的分享可以告一段落了。
这个系列还会有下期吗?你们还希望什么样的分享呢?如果工作流系列结束,我将可能分享Perl的学习笔记,也请多多交流哦。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值