Sentieon DNAseq パイプラインの実行

このページでは、Sentieon DNAseq を Google Cloud Platform(GCP)のパイプラインとして実行する方法について説明します。このパイプラインでは、GATK Best Practices バージョン 3.7(整列、並べ替え、重複削除、BQSR、バリアント呼び出し)の結果と一致させます。入力形式は、fastq ファイル、整列されソートされた BAM ファイルなどです。

目標

このチュートリアルを完了すると、以下のことが行えます。

  • Sentieon DNAseq を使用して GCP 上でパイプラインを実行する
  • さまざまな Sentieon DNAseq ユースケース用の構成ファイルを作成する

費用

このチュートリアルでは、以下を含む GCP の課金対象となるコンポーネントを使用しています。

  • Compute Engine
  • Cloud Storage

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。 Cloud Platform を初めて使用する方は、無料トライアルをご利用いただけます。

始める前に

  1. Python 2.7 以上をインストールします。システムへの pip のインストール方法など、Python 開発環境の設定の詳細については、Python 開発環境の設定ガイドをご覧ください。
  2. Google アカウントにログインします。

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

  3. Google Cloud Platform プロジェクトを選択または作成します。

    [リソースの管理] ページに移動

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

    課金を有効にする方法について

  5. Cloud Genomics、Compute Engine、Cloud Storage API を有効にします。

    APIを有効にする

  6. Cloud SDK をインストールして初期化します。
  7. gcloud コンポーネントを更新し、インストールします。
    gcloud components update &&
    gcloud components install アルファ版
  8. git をインストールして、必要なファイルをダウンロードします。

    git のダウンロード

  9. デフォルトで Compute Engine にはリソースの割り当てがあり、不注意による使用を防ぎます。割り当てを増やすことで、より多くの仮想マシンを同時に起動し、スループットを向上させ、ターンアラウンド タイムを短縮できます。

    このチュートリアルでベストな結果を得るには、プロジェクトのデフォルトより多くの追加の割り当てをリクエストする必要があります。割り当ての増加に関する推奨事項は、チュートリアルを実行するために必要な最小限の割り当てとともに、次のリストに記載されています。us-central1 リージョンで割り当てリクエストを作成します。

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

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

評価ライセンスを取得する

GCP 評価ライセンスをリクエストするには、GCP プロジェクト ID を使用して support@sentieon.com 宛にメールを送信します。プロジェクト ID と番号は、Google Cloud Platform Console ダッシュボードで確認できます。

ローカル環境を設定し、前提条件をインストールする

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

次の表で、ファイル内の JSON キーについて説明します。

JSON キー 説明
FQ1 入力 fastq ファイルの最初の読み込みペア。
FQ2 入力 fastq ファイルの 2 番目の読み込みペア。
BAM 入力 BAM ファイル(該当する場合)。
REF 参照ゲノム。設定すると、fastq / BAM インデックス ファイルが存在するものとみなされます。
OUTPUT_BUCKET パイプラインから出力されたデータを格納するためのバケットとディレクトリ。
ZONES ワーカーノードに使用する GCP ゾーンのカンマ区切りのリスト。
PROJECT_ID GCP プロジェクトの ID。

パイプラインの実行

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

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

その他のオプション

次の追加オプションを使用してパイプラインをカスタマイズできます。

入力ファイル オプション

パイプラインでは、複数の 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",
  "DISK_SIZE": 600,
  "MIN_CPU": 64,
  "MIN_RAM_GB": 100
}

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

JSON キー 説明
DISK_SIZE ワーカーノードで使用可能な SSD 領域。
MIN_CPU CPU コアの最小数。
MIN_RAM_GB 最小 RAM(GB 単位)。

プリエンプティブ インスタンス

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 形式で出力するかどうかを指定します。

クリーンアップ

このチュートリアルで使用するリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

Sentieon DNAseq パイプラインを実行するチュートリアルが終了したら、Google Cloud Platform で作成したリソースについて料金が発生しないように、リソースをクリーンアップできます。以下のセクションでは、このようなリソースを削除または無効にする方法を説明します。

プロジェクトの削除

課金を停止する最も簡単な方法は、チュートリアル用に使用したプロジェクトを削除することです。

プロジェクトを削除する手順は次のとおりです。

  1. GCP Console で [プロジェクト] ページに移動します。

    [プロジェクト] ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[プロジェクトの削除] をクリックします。 プロジェクト名の横にあるチェックボックスを選択し、[プロジェクトの削除] をクリックする
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ

  • パイプラインに関する質問がある場合や問題が発生した場合は、support@sentieon.com までメールでご連絡ください。
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...