基因组数据处理参考架构

本文档介绍了将 Cloud Life Sciences API 与其他 Google Cloud 产品结合使用,以通过不同的方法和工作流引擎执行基因组数据处理的参考架构。具体而言,本文档侧重于二级分析的比对与变体识别步骤,适用于生命科学组织中的生物信息学家、研究人员、研究 IT 团队以及其他技术专家。

Google Cloud 提供了一套灵活的 API 和服务,以及用于规模化运行经济实惠的二级分析解决方案的工具。二级分析包括但不限于过滤原始读取、比对和组合序列读取,以及针对已比对的读取进行质量检查和变体识别。

架构

下图演示了规模化处理基因组数据的步骤,并显示了在 Google Cloud 中执行的步骤。

使用 Google Cloud 规模化处理基因组数据。

如上图所示,基因组数据样本首先要进行初始分析,然后作为原始数据提取到 Google Cloud 以进行二级分析。然后,处理后的数据会进行三级分析,并生成报告(如 PDF),可供生物信息学家和其他技术专家从云端下载。

基因组数据处理参考架构组件

本文档包含有关使用 Cloud Life Sciences API 的详细信息,以及两个参考架构概览,其中概述了使用 API 执行基因组数据处理的不同方式。

使用 Cloud Life Sciences API

Cloud Life Sciences API 提供全代管式计算服务,此服务根据批量作业的资源要求提供最佳计算资源。该 API 为您提供了一种在 Docker 容器中运行的 Compute Engine 实例上创建、运行和监控命令行工具的方法。您可以将多个命令行工具整理成按可反映各步骤间依赖关系的特定顺序运行。Cloud Life Sciences API 包含 WorkflowsServiceV2Beta 服务,您可以使用该服务来运行工作流,例如由 Docker 容器组成的流水线。

Pipeline 对象包含一项或多项 Action 说明,以及一则描述运行此流水线所需云资源的 Resources 消息。每个操作都描述一次 Docker 容器执行,其中可包含一个或多个 command 对象Action 对象会按顺序运行,每个对象都会等到前一个对象退出再运行,除非前一个对象设置为在后台运行。有一些标志会影响每个 Action 对象的运行方式,以及退出状态会如何影响流水线中的操作(例如,Action 对象是否应该在后台运行,或者是否应该忽略退出状态)。作为流水线作者,您将创建一则 Resources 消息,用于描述运行流水线所需的云资源。

Resources 消息中的规范可以包括以下各项:

  • 虚拟机 (VM) 大小,包括自定义机器形状和可抢占性
  • 用于虚拟机分配的区域和地区
  • 网络选项(由于网络大小限制,网络选项对于大型处理项目非常重要)
  • 附加的加速器 (GPU)
  • 挂接的磁盘
  • 服务账号和范围

在通过 API 调用收到 Pipeline 对象时,Cloud Life Sciences API 会执行以下任务:

  1. 根据 Resources 消息内容创建 Compute Engine 虚拟机实例。
  2. 下载 Action 说明中指定的所有 Docker 映像。
  3. 以指定的映像和命令,将每个 Action 对象作为新的 Docker 容器运行。
  4. 删除 Compute Engine 虚拟机实例。

Action 说明中描述的一组典型任务可以包含以下内容:

  • 下载输入文件。
  • 运行命令。
  • 将日志复制到 Cloud Storage。
  • 上传输出文件。

Cloud Life Sciences API 利用 Google Cloud 的可扩缩高性能存储和处理能力以及抢占式虚拟机实例、GPU 和张量处理单元 (TPU),为数据分析提供安全且可扩缩的环境。这包括针对单个样本或联合数据集快速、轻松、经济高效地运行业界标准的二级分析框架(如 Genome Analysis Toolkit (GATK)DeepVariant)。

Cloud Life Sciences API 与 CromwellNextflowGalaxy 等开源工作流引擎集成。 此外,Nextflow 和 Galaxy 还通过与 Compute Engine 和 Cloud Storage 直接集成来支持在 Google Cloud 上执行计算。下图显示的参考架构包含 Cloud Life Sciences API 组件以及在 Google Cloud 中运行基因组二级分析流水线所需的其他服务。

此参考架构显示了在使用 Persistent Disk、Container-Optimized OS 和 GPU 的 Compute Engine 计算节点上运行的 Cloud Life Sciences API。

基因组数据处理:使用 Cromwell 运行 GATK 最佳做法工作流

您可以将 Cloud Life Sciences API 与工作流引擎配合使用来编排任务。在下面的示例中,我们使用 Cromwell 来执行二级分析,同时应用 GATK 最佳做法工作流程

