在 Batch 上运行 Nextflow 流水线以编排作业


本教程介绍了如何在批处理作业中运行 Nextflow 流水线。具体而言,本教程将运行 Nextflow 中的示例 rnaseq-nf 生命科学流水线,该流水线使用 RNA-Seq 对短读取数据中的基因组特征进行量化。

本教程面向希望将 Nextflow 与批处理服务搭配使用且已了解批处理服务的用户。

Nextflow 是一款用于编排生物信息学工作流的开源软件。

目标

在本教程结束后,您将了解如何执行以下操作:

  • 在 Cloud Shell 中安装 Nextflow。
  • 创建 Cloud Storage 存储桶。
  • 配置 Nextflow 流水线。
  • 在批处理上使用 Nextflow 运行示例流水线。
  • 查看流水线的输出。
  • 请执行以下任一操作来清理数据,以免产生额外费用:
    • 删除项目。
    • 删除各个资源。

费用

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

  • Batch
  • Cloud Storage

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

如果您及时完成本教程中的所有步骤(包括清理),那么在此期间所创建资源的费用通常不会超过 1 美元。

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Batch, Cloud Storage, Compute Engine, and Logging APIs:

    gcloud services enable batch.googleapis.com compute.googleapis.com logging.googleapis.com storage.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  10. Make sure that billing is enabled for your Google Cloud project.

  11. Enable the Batch, Cloud Storage, Compute Engine, and Logging APIs:

    gcloud services enable batch.googleapis.com compute.googleapis.com logging.googleapis.com storage.googleapis.com
  12. 确保您的项目具有具有有效网络配置的虚拟私有云 (VPC) 网络,以便在本教程中使用。

    本教程假定您使用的是 default 网络。默认情况下, Google Cloud 资源使用 default 网络,该网络可提供本教程所需的网络访问权限。

  13. 确保您的项目至少有一个服务账号,该账号具有运行本教程中批处理作业所需的权限。

    默认情况下,作业使用 Compute Engine 默认服务账号,该账号会自动被授予“Editor”(roles/editor)IAM 角色,并且已经拥有本教程所需的所有权限。

    为了确保作业的服务账号具有必要的权限,以允许批处理服务代理创建和访问批处理作业的资源,请让您的管理员为作业的服务账号授予以下 IAM 角色:

    如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

    您的管理员也可以通过自定义角色或其他预定义角色向作业的服务账号授予所需的权限。

  14. 确保您拥有本教程所需的权限。

    如需获得完成本教程所需的权限,请让您的管理员为您授予以下 IAM 角色:

  15. 安装 Nextflow:

    curl -s -L https://github.com/nextflow-io/nextflow/releases/download/v23.04.1/nextflow | bash
    

    输出应类似如下所示:

    N E X T F L O W
    version 23.04.1 build 5866
    created 15-04-2023 06:51 UTC
    cite doi:10.1038/nbt.3820
    http://nextflow.io
    
    Nextflow installation completed. Please note:
    - the executable file `nextflow` has been created in the folder: ...
    - you may complete the installation by moving it to a directory in your $PATH
    

创建 Cloud Storage 存储桶

如需创建 Cloud Storage 存储分区以存储 Nextflow 流水线中的临时工作和输出文件,请使用 Google Cloud 控制台或命令行。

控制台

如需使用 Google Cloud 控制台创建 Cloud Storage 存储分区,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往存储桶页面。

    进入“存储桶”

  2. 点击 创建

  3. 创建存储分区页面上,为存储分区输入一个全局唯一的名称

  4. 点击创建

  5. 系统将禁止公开访问窗口中,点击确认

gcloud

如需使用 Google Cloud CLI 创建 Cloud Storage 存储分区,请使用 gcloud storage buckets create 命令

gcloud storage buckets create gs://BUCKET_NAME

BUCKET_NAME 替换为存储分区的全局唯一名称

如果请求成功,输出应类似于以下内容:

