Skip to content

awslabs/aws-parallelcluster-pipeline-gatk-quick-start

GATK Best Practice on AWS

一、方案简介

相关基本介绍请参考Parallelcluster官方博客.

1、现状及方案概述

当前基因行业的分析平台大致分为三类,分别是单机、HPC集群、K8S集群,占比最的的仍然是HPC集群这种形式。 对于本地HPC环境来说可能会遇到以下问题:

  • 系统部署周期长(从采购到部署长达数个月),难以跟上业务发展的速度
  • 集群运维难度较大,对于业务时效性要求较高的场景,难以做到高可用
  • 数据的生命周期管理有很大的挑战,且成本难以控制
  • 开发人员被各种集群问题所困扰,运维人员的精力被日常清理工作所消耗,难以集中做集群的优化工作

对于传统云上HPC环境来说可能会遇到以下问题:

  • 资源难以精确控制,计算节点存在资源浪费
  • 运维部署周期长,一般需要1~2周,运维难度较大,环境不便复制迁移

除此之外还有很多问题会困扰大家,为了帮助克服、解决这些问题,我们提供了一套简单易用的方案,可一键创建完整的HPC集群,除此之外通过参数配置的调整,还可以以用户习惯的架构来精细化调整HPC环境,通过模版的复制,也可以最小化的成本实现本地的测试、迁移以及云上的集群环境复制,以此来帮助生命科学领域的用户去构建安全、可靠、高效、低成本的HPC集群,将开发、运维人员的精力从琐事中解放,专注在更有创造力的事情上,借助云的优势,可以打造更灵活、高可用的系统架构。

本方案的核心是parallelcluster,它自带的jobwatcher和配套服务,可以每分钟监控SGE、Slurm或Torque作业情况,以决定节点的何时进行弹性伸缩,这样可以直接带来30%左右成本的节约,具体工作原理参见 Parallelcluster用户文档——作业处理流程.


2、解决的需求和问题

1)、生产与测试系统未隔离,各产品线共用一套集群

2)、本地集群无容灾,一旦受损(宕机、环境变动)、停止(如物业计划维护、断网断电等)将影响所有产品业务

3)、计算存储资源量估算困难,部署周期长,业务线变动较大

4)、开发迭代混乱,集群环境大家共同维护,难以做到版本控制和环境复现!

5)、行业其他问题:

①、项目管理靠人工跟踪,无信息化系统或信息化程度低
②、信息环节无法做到成本核算
③、数据量大且数据复杂,难以做到生命周期管理

二、详细方案说明

1、集群解决方案

集群解决方案

2、端到端的基因大数据分析、归档、交付方案

端到端的基因大数据分析、归档、交付方案

三、迁移部署流程

建议迁移部署方法

四、测试文档

1、10分钟集群部署

下述文档示例会启动一个完整的HPC集群,包括主节点、计算节点、共享存储以及预装SGE作业调度系统,AMI为预装GATK相关软件的镜像,包括bwa,Samtools,gatk4等,镜像snapshot为GATK公开数据集,包括数据库及测试文件,启动后挂载到/genomics目录下。

注:测试以宁夏区为例,本测试需要账号有多个资源的创建权限(初期测试可用admin access)

1)、 安装pip及awscli并配置必要信息

请登录console,并点击我的安全凭证

创建访问密钥并记录aws_access_key_id及aws_secret_access_key





#pip安装
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

#awscli安装
sudo pip install awscli

#aws配置
#根据具体情况设置AK,SK,所在区域及输出格式
aws configure 

2)、安装pcluster

sudo pip install aws-parallelcluster

3)、pcluster安装及配置

①、相关准备
  • VPC及子网

请搜索VPC服务,并选择你要启动集群的VPC

记录vpc_id,master_subnet_id






  • EC2访问密钥

搜索EC2服务,并进入EC2服务页面选择密钥对,创建新密钥并下载密钥文件

记录key_name为创建密钥对输入的名字


②、配置pcluster config(可参考官方博客)
#创建配置模版,会提示无配置,请忽略错误信息
pcluster create new

#编辑配置文档
vim ~/.parallelcluster/config

#复制下述配置信息,粘贴到配置文档~/.parallelcluster/config
[aws]
aws_region_name = cn-northwest-1

[global]
update_check = true
sanity_check = true
cluster_template = GATK-pipeline

[aliases]
ssh = ssh {CFN_USER}@{MASTER_IP} {ARGS}

[cluster GATK-pipeline]
base_os = alinux
custom_ami = ami-056169db492793d02 #根据需要修改
vpc_settings = public
scheduler = sge
key_name = ZHY_key  #需要修改
compute_instance_type = m5.xlarge
master_instance_type = m5.xlarge
compute_root_volume_size = 50
master_root_volume_size = 50
ebs_settings = genomes
scaling_settings = GATK-ASG
initial_queue_size = 1
max_queue_size = 4
maintain_initial_size = false
extra_json = { "cluster" : { "cfn_scheduler_slots" : "cores" } }

[vpc public]
vpc_id = vpc-a817aac5  #需要修改
master_subnet_id = subnet-26fcc86cd  #需要修改

[ebs genomes]
shared_dir = genomes
ebs_snapshot_id = snap-040c71fd2bb5d4236 #根据需要修改
volume_type = gp2
volume_size =  1024

[scaling GATK-ASG]
scaledown_idletime = 5

4)、启动集群

pcluster create GATK-pipeline

5)、登陆集群master节点

#根据集群启动后的反馈信息输入
#ssh -i <private key_name> <username>@<public ip>
ssh -i <private key_name> ec2-user@master-public-ip #alinux
ssh -i <private key_name> ubuntu@master-public-ip #ubuntu
ssh -i <private key_name> centos@master-public-ip #centos

