运行 Sentieon® DNASeq®

本页面介绍了如何将 Sentieon® DNASeq® 作为 Google Cloud 流水线运行以进行二级基因组分析。该流水线与 Genome Analysis Toolkit (GATK) 最佳做法版本 3.7 中的以下结果相匹配:

  • 一致性
  • 排序
  • 重复移除
  • 碱基质量分数重新校准 (BQSR)
  • 识别变体

输入格式包含以下内容:

  • fastq 文件
  • 经过比对和排序的 BAM 文件

目标

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

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

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

  • Compute Engine
  • Cloud Storage

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

须知事项

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

    转到“项目选择器”

  4. 确保您的 Google Cloud 项目已启用结算功能

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

    启用 API

  6. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  7. 确保您的 Google Cloud 项目已启用结算功能

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

    启用 API

  9. 安装 Google Cloud CLI。
  10. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  11. 更新并安装 gcloud 组件:
    gcloud components update
    gcloud components install beta
  12. 安装 git 以下载所需的文件。

    下载 git

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

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

    • CPU:64
    • Persistent Disk Standard (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 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"
  "REQUESTER_PROJECT": "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。
REQUESTER_PROJECT 从请求者付款存储分区转移数据时结算的项目。
EMAIL 您的电子邮件地址。

运行流水线

  1. sentieon-google-genomics 目录中,修改 examples/example.json 文件,用您的 Google Cloud 项目中的相关资源替换 BUCKETREQUESTER_PROJECTEMAILPROJECT_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",
      "REQUESTER_PROJECT": "PROJECT_ID",
      "EMAIL": "EMAIL_ADDRESS"
    }
    
  2. 在您的环境中设置 PROJECT_ID 变量:

    export PROJECT_ID=PROJECT_ID
    

  3. 运行以下命令,以在由配置文件中的输入标识的小型测试数据集上执行 DNASeq® 流水线。默认情况下,脚本会在启动流水线之前验证输入文件是否存在于您的 Cloud Storage 存储桶中。

    python runner/sentieon_runner.py --requester_project $PROJECT_ID 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 文件作为输入的配置:

"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,请参阅 read group

从 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

清理

完成本教程后,您可以清理您在 Google Cloud 上创建的资源,避免日后再为这些资源支付费用。以下部分介绍如何删除或关闭这些资源。

删除项目

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

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

  1. 在 Google Cloud 控制台中,转到“项目”页面。

    转到“项目”页面

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

后续步骤

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