Creating gs://BUCKET_NAME/...
   ```

配置 Nextflow

如需将 Nextflow 流水线配置为在 Batch 上运行,请在命令行中按照以下步骤操作:

  1. 克隆示例流水线代码库:

    git clone https://github.com/nextflow-io/rnaseq-nf.git
    
  2. 转到 rnaseq-nf 文件夹:

    cd rnaseq-nf
    
  3. 打开 nextflow.config 文件:

    nano nextflow.config
    

    该文件应包含以下 gcb 部分:

    gcb {
      params.transcriptome = 'gs://rnaseq-nf/data/ggal/transcript.fa'
      params.reads = 'gs://rnaseq-nf/data/ggal/gut_{1,2}.fq'
      params.multiqc = 'gs://rnaseq-nf/multiqc'
      process.executor = 'google-batch'
      process.container = 'quay.io/nextflow/rnaseq-nf:v1.1'
      workDir = 'gs://BUCKET_NAME/WORK_DIRECTORY'
      google.region  = 'REGION'
    }
    
  4. gcb 部分中,执行以下操作:

    1. BUCKET_NAME 替换为您在上一步中创建的 Cloud Storage 存储分区的名称。

    2. WORK_DIRECTORY 替换为流水线可以用来存储日志和输出的新文件夹的名称。

      例如,输入 workDir

    3. REGION 替换为要使用的区域。

      例如,输入 us-central1

    4. google.region 字段后面,添加以下字段:

      1. 添加 google.project 字段:

        google.project = 'PROJECT_ID'
        

        PROJECT_ID 替换为当前 Google Cloud 项目的项目 ID。

      2. 如果您不使用 Compute Engine 默认服务账号作为作业的服务账号,请添加 google.batch.serviceAccountEmail 字段:

        google.batch.serviceAccountEmail = 'SERVICE_ACCOUNT_EMAIL'
        

        SERVICE_ACCOUNT_EMAIL 替换为您为本教程准备的作业服务账号的电子邮件地址。

  5. 如需保存所做的修改,请执行以下操作:

    1. Control+S 键。

    2. 输入 Y

    3. Enter 键。

运行流水线

使用命令行运行示例 Nextflow 流水线:

../nextflow run nextflow-io/rnaseq-nf -profile gcb

流水线会使用您在前面步骤中提供的设置运行小型数据集。此操作最多可能需要 10 分钟才能完成。

流水线运行完毕后,输出应类似于以下内容:

N E X T F L O W  ~  version 23.04.1
Launching `https://github.com/nextflow-io/rnaseq-nf` [crazy_curry] DSL2 - revision: 88b8ef803a [master]
 R N A S E Q - N F   P I P E L I N E
 ===================================
 transcriptome: gs://rnaseq-nf/data/ggal/transcript.fa
 reads        : gs://rnaseq-nf/data/ggal/gut_{1,2}.fq
 outdir       : results

Uploading local `bin` scripts folder to gs://example-bucket/workdir/tmp/53/2847f2b832456a88a8e4cd44eec00a/bin
executor >  google-batch (4)
[67/71b856] process > RNASEQ:INDEX (transcript)     [100%] 1 of 1 ✔
[0c/2c79c6] process > RNASEQ:FASTQC (FASTQC on gut) [100%] 1 of 1 ✔
[a9/571723] process > RNASEQ:QUANT (gut)            [100%] 1 of 1 ✔
[9a/1f0dd4] process > MULTIQC                       [100%] 1 of 1 ✔

Done! Open the following report in your browser --> results/multiqc_report.html

Completed at: 20-Apr-2023 15:44:55
Duration    : 10m 13s
CPU hours   : (a few seconds)
Succeeded   : 4

查看流水线的输出

流水线运行完成后,会将输出文件、日志、错误或临时文件存储在 Cloud Storage 存储分区的 WORK_DIRECTORY 文件夹中的 results/qc_report.html 文件中。

如需在 Cloud Storage 存储分区的 WORK_DIRECTORY 文件夹中查看流水线的输出文件,您可以使用 Google Cloud 控制台或命令行。

控制台

如需使用 Google Cloud 控制台检查流水线的输出文件,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往存储桶页面。

    进入“存储桶”

  2. 名称列中,点击您在上一步中创建的存储分区的名称。

  3. 存储分区详情页面上,打开 WORK_DIRECTORY 文件夹。

工作流运行的每个单独任务都有一个文件夹。每个文件夹都包含运行过的命令、输出文件以及流水线创建的临时文件。

gcloud

如需使用 gcloud CLI 检查流水线的输出文件,请使用 gcloud storage ls 命令

gcloud storage ls gs://BUCKET_NAME/WORK_DIRECTORY

替换以下内容:

  • BUCKET_NAME:您在上一步中创建的存储分区的名称。

  • WORK_DIRECTORY:您在 nextflow.config 文件中指定的目录。

输出会列出流水线运行的每个单独任务对应的文件夹。每个文件夹都包含运行过的命令、输出文件以及流水线创建的临时文件。

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

若要避免产生费用,最简单的方法是删除当前项目。

如需删除当前项目,请使用 Google Cloud 控制台或 gcloud CLI。

控制台

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

gcloud

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

删除各个资源

如果您想继续使用当前项目,请删除本教程中使用的各个资源。

删除存储桶

如果您不再需要在本教程中使用的存储分区,请删除该存储分区

删除存储分区中的输出文件

流水线运行完毕后,它会在 Cloud Storage 存储分区的 WORK_DIRECTORY 文件夹中创建并存储输出文件。

如需降低当前Google Cloud 账号的 Cloud Storage 费用,您可以使用 Google Cloud 控制台或命令行删除包含流水线输出文件的文件夹。

控制台

如需使用 Google Cloud 控制台从 Cloud Storage 存储分区中删除 WORK_DIRECTORY 文件夹及所有输出文件,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往存储桶页面。

    进入“存储桶”

  2. 名称列中,点击您在上一步中创建的存储分区的名称。

  3. 存储分区详情页面上,选择包含 WORK_DIRECTORY 文件夹的行,然后执行以下操作:

    1. 点击删除

    2. 如需确认,请输入 DELETE,然后点击删除

gcloud

如需使用 gcloud CLI 从 Cloud Storage 存储分区中删除 WORK_DIRECTORY 文件夹以及所有输出文件,请将 gcloud storage rm 命令--recursive 标志结合使用。

gcloud storage rm gs://BUCKET_NAME/WORK_DIRECTORY \
      --recursive

替换以下内容:

  • BUCKET_NAME:您在上一步中指定的存储分区的名称。

  • WORK_DIRECTORY:用于存储您在前面的步骤中指定的流水线输出文件的目录。

后续步骤