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


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

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

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

目标

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

  • 在 Cloud Shell 中安装 Nextflow。
  • 创建 Cloud Storage 存储桶。
  • 配置 Nextflow 流水线。
  • 在 Batch 上使用 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 角色,并且已经拥有本教程中所需的所有权限。

    为了确保作业的服务账号具备必要的 允许 Batch 服务代理创建和访问 Batch 作业的资源。 请让管理员向该作业的服务账号授予 以下 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 项目

      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

查看流水线的输出

流水线运行完毕后,会存储输出文件、日志、错误或 results/qc_report.html文件内的临时文件 Cloud Storage 的“WORK_DIRECTORY”文件夹 存储桶。

要在 您的 Cloud Storage 的“WORK_DIRECTORY”文件夹 您可以使用 Google Cloud 控制台或命令行。

控制台

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

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

    进入“存储桶”

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

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

工作流运行的每个单独任务都有一个文件夹。每个文件夹 包含已运行的命令、输出文件和临时文件 创建 Deployment 清单

gcloud

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

gcloud storage ls gs://BUCKET_NAME/WORK_DIRECTORY

替换以下内容:

  • BUCKET_NAME:您要创建的存储桶的名称, 您在前面步骤中创建的地址。

  • WORK_DIRECTORY:您在 Cloud Storage 中指定的目录 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:用于存储 您在前面步骤中指定的流水线输出文件。

后续步骤