亚马逊AWS官方博客

TCGA 公开数据集在亚马逊云科技中国区最佳实践

TCGA 介绍

癌症基因组图谱(TCGA)是一个具有里程碑意义的癌症基因组学项目,产生了近20,000个原发肿瘤的分子数据,并匹配了来自33种癌症类型的11328名患者的正常组织。TCGA包括生殖和体细胞变异、拷贝数变异、mRNA表达、miRNA表达、DNA甲基化和大多数患者的蛋白表达。除了分子数据,它还包含了组织良好的元数据,包括种族、性别、民族和临床信息。这种丰富的癌症基因组数据来源使世界各地的研究人员有了突破性的发现,并发表了数百篇论文。TCGA由美国国家癌症研究所(NCI)的基因组数据共享(GDC)主办,并使用Gen3框架来存储和访问数据。此外,所有TCGA数据也存储在AWS云上,作为开放数据注册的一部分。可用数据有两层:开放层和控制访问层。开放层包括去识别的临床和人口统计学数据、基因表达、体细胞变异、拷贝数和表观遗传数据。受控制的访问层包括原始序列数据,以及其他信息,如生殖系变异。本文将系统的介绍TCGA的数据集的检索以及云端数据下载的方法,以便提供后续云上相关数据分析。

TCGA 亚马逊云现状

AWS 上 TCGA 的数据源存放在美东(us-east-1)区域,任何人都可以访问 TCGA 开放层的数据,在 AWS 的 Global 区域使用这些数据进行分析下载速度很快,也建议直接在 Global 区域直接使用该数据集。但是国内很多个人或者企业需要把数据下载到 AWS 中国区或者本地 IDC 来进行分析,如果直接用 TCGA 官网的下载工具,速度非常慢,以下是使用 TCGA 官网的下载工具(gdc-client)下载的数据:

本地下载,网络带宽(300Mb)

一直卡住不动

AWS 宁夏区域一台 EC2(c5.xlarge)下载

下载 2.4G 数据花了 8492s,平均速度为:0.28MB/s

AWS 美东(us-east-1)一台 EC2(c6i.xlarge)下载

下载 2.4G 数据花了 134s,平均速度为:18MB/s

从以上的测试数据可以看出,如果使用 TCGA 官网的下载工具,直接在美东(us-east-1)区域使用是最快且最方便的,平均 18MB/s 的速度还可以接受,下载 1T 的数据需要 16 小时,如果在宁夏区域,下载 1T 的数据则需要 1040 小时。据我们测试所知,使用 awscli 工具从宁夏区域下载美东(us-east-1)S3 的数据,平均速度是可以达到 50MB/s,如下图:

根据以上测试的结果,如果想要在中国区使用 TCGA 的数据集,则我们可以在中国区的 ec2 上通过 awscli 下载数据。但是直接查看 TCGA 数据集的 S3 存储桶,目录是杂乱无章的,如下:

所以我们需要使用一些方法来找到我们需要的数据的下载路径,仔细研究 tcga-2-open 桶的文件结构和 TCGA 官网的资料后,发现是有关联关系的,具体详见以下步骤:

架构图

使用方式

1、检索TCGA数据

TCGA 数据集大小大概有 2.5PB,一般我们不会把整个数据集都下载,我们会先从 TCGA 的官网上查看到我们需要数据的 mainfest 文件,使用官网的下载工具也是要输入这个 mainfest 文件,怎么找到 mainfest 文件具体操作如下:

打开 TCGA 官网:https://portal.gdc.cancer.gov/

找到 Repository 目录:

以白血病(AML)为例,下载与白血病相关的miRNA数据。
首先点击上图的Repository进入数据检索界面,你看到的界面如下:

在 File栏目下,选择Experiment Strategy 的miRNA-Seq 还有Data Type 的miRNA Expression Quantification;然后在Case栏目下选择Primary Site 中的Blood和Bone Marrow,和Disease Type 的Acute Myeloid Leukemia,这时候你会看到界面变成下面这样了:

下载后的 mainfest 文件内容大概如下:

mainfest 文件包含了 id、filename、md5、size、state 字段,通过 id 我们可以找到我们需要下载的路径,通过以下的 python 脚本可以自动生成一个下载的 shell 脚本文件:

import sys
import os
import json

BASE_PATH = os.path.split(os.path.realpath(__file__))[0]
FILE_NAME = None
if len(sys.argv) != 2:
    print('Please input mainfest filename.')
    sys.exit()