Cromwell 是一个开源工作流管理系统,可在各种环境中运行,以安排、运行和管理工作流。Cromwell 会读取使用工作流说明语言 (WDL) 定义的工作流,并使用 Cloud Life Sciences API 运行该工作流中的各项任务。在这种情况下,Cromwell 服务器在 Compute Engine 虚拟机实例上运行,其中 Cloud SQL 服务器用于存储运营数据。然后,Cromwell 虚拟机运行所定义的每个任务,方式是对 Cloud Life Sciences API 进行 API 调用,为每个任务启动虚拟机实例,如 WDL 中配置的那样。

GATK 包含用于变体发现和基因分型的工具。GATK 最佳做法工作流程包括多个适用于特定使用场景的流水线。此示例侧重于生产工作流 PairedEndSingleSampleWf。该工作流包括数据预处理、要求种系单核苷酸多态性 (SNP) 的初始变体,以及针对单个样本的人类全基因组测序数据进行的 Indel(插入/删除)发现。

该工作流通过一个或多个 read group 来接受采用未映射 BAM (uBAM) 格式的人类全基因组配对端序列数据,并将 Hg38 参考基因组与 ALT 重叠群配合使用。输出包含 cram 文件、cram 索引、cram md5、GVCF(及相应的索引)、BQSR 报告以及多个汇总指标。所用样本是 NA12878 的降采样版本,此版本仅包含完整样本的 3 个 read group。工作流打包为一系列 WDL 文件,用于定义各个任务以及输入规范和通用选项。WDL 文件会为每个任务指定云端资源,例如每个虚拟机实例的 CPU 核心数和内存、要在每个虚拟机实例上安装的容器、要运行的命令以及输入和输出文件位置。此外,还有其他规范,比方说,步骤是否应在抢占式机器上运行以及重试 Action 对象的次数。

下图显示了用于执行基因组二级分析的典型架构,执行方式是使用 Cromwell 通过 Cloud Life Sciences API 来运行 GATK 最佳做法工作流(包括运行分析所需的步骤)。

使用 Cromwell 通过 Cloud Life Sciences API 运行 GATK 最佳做法。

该图显示了运行二级分析的以下步骤:

  1. 测序后,您将原始基本调用保存到本地存储或网络附加存储 (NAS),这些调用会在其中转换为 uBAM 文件。然后,您可以将这些 uBAM 文件转移到 Cloud Storage 存储分区。
  2. 您可以使用 Identity and Access Management (IAM) 进行身份验证以充当服务账号。
  3. 您将作业提交到在 Compute Engine 上运行的 Cromwell 服务器。

    该请求会经过 Identity-Aware Proxy(使用 Google Cloud 防火墙规则配置为允许访问 Virtual Private Cloud)。

  4. Cromwell 服务器从公共代码库中拉取 GATK 的工作流。

  5. Cromwell 服务器调用 Cloud Life Sciences API 以启动作业。

  6. Cloud Life Sciences API 从 GATK 公共代码库中拉取每个任务的容器。

  7. Cloud Life Sciences API 在 Compute Engine 上为每个任务启动虚拟机并在每个虚拟机上启动该容器。

  8. 虚拟机实例从 Cloud Storage 存储分区中检索输入文件。

  9. 虚拟机实例执行计算任务,然后将中间文件、日志文件和输出文件保存到 Cloud Storage 存储分区。

基因组数据处理:运行 DeepVariant

DeepVariant 是一种开源分析流水线,它使用深度神经网络从下一代 DNA 测序数据中检出基因变体。此分析流水线由 Google 内部的一个研究团队开发,并使用 TensorFlow 针对外显子组或基因组进行单核苷酸多态性 (SNP) 和 Indel(插入/删除)变体识别。DeepVariant 用于将已比对的测序读取转换为变体识别。

若要使用 DeepVariant,则需要在最高级别提供以下三项输入信息:

  • FASTA 格式的参考基因组及其相应的 .fai 索引文件(使用 Samtools faidx 命令生成)。
  • BAM 格式的已比对读取文件及其相应的索引文件 (.bai)。这些读取必须与提供的参考基因组对齐。
  • 用于变体识别的 DeepVariant 机器学习模型。

DeepVariant 的输出是 VCF 格式的所有变体识别的列表。DeepVariant 已与 TensorFlow 机器学习框架集成。

您可以在 Docker 容器或直接二进制文件中运行 DeepVariant,并且可以使用本地硬件或在云端运行 DeepVariant。DeepVariant 支持使用硬件加速器(如 GPU 和 TPU)。如 DeepVariant 快速入门指南中所述,您可以通过 Docker,只需使用一个命令即可从 Docker 容器运行 DeepVariant。对于 Google Cloud 上的生产使用场景,我们建议您将 DeepVariant 流程集成到工作流中,并从工作流引擎进行调用。

