Batch で Nextflow パイプラインを実行してジョブをオーケストレートする


このチュートリアルでは、Batch で Nextflow のパイプラインを実行する方法について説明します。具体的には、RNA-Seq を使用して短いリードデータからゲノムの特徴を定量化するサンプル ライフ サイエンス パイプラインを実行します。

このチュートリアルは、Batch で Nextflow を使用する Batch ユーザーを対象としています。

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. Google Cloud CLI をインストールします。
  3. gcloud CLI を初期化するには:

    gcloud init
  4. Google Cloud プロジェクトを作成または選択します

    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、実際の Google Cloud プロジェクト名に置き換えます。

  5. Google Cloud プロジェクトで課金が有効になっていることを確認します

  6. Batch, Cloud Storage, Compute Engine, and Logging API を有効にします。

    gcloud services enable batch.googleapis.comcompute.googleapis.comlogging.googleapis.comstorage.googleapis.com
  7. Google Cloud CLI をインストールします。
  8. gcloud CLI を初期化するには:

    gcloud init
  9. Google Cloud プロジェクトを作成または選択します

    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、実際の Google Cloud プロジェクト名に置き換えます。

  10. Google Cloud プロジェクトで課金が有効になっていることを確認します

  11. Batch, Cloud Storage, Compute Engine, and Logging API を有効にします。

    gcloud services enable batch.googleapis.comcompute.googleapis.comlogging.googleapis.comstorage.googleapis.com
  12. プロジェクトに、このチュートリアルで必要な権限を含むサービス アカウントが 1 つ以上設定されていることを確認します。

    各ジョブには、Batch サービス エージェントがジョブの実行に必要なリソースを作成してアクセスできるサービス アカウントが必要です。このチュートリアルでは、ジョブのサービス アカウントは Compute Engine のデフォルトのサービス アカウントです。

    Compute Engine のデフォルト サービス アカウントに Batch サービス エージェントが Batch ジョブのリソースを作成およびアクセスするために必要な権限を付与するには、Compute Engine のデフォルト サービス アカウントに次の IAM ロールを付与するように管理者に依頼してください。

    ロールの付与の詳細については、アクセスの管理をご覧ください。

    管理者は、カスタムロールや他の事前定義ロールを使用して、Compute Engine のデフォルト サービス アカウントに必要な権限を付与することもできます。

  13. このチュートリアルで必要な権限があることを確認します。

    このチュートリアルを完了するために必要な権限を取得するには、管理者に次の IAM ロールを付与するよう依頼してください。

  14. 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 バケットを作成する

Nextflow パイプラインから一時的な作業ファイルと出力ファイルを保存する Cloud Storage バケットを作成するには、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/...

gsutil

gsutil ツールを使用して Cloud Storage バケットを作成するには、gsutil mb コマンドを使用します。

gsutil mb gs://BUCKET_NAME

BUCKET_NAME はバケットのグローバルに一意の名前に置き換えます。

リクエストが成功すると、出力は次のようになります。

Creating gs://BUCKET_NAME/...

Nextflow を構成する

Batch で実行する Nextflow パイプラインを構成するには、コマンドラインで次の手順を行います。

  1. サンプル パイプライン リポジトリのクローンを作成します。

    git clone https://github.com/nextflow-io/rnaseq-nf.git
    
  2. rnaseq-nf フォルダに移動します。

    cd rnaseq-nf
    
  3. nextflow.config ファイルを開きます。

    nano nextflow.config
    

    このファイルには次のセクションが含まれています。

    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  = 'us-central1'
    }
    ...
    
  4. gcb セクションで、次の操作を行います。

    1. BUCKET_NAME を前の手順で作成した Cloud Storage バケットの名前に置き換えます。

    2. WORK_DIRECTORY は、パイプラインがログと出力の保存に使用できる新しいフォルダの名前に置き換えます。

      たとえば、「workDir」と入力します。

    3. google.region フィールドの後に google.project = 'PROJECT_ID' 行を追加します。ここで、PROJECT_ID は、現在の Google Cloud プロジェクトのプロジェクト ID です。

  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 ファイルで指定したディレクトリ。

出力には、パイプラインが実行するタスクごとにフォルダが表示されます。各フォルダには、実行されたコマンド、出力ファイル、パイプラインによって作成された一時ファイルが格納されます。

gsutil

gsutil ツールを使用してパイプラインの出力ファイルを確認するには、gsutil ls コマンドを使用します。

gsutil 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 フォルダとすべての出力ファイルを削除するには、--recursive フラグで gcloud storage rm コマンドを実行します。

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

以下を置き換えます。

  • BUCKET_NAME: 前の手順で指定したバケットの名前。

  • WORK_DIRECTORY: 前の手順で指定したパイプライン出力ファイルを保存するディレクトリ。

gsutil

gsutil ツールを使用して Cloud Storage バケットから WORK_DIRECTORY フォルダとすべての出力ファイルを削除するには、-m オプションと -r オプションのある gsutil rm コマンドを使用します。

gsutil -m rm -r gs://BUCKET_NAME/WORK_DIRECTORY

以下を置き換えます。

  • BUCKET_NAME: 前の手順で指定したバケットの名前。

  • WORK_DIRECTORY: 前の手順で指定したパイプライン出力ファイルを保存するディレクトリ。

次のステップ