运行 SentieonDNAseq

本页面介绍了如何将 SentieonDNAseq 作为 Google Cloud (GCP) 流水线运行。 该流水线符合 GATK Best Practices 3.7 版的结果:比对、排序、删除重复数据、BQSR 和变体检出。 输入格式包括 fastq 文件或经过比对和排序的 BAM 文件。

目标

完成本教程后,您将了解如何执行以下任务:

  • 使用 Sentieon DNAseq 在 Google Cloud 上运行流水线
  • 为不同的 Sentieon DNAseq 使用情形编写配置文件

费用

本教程使用 Google Cloud 的计费组件,包括:

  • Compute Engine
  • Cloud Storage

请使用价格计算器根据您的预计使用情况来估算费用。Cloud Platform 新用户可能有资格免费试用

准备工作

  1. 安装 Python 2.7+。如需详细了解如何设置您的 Python 开发环境,例如在您的系统上安装 pip,请参阅 Python 开发环境设置指南
  2. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  3. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  4. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  5. 启用 Cloud Life Sciences, Compute Engine, and Cloud Storage API。

    启用 API

  6. 安装并初始化 Cloud SDK
  7. 更新并安装 gcloud 组件:
    gcloud components update &&
    gcloud components install beta
  8. 安装 git 以下载所需的文件。

    下载 git

  9. 默认情况下,Compute Engine 已配置适当的资源配额以防止意外错误使用。 通过增加配额,您可以同时启动更多虚拟机,从而提高吞吐量并缩短周转时间。

    为了在本教程中获得最佳结果,您应该在项目默认配额的基础上申请更多配额。以下列表提供了增加配额的建议,以及运行本教程所需的最低配额。在 us-central1 区域申请配额:

    • CPU 数:64
    • 永久性磁盘(标准,单位为 GB):375

    您可以将其他配额申请字段留空以保留当前配额。

Sentieon 评估许可

使用此流水线时,Sentieon 会自动向您授予其软件的两周免费评估许可,以供您将其与 Google Cloud 配合使用。要获取许可,请在配置流水线时在 EMAIL 字段中输入您的电子邮件地址。如需了解如何设置此字段,请参阅了解输入格式

要在评估许可到期后继续使用 Sentieon,请联系 support@sentieon.com

设置本地环境并安装必要工具

  1. 如果没有 virtualenv,请使用 pip 安装一个:

    pip install virtualenv
    
  2. 创建一个独立的 Python 环境,并安装依赖项:

    virtualenv env
    source env/bin/activate
    pip install --upgrade \
        pyyaml \
        google-api-python-client \
        google-auth \
        google-cloud-storage \
        google-auth-httplib2
    

下载流水线脚本

下载示例文件并设置当前目录:

git clone -b v0.2.3 https://github.com/sentieon/sentieon-google-genomics.git
cd sentieon-google-genomics

了解输入格式

流水线使用 JSON 文件中指定的参数作为其输入。

在您下载的代码库中,有一个 examples/example.json 文件包含以下内容:

{
  "FQ1": "gs://sentieon-test/pipeline_test/inputs/test1_1.fastq.gz",
  "FQ2": "gs://sentieon-test/pipeline_test/inputs/test1_2.fastq.gz",
  "REF": "gs://sentieon-test/pipeline_test/reference/hs37d5.fa",
  "OUTPUT_BUCKET": "gs://BUCKET",
  "ZONES": "us-central1-a,us-central1-b,us-central1-c,us-central1-f",
  "PROJECT_ID": "PROJECT_ID"
  "EMAIL": "YOUR_EMAIL_HERE"
}

下表介绍了该文件中的 JSON 键:

JSON 键 说明
FQ1 fastq 输入文件中的第一对 read。
FQ2 fastq 输入文件中的第二对 read。
BAM BAM 输入文件(如果适用)。
REF 参考基因组。如果设置此键,则假定存在 fastq/BAM 索引文件。
OUTPUT_BUCKET 用于存储流水线数据输出的存储分区和目录。
ZONES 用于工作器节点的 Google Cloud 地区的逗号分隔列表。
PROJECT_ID 您的 Google Cloud 项目 ID。
EMAIL 您的电子邮件地址。

运行流水线

  1. sentieon-google-genomics 目录中,修改 examples/example.json 文件,用您的 Google Cloud 项目中的相关资源替换 BUCKETPROJECT_ID 变量:

    {
      "FQ1": "gs://sentieon-test/pipeline_test/inputs/test1_1.fastq.gz",
      "FQ2": "gs://sentieon-test/pipeline_test/inputs/test1_2.fastq.gz",
      "REF": "gs://sentieon-test/pipeline_test/reference/hs37d5.fa",
      "OUTPUT_BUCKET": "gs://BUCKET",
      "ZONES": "us-central1-a,us-central1-b,us-central1-c,us-central1-f",
      "PROJECT_ID": "PROJECT_ID",
      "EMAIL": "EMAIL_ADDRESS"
    }
    
  2. 运行以下命令,在由配置文件中的输入标识的小型测试数据集上执行 DNAseq 流水线。默认情况下,脚本会在启动流水线之前验证输入文件是否存在于您的 Cloud Storage 存储分区中。

    python runner/sentieon_runner.py examples/example.json
    