或者,您也可以使用 DeepVariant Runner,它使用 Cloud Life Sciences API 的方式类似于运行 DeepVariant 教程中所说明的方法。这样,您就可以使用基于 Docker 且针对费用和速度进行了优化的流水线规模化运行 DeepVariant。

下图展示了在 Google Cloud 上运行 DeepVariant 流水线的典型架构。

在 Google Cloud 上运行 DeepVariant 流水线的架构。

以下是运行 DeepVariant 的步骤,如上图所示:

  1. 从样本创建已映射的 DNA 读取后,您可以将这些 BAM 文件转移到 Cloud Storage 存储分区。
  2. 您可以使用 IAM 进行身份验证以充当服务账号。
  3. 您将运行 DeepVariant 来调用 Cloud Life Sciences API 以启动作业。
  4. Cloud Life Sciences API 从公共代码库中拉取每个任务的 DeepVariant 容器。
  5. Cloud Life Sciences API 在 Compute Engine 上为每个任务启动虚拟机并在每个虚拟机上启动该容器。
  6. 虚拟机实例从 Cloud Storage 存储分区中检索输入文件。
  7. 虚拟机实例执行计算任务,然后将中间文件、日志文件和输出文件保存到 Cloud Storage 存储分区。

数据治理

本文档中介绍的架构侧重于基因组数据分析的特定组件。对于包含人类基因组数据的生产集成,您可能需要根据所在管辖区的要求和最佳做法在 Google Cloud 中配置其他组件。

Google Cloud 提供了一种封装了 Google Cloud 最佳做法的端到端架构,可帮助满足医疗保健安全、隐私与合规性方面的需求。Cloud Healthcare Data Protection Toolkit 包含建议为医疗保健数据采用的许多安全和隐私最佳做法,如配置合适的访问权限、维护审核日志和监控可疑活动。如需详细了解这些功能以及 Google Cloud 如何帮助保护客户数据,请参阅将数据托付给 Google Cloud 白皮书。

数据驻留

对于有数据驻留要求的组织,请参阅服务专用条款:查看 Google Cloud 的数据驻留承诺文档中的“一般服务”部分,其中重点介绍了可用于帮助配置用户环境以支持此类要求的工具和控制措施。

组织政策

如需限制资源在项目中的物理位置,您可以设置组织政策来包含资源位置限制条件。如需查看支持的服务列表,请参阅资源位置支持的服务

Google Cloud 资源标识符

在本文档中,数据驻留承诺不适用于资源标识符、特性或其他数据标签。您有责任确保这些标识符、特性或其他数据标签(例如文件名)中不公开任何敏感数据。

Cloud Life Sciences API 地区和区域

进行 Cloud Life Sciences API 调用时,必须指定将发送请求的地区。以下示例展示了在 Google Cloud 项目 foo 和地区 us-central1 中运行流水线的端点 URI:

v2beta/projects/foo/locations/us-central1/workflows:runPipeline

为此操作保存的任何元数据(包括容器映像名称、输入和输出文件名以及在请求中发送到 Cloud Life Sciences API 的其他信息)都将保存在此地区中。

当 Cloud Life Sciences API 启动 Compute Engine 虚拟机实例时,API 调用必须包含要启动虚拟机实例的地区或区域。您可以配置一个或多个地区或区域以限制虚拟机的位置。虚拟机实例、Compute Engine 中的静态数据以及永久性磁盘都会保留在指定地区中。适用于 Compute Engine 实例的功能(例如 CPU 平台、机器类型、SSD 和 GPU)因地区和区域而异。因此,请务必在地区或区域中提供所需资源,然后再将这些资源限制为仅供该地区或区域使用。

如需了解详情,请参阅 Compute Engine 数据驻留详情和条款

Google Cloud Storage

您可以在 Cloud Storage 中存储输入和输出文件、临时工作文件以及永久性磁盘快照。Cloud Storage 存储桶中的静态数据会保留在您配置存储桶时选择的区域、双区域或多区域中。如需了解详情,请参阅 Cloud Storage 存储桶位置的当前列表

如需优化可用性、性能和效率,您可以使用 Cloud Storage 双区域。如果您选择此选项,则存储桶中的数据会异步复制到两个特定区域,从而使数据跨区域冗余。如需了解详情,请参阅 Cloud Storage 双区域

为了提升性能及满足数据驻留要求,请尽可能为 Cloud Storage、Compute Engine 和 Life Sciences API 使用同一地区。

如需了解详情,请参阅 Cloud Storage 数据驻留详情和条款

后续步骤