Sentieon DNAseq の実行

このページでは、Sentieon DNAseq を 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 以上をインストールします。pip のシステムへのインストールなど、Python 開発環境の設定について詳しくは、Python 開発環境のセットアップ ガイドをご覧ください。
  2. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  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 リージョンで割り当てリクエストを作成します。

    • CPUs: 64
    • Persistent Disk Standard(GB): 375

    他の割り当てリクエスト フィールドは空のままにして、現在の割り当てを維持してもかまいません。

Sentieon 評価ライセンス

このパイプラインを使用すると、Google Cloud で使用するソフトウェアの無料の 2 週間の評価ライセンスが自動的に付与されます。ライセンスを受け取るには、パイプラインの構成時にメールアドレスを 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 ファイルの最初の読み込みペア。
FQ2 入力 fastq ファイルの 2 番目の読み込みペア。
BAM 入力 BAM ファイル(該当する場合)。
REF 参照ゲノム。設定すると、fastq / BAM インデックス ファイルが存在するものとみなされます。
OUTPUT_BUCKET パイプラインから出力されたデータを格納するためのバケットとディレクトリ。
ZONES ワーカーノードに使用する Google Cloud ゾーンのカンマ区切りのリスト。
PROJECT_ID Google Cloud プロジェクト ID。
EMAIL メールアドレス。

パイプラインの実行

  1. sentieon-google-genomics ディレクトリで examples/example.json ファイルを編集して、BUCKET 変数と PROJECT_ID 変数を Google Cloud プロジェクトにある該当するリソースに置き換えます。

    {
      "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
    

複数のプリエンプティブル試行を指定した場合、そのインスタンスがプリエンプトされるたびにパイプラインが再起動します。パイプラインが終了すると、パイプラインが成功したか失敗したかを示すメッセージがコンソールに出力されます。

多くの場合、次の構成を使用するとターンアラウンド タイムとコストを最適化できます。この構成では、約 $1.25 のコストで 30 倍量のヒトゲノムが処理され、所要時間は約 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 ファイルの読み込みは参照ゲノムに整列されません。代わりに、パイプラインのデータ重複排除ステージで開始されます。

"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 プリエンプティブル試行が失敗した後、標準インスタンスでパイプラインを実行するかどうかを指定します。

リードグループ

リードグループは、Sentieon BWA を使用して fastq ファイルを参照ゲノムと同調する際に追加されます。複数のリードグループをカンマで区切って指定できます。リードグループの数は入力 fastq ファイルの数と一致させる必要があります。デフォルトのリードグループは @RG\\tID:read-group\\tSM:sample-name\\tPL:ILLUMINA です。リードグループを変更するには、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 サンプル メタデータを含むリードグループ。

リードグループの詳細については、Broad Institute のドキュメントをご覧ください。

Cloud Storage からのストリーミング入力

Cloud Storage から fastq ファイルをストリーミング入力できます。これにより、パイプラインの合計実行時間を短縮できます。Cloud Storage から fastq ファイルをストリーミング入力するには、次のように JSON キー STREAM_INPUTTrue に設定します。

"STREAM_INPUT": "True"

次の表で、使用されている設定について説明します。

JSON キー 説明
STREAM_INPUT Cloud Storage から fastq ファイルを直接ストリーミング入力するかどうかを指定します。

重複マーキング

デフォルトでは、パイプラインで BAM ファイルからの重複している読み取りは削除されます。JSON キー DEDUP を設定することで、この動作を変更できます。

"DEDUP": "markdup"

次の表で、使用されている設定について説明します。

JSON キー 説明
DEDUP 重複マーキングの動作。
有効な値:
  • デフォルト構成では、重複としてマークされている読み取りは削除されます。
  • markdup を指定すると、重複はマークされますが、削除はされません。
  • nodup を指定すると、重複マーキングがスキップされます。

ベース品質スコアの再キャリブレーション(BQSR)および既知のサイト

BSQR には、遺伝的変異の既知のサイトが必要です。デフォルトの動作では、パイプラインのこの段階はスキップされます。ただし、既知のサイトに JSON キー BQSR_SITES を指定することで、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 ファイル。

間隔

ターゲット配列または全エクソーム配列のような用途では、ゲノムの一部のみが対象となります。そのような場合、ターゲット間隔のファイルを指定することで、処理の高速化と低品質のオフターゲットのバリアント呼び出しの削減が可能になります。間隔を使用するには、JSON キー INTERVAL_FILE および INTERVAL を指定します。

"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 の場合、JSON キー GVCF_OUTPUT を使用して VCF 形式ではなく gVCF 形式でバリアント呼び出しを生成できます。

"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 DNAseq ソフトウェア パッケージの最新バージョンは、次のように SENTIEON_VERSION JSON キーを指定すると、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 までメールでご連絡ください。