else:
    FILE_NAME = os.path.join(BASE_PATH, sys.argv[1])

DOWNLOAD_FILE = 'tcga_download.sh'
S3_PREFIX = 's3://tcga-2-open/'

def prepare_download_url():

    download_urls = list()
    try:
        with open(FILE_NAME) as f:
            for line in f.readlines():
                infos = line.split()
                file_id = infos[0]
                if file_id == 'id':
                    continue
                s3_path = S3_PREFIX + file_id
                download_url = 'aws s3 sync --no-sign-request %s %s' % (
                    s3_path, file_id)
                download_urls.append(download_url)

    except Exception as e:
        print(e)

    return download_urls

def create_download_file():
    download_urls = prepare_download_url()

    # If file exist, delete it first.
    if os.path.exists(DOWNLOAD_FILE):
        print('Download file exists, delete it.')
        os.remove(DOWNLOAD_FILE)

    # Create the file.
    with open(DOWNLOAD_FILE, 'w') as f:
        # Write the head in file.
        f.write('#!/bin/bash')
        f.write('\\n')
        for du in download_urls:
            f.write(du)
            f.write('\\n')

if __name__ == '__main__':
    create_download_file()

新建一个 python 文件,把以上的内容复制到文件里,再将 mainfest 文件放到跟该文件同级目录,例如我的 python 文件名为:alias-s3-transfer.py,则在目录下执行以下命令

python alias-s3-transfer.py mainfest.txt

执行完后在相同的目录下会生成 tcga_download.sh 文件。

2、下载 TCGA 数据

由于是跨不同的 AWS 账号体系下载,我们需要将数据先从 us-east-1 的存储桶下载到中国区的 EC2 上的本地存储,然后再将数据上传到中国区的 S3 存储桶,我们这里以宁夏区作为例子。

下载数据到 EC2 本地存储

登陆到宁夏区的一台 EC2 后,EC2 需要预先安装 awscli 工具,安装步骤参考

https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/getting-started-install.html

设置 awscli 配置信息

aws configure

AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]: us-east-1
Default output format [None]:

新建存放数据的文件夹

mkdir tcga-data
cd tcga-data

将上一步骤的 tcga_download.sh 文件上传到新建的目录下,为了尽可能充分利用 EC2 的网络带宽,提高下载速度,我们采用并行下载的方式,使用 GNU parallel 工具,安装 GNU parallel 工具,Amazon Linux 2 安装如下:

sudo amazon-linux-extras install epel -y
sudo yum install nload sysstat parallel -y

并行下载文件,采用后台运行的方式

nohup time parallel --jobs 6 < tcga_download.sh > tcga.download.log 2>&1 &

下载完跟 TCGA 官网提供的下载工具目录一致,如下:

3、上传数据到宁夏区 S3 存储桶

上传数据前需要先配置好 awscli 宁夏区域访问 S3 存储桶的信息,具体的配置信息参考:

https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/cli-configure-quickstart.html

配置完成后执行以下命令文件夹上传到 S3 存储桶,如下:

cd ..
aws s3 sync tcga-data s3://ami-temp/

结果如下:

到这里整个下载过程就完成了,如果我们下载的数据集比较多的话则可以把 tcga_download.sh 文件的内容分割成几个小的文件,再开多一些 EC2 进行下载,下载完成后就可以使用云上算力进行定制化分析了。

本篇作者

陈恩泽

亚马逊云科技公共事业部解决方案架构师,负责HPC 生物信息软硬件架构设计及优化工作。2010年加入深圳华大基因研究院,从事华大信息化改造研发相关工作,包含了从样品接收到上机测序整个流程的信息化,提高了生产效率及降低生产事故。2015年开始接触云计算,领导研发 BGIOnline 信息分析云计算平台,完成了20000+的高深度 WGS 分析,在降低WGS成本的同时又将分析时间缩短到24小时以内,该平台荣获英特尔基因云计算方案最佳实践Bio-IT奖。

方康

卡内基梅隆大学计算机硕士,现任大中华地区亚马逊医疗&生命科学行业解决方案架构师。在加入亚马逊之前就职于华大基因,任职首席云架构师,负责开发和维护基因组学领域云计算平台, 为全球合作伙伴提供基因组学数据管理,转化和分析方案。同时致力于基因组学数据管理与分析, HPC(高性能计算集群)与异构计算,工作流语言,数据转化与压缩和生命科学数据的合规与安全等领域的应用。