如果指定了多次抢占式操作,则只要实例被抢占,流水线就会重新启动。流水线运行完成后,会向控制台输出一条消息,指明流水线运行成功还是失败。

在大多数情况下,您可以使用以下配置优化周转时间和费用。该配置将运行 30 倍深度的人类基因组,费用约为 $1.25,大约需要 2 个小时。一个人类全外显子组将花费约 $0.35,大约需要 45 分钟。这两项估算值均基于流水线未被抢占的实例得出。

{
  "FQ1": "gs://my-bucket/sample1_1.fastq.gz",
  "FQ2": "gs://my-bucket/sample1_2.fastq.gz",
  "REF": "gs://sentieon-test/pipeline_test/reference/hs37d5.fa",
  "OUTPUT_BUCKET": "gs://BUCKET",
  "BQSR_SITES": "gs://sentieon-test/pipeline_test/reference/Mills_and_1000G_gold_standard.indels.b37.vcf.gz,gs://sentieon-test/pipeline_test/reference/1000G_phase1.indels.b37.vcf.gz,gs://sentieon-test/pipeline_test/reference/dbsnp_138.b37.vcf.gz",
  "DBSNP": "gs://sentieon-test/pipeline_test/reference/dbsnp_138.b37.vcf.gz",
  "PREEMPTIBLE_TRIES": "2",
  "NONPREEMPTIBLE_TRY": true,
  "STREAM_INPUT": "True",
  "ZONES": "us-central1-a,us-central1-b,us-central1-c,us-central1-f",
  "PROJECT_ID": "PROJECT_ID",
  "EMAIL": "EMAIL_ADDRESS"
}

其他选项

您可以使用以下选项自定义流水线。

输入文件选项

此流水线支持将多个以逗号分隔的 fastq 文件作为输入:

"FQ1": "gs://my-bucket/s1_prep1_1.fastq.gz,gs://my-bucket/s1_prep2_1.fastq.gz",
"FQ2": "gs://my-bucket/s1_prep1_2.fastq.gz,gs://my-bucket/s1_prep2_2.fastq.gz",

它还接受使用 BAM JSON 键,将以逗号分隔的 BAM 文件作为输入。BAM 文件中的 read 不与参考基因组进行比对。 相反,它们将从流水线的删除重复数据阶段开始。

"BAM": "gs://my-bucket/s1_prep1.bam,gs://my-bucket/s1_prep2.bam"

全外显子组数据或大型数据集配置

推荐配置中的设置针对人类全外显子组样本进行了优化,测序平均覆盖率为 30 倍深度。对于比标准全外显子组数据集小得多或大得多的文件,您可以增加或减少实例的可用资源。要获得大型数据集的最佳结果,请使用以下设置:

{
  "FQ1": "gs://sentieon-test/pipeline_test/inputs/test1_1.fastq.gz",
  "FQ2": "gs://sentieon-test/pipeline_test/inputs/test1_2.fastq.gz",
  "REF": "gs://sentieon-test/pipeline_test/reference/hs37d5.fa",
  "OUTPUT_BUCKET": "gs://BUCKET",
  "ZONES": "us-central1-a,us-central1-b,us-central1-c,us-central1-f",
  "PROJECT_ID": "PROJECT_ID",
  "EMAIL": "EMAIL_ADDRESS",
  "DISK_SIZE": 600,
  "MACHINE_TYPE": "n1-highcpu-64",
  "CPU_PLATFORM": "Intel Broadwell"
}

下表提供了所用设置的说明:

JSON 键 说明
DISK_SIZE 工作器节点可用的 SSD 存储空间。
MACHINE_TYPE 要使用的 Compute Engine 虚拟机的类型。默认为 n1-standard-1
CPU_PLATFORM 所请求的 CPU 平台。必须是有效的 Compute Engine CPU 平台名称(例如“Intel Skylake”)。

抢占式实例

您可以通过设置 PREEMPTIBLE_TRIES JSON 键在流水线中使用抢占式实例

默认情况下,如果抢占式操作次数用尽或 NONPREEMPTIBLE_TRY JSON 键设置为 0,则运行程序会尝试使用标准实例运行流水线。您可以通过将 NONPREEMPTIBLE_TRY 键设置为 false 来停止此行为。

"PREEMPTIBLE_TRIES": 2,
"NONPREEMPTIBLE_TRY": false

下表提供了所用设置的说明:

JSON 键 说明
PREEMPTIBLE_TRIES 使用抢占式实例尝试运行流水线的次数。
NONPREEMPTIBLE_TRY 确定在抢占式操作次数用尽后,是否尝试使用标准实例运行流水线。

Read group

当使用 Sentieon BWA 将 fastq 文件与参考基因组进行比对时,需要添加 read group。您可以提供多个以逗号分隔的 read group。 Read group 的数量必须与 fastq 输入文件的数量相匹配。 默认 read group 为 @RG\\tID:read-group\\tSM:sample-name\\tPL:ILLUMINA。 要更改 read group,请设置 JSON 输入文件中的 READGROUP 键:

"READGROUP": "@RG\\tID:my-rgid-1\\tSM:my-sm\\tPL:ILLUMINA,@RG\\tID:my-rgid-2\\tSM:my-sm\\tPL:ILLUMINA"

下表提供了所用设置的说明:

JSON 键 说明
READGROUP 包含样本元数据的 read group。

如需详细了解 read group,请参阅 Broad Institute 文档

从 Cloud Storage 流式输入

您可以从 Cloud Storage 流式传输 fastq 文件,这可以减少流水线的总运行时间。要从 Cloud Storage 流式传输 fastq 文件,请将 STREAM_INPUT JSON 键设置为 True

"STREAM_INPUT": "True"

下表提供了所用设置的说明:

JSON 键 说明
STREAM_INPUT 确定是否直接从 Cloud Storage 流式传输 fastq 文件。

重复标记

默认情况下,流水线会移除 BAM 文件中的重复 read。您可以设置 DEDUP JSON 键来更改此行为:

"DEDUP": "markdup"

下表提供了所用设置的说明:

JSON 键 说明
DEDUP 重复标记行为。
有效值:
  • 默认配置会移除标记为重复的 read。
  • markdup 标记重复 read,但不会移除它们。
  • nodup 会跳过重复标记。

碱基质量分数重新校准 (BQSR) 和已知位点

BSQR 需要基因变异的已知位点。默认行为是跳过流水线的这个阶段。但是,您可以通过 BQSR_SITES JSON 键提供已知位点来启用 BSQR。如果提供了已知位点,则可以使用 DBSNP 文件在变体检出期间注释输出变体。

"BQSR_SITES": "gs://my-bucket/reference/Mills_and_1000G_gold_standard.indels.b37.vcf.gz,gs://my-bucket/reference/1000G_phase1.indels.b37.vcf.gz,gs://my-bucket/reference/dbsnp_138.b37.vcf.gz",
"DBSNP": "gs://sentieon-test/pipeline_test/reference/dbsnp_138.b37.vcf.gz"

下表提供了所用设置的说明:

JSON 键 说明
BSQR_SITES 启用 BSQR 并使用提供文件的逗号分隔列表作为已知位点。
DBSNP 变体调用期间使用的 dbSNP 文件。

间隔

对于某些应用情形,例如靶向测序或全外显子组测序,您可能只需用到基因组的某一部分。在这些情况下,提供目标间隔文件可以加速处理并减少低质量的脱靶变体检出。您可以通过 INTERVAL_FILEINTERVAL JSON 键使用间隔。

"INTERVAL_FILE": "gs://my-bucket/capture-targets.bed",
"INTERVAL": "9:80331190-80646365"

下表提供了所用设置的说明:

JSON 键 说明
INTERVAL_FILE 包含要处理的基因组间隔的文件。
INTERVAL 包含要处理的一个基因组间隔的字符串。

输出选项

默认情况下,流水线会生成预处理的 BAM、质量控制指标和变体检出。您可以使用 NO_BAM_OUTPUTNO_METRICSNO_HAPLOTYPER JSON 键停用这些输出。如果未提供 NO_HAPLOTYPER 参数或将其设为 NULL,则可以使用 GVCF_OUTPUT JSON 键以 gVCF 格式而不是 VCF 格式生成变体检出。

"NO_BAM_OUTPUT": "true",
"NO_METRICS": "true",
"NO_HAPLOTYPER": "true",
"GVCF_OUTPUT": "true",

下表提供了所用设置的说明:

JSON 键 说明
NO_BAM_OUTPUT 确定是否输出预处理的 BAM 文件。
NO_METRICS 确定是否输出文件指标。
NO_HAPLOTYPER 确定是否输出变体调用。
GVCF_OUTPUT 确定是否以 gVCF 格式输出变体检出。

Sentieon DNAseq 版本

通过指定 SENTIEON_VERSION JSON 键,您可以将任何最新版本的 Sentieon DNAseq 软件包与 Cloud Life Sciences API 结合使用,如下所示:

"SENTIEON_VERSION": "201808.08"

以下列出了有效版本:

  • 201711.01
  • 201711.02
  • 201711.03
  • 201711.04
  • 201711.05
  • 201808
  • 201808.01
  • 201808.03
  • 201808.05
  • 201808.06
  • 201808.07
  • 201808.08

后续更新版本将继续支持与 Cloud Life Sciences API 结合使用。

清理

完成本教程后,您可以清理您在 Google Cloud 上创建的资源,以免这些资源将来产生费用。以下部分介绍如何删除或关闭这些资源。

删除项目

避免支付费用的最简单方法是删除您为本教程使用的项目。

要删除项目,请执行以下操作:

  1. 在 Cloud Console 中,转到“项目”页面。

    转到“项目”页面

  2. 在项目列表中,选择要删除的项目,然后点击删除项目选择项目名称旁边的复选框后,点击“删除项目”
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤

  • 如果您对此流水线有疑问或遇到问题,请发送电子邮件至 support@sentieon.com