6)、投递任务

默认预装SGE作业调度系统,示例sge调度系统投递命令参考如下:

echo "sleep 180" | qsub
echo "sh run.sh" | qsub -l vf=2G,s_core=1 -q all.q
for((i=1;i<=10;i++));do echo "sh /genomes/temp/run.sh $i" | qsub -cwd -S /bin/bash -l vf=2G,s_core=1 -q all.q;done

示例slurm调度系统投递命令参考如下:

sbatch -n 4 run.sh  #4核,可根据需要修改
squeue #查看队列情况
sinfo #查看节点情况
scancel jobid #取消任务

示例pbs调度系统投递命令参考如下:

echo "sleep 180" | qsub
echo "sh run.sh" | qsub -l nodes=1,walltime=2:00:00,mem=2gb -q batch
for((i=1;i<=10;i++));do echo "sh /genomes/temp/run.sh $i" | qsub -l nodes=1,walltime=2:00:00,mem=2gb -q batch;done

2、AMI

制作自定义ami请参考官方文档

3、DEMO

五、参考资料:

系统 版本号 pcluster版本 AMI ID 更新描述 地域 是否公开 可用性 备注
alinux 0.2 2.5.1 ami-08872563ba80e5a5a 基础软件环境AMI + Golang环境 + goofys BJS
alinux 0.2 2.5.1 ami-0c699afa91eb1d073 基础软件环境AMI + Golang环境 + goofys ZHY
alinux 0.2 2.4.1 ami-005d4f6437dca2d6d 基础软件环境AMI + Golang环境 + goofys BJS
alinux 0.2 2.4.1 ami-056169db492793d02 基础软件环境AMI + Golang环境 + goofys ZHY
  • 镜像版本迭代
系统 版本号 pcluster版本 AMI ID 更新描述 地域 是否公开 可用性 备注
alinux-base 2.3.1 ami-0e58e06d5b958ccb6 基础镜像 BJS
ubuntu-base 16.04 2.3.1 ami-0a9c1879e6583621e 基础镜像 BJS
alinux 0.1 2.3.1 ami-0997595bce93c6e7b 基础软件环境AMI BJS
alinux 0.2 2.3.1 ami-0cad4e9d804bd9c15 基础软件环境AMI + Golang环境 + goofys;修复pip问题并安装awscli;修复goofys无法挂载问题,安装fuse依赖 BJS
alinux 0.2 2.4.0 ami-0b876120ec98b9a7c 基础软件环境AMI BJS
ubuntu 0.1 2.3.1 ami-097d3bf901991372e 基础软件环境AMI BJS
ubuntu 0.2 2.3.1 ami-041e4a3bce09385b9 修改ubuntu默认shell(dash)为bash BJS 不再更新
ubuntu 0.2-a 2.3.1 ami-026882b56146cdc1b 基础软件环境AMI + Golang环境 + goofys BJS
alinux 0.1 2.3.1 ami-007f6ed61542ae017 基础软件环境AMI ZHY
alinux 0.2 2.4.0 ami-005db8a58ebd4e9a4 基础软件环境AMI ZHY
ubuntu 0.1 2.3.1 ami-0a1d99c2c70e3f86c 基础软件环境AMI ZHY
ubuntu 0.2 2.3.1 ami-071aa7a2927cc02a8 修改ubuntu默认shell(dash)为bash ZHY 不再更新
ubuntu 0.2-a 2.3.1 ami-015f3a018cc98b6cc 基础软件环境AMI + Golang环境 + goofys ZHY
  • 参考文件EBS快照迭代:
名称 版本号 snap ID 大小 更新描述 地域
gatk-reference v0.1 0.1 snap-09c16ac9809cf4359 100G 基础环境快照,包含hg19参考基因组 BJS
gatk-reference v0.2 0.2 snap-06f5e874571e44510 100G 增加hg38及GATK数据集 BJS
gatk-reference-v0.3 0.3 snap-08a4b975a2f40736f 1T 增加测试文件及GATK-TEST-DATA BJS
gatk-reference-v0.3 0.3 snap-040c71fd2bb5d4236 1T 增加测试文件及GATK-TEST-DATA ZHY

六、FAQ

1、节点启动速度较慢问题

  • 由于在启动过程中需要从海外拉取镜像,拉取超时/失败时会倒是节点启动失败,若客户镜像由官方镜像迭代而来,大部分软件已经在本地预装好了,可通过pre_install来跳过拉取安装的过程,提高节点启动速度,讲下述代码保存为sh脚本文件,并上传至S3或web服务器,保证启动时可通过s3 api/http方式获取。
#!/bin/bash
sudo sed -i "s/include_recipe 'aws-parallelcluster::base_install'/#include_recipe 'aws-parallelcluster::base_install'/g" /etc/chef/cookbooks/aws-parallelcluster/recipes/sge_install.rb /etc/chef/cookbooks/aws-parallelcluster/recipes/base_config.rb
  • 修改启动配置config,在cluster标签下添加pre_install及pre_install_args参数,示例如下:
[cluster GATK-pipeline]
base_os = alinux
...
compute_instance_type = c5.2xlarge
master_instance_type = t2.medium
compute_root_volume_size = 50
master_root_volume_size = 50
initial_queue_size = 1
max_queue_size = 2
maintain_initial_size = false
pre_install = http://xxxxx.s3.cn-north-1.amazonaws.com.cn/pre_install.sh
pre_install_args = "NONE"

About

No description, website, or topics provided.

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published