DeepVariant の実行

DeepVariant は、ディープ ニューラル ネットワークを使用して次世代 DNA 配列データから遺伝的バリアントをコールする解析用パイプラインです。

このページでは、1 つの Compute Engine インスタンスを使用して Google Cloud で DeepVariant を実行する方法について説明します。

DeepVariant GitHub リポジトリには、より複雑な構成があります。たとえば、複数のインスタンスを使用して DeepVariant を実行できます。これらのバリエーションにより、処理速度の改善とコストの削減が実現します。

DeepVariant の実行は次の 3 つの段階で構成されています。

  1. 例の作成: DeepVariant では入力データを前処理し、データの例を内部 TensorFlow 形式で保存します。この段階は並行して実行でき、すべての入力シャードが独立して処理されます。

  2. バリアントの呼び出し: DeepVariant ではディープ ニューラル ネットワークを実行して例から推論を行い、内部の TensorFlow 形式を使用して共有ファイルに保存します。

  3. 後処理バリアント: DeepVariant では内部 TensorFlow 形式のバリアントを VCF ファイルまたは gVCF ファイルに変換します。この段階は 1 つのスレッドで実行されます。

このチュートリアルでは、これらの段階のすべてを 1 つのインスタンスで実行します。第 1 段階と第 2 段階では、複数のコアで並列化を利用できますが、第 3 段階は 1 つのスレッドで実行されるため、並列化を利用できません。

目標

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

  • Google Cloud で DeepVariant を実行する

費用

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

  • Compute Engine

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

始める前に

  1. Google アカウントにログインします。

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

  2. Cloud Console のプロジェクト セレクタページで、Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

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

  4. Compute Engine API を有効にします。

    API を有効にする

  5. Cloud SDK をインストールし、初期化します
  6. ヒント: コマンド プロンプトが必要な場合は、Google Cloud Shell を使用できます。Google Cloud Shell は、Google Cloud SDK がすでに含まれているコマンドライン環境であるため、インストールする必要はありません

Compute Engine インスタンスの作成

DeepVariant を実行する前に、DeepVariant を実行する Compute Engine インスタンスを作成する必要があります。Compute Engine で Linux 仮想マシン インスタンスを作成するには、Google Cloud Console または gcloud コマンドライン ツールを使用します。

Console

  1. Cloud Console で、[VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] をクリックします。
  3. インスタンスの [名前] を PROJECT_ID-deepvariant-run 形式で選択します。ここで、PROJECT_ID は Google Cloud プロジェクトの ID です。
  4. インスタンスの [リージョン] と [ゾーン] を選択します。特定の場所でインスタンスを実行する特別な理由がない限り、[リージョン] として us-central1 (Iowa)、[ゾーン] として us-central1-a を選択します。
  5. [マシンタイプ] メニューで、[n1-standard-64 (64 vCPU, 240 GB memory)] を選択します。
  6. [CPU プラットフォーム] メニューで、[Intel Skylake or later] を選択します。
  7. [ブートディスク] で [変更] をクリックし、ブートディスクの構成を始めます。
  8. [OS イメージ] タブで、[Google Drawfork Ubuntu 16.04 LTS] を選択します。[ブートディスクの種類] メニューで、[標準の永続ディスク] を選択します。[サイズ(GB)] フィールドで、「300」と入力します。[選択] をクリックします。
  9. [作成] をクリックしてインスタンスを作成します。

gcloud

gcloud compute instances create \
    PROJECT_ID-deepvariant-run \
    --project PROJECT_ID \
    --zone ZONE \
    --scopes "cloud-platform" \
    --image-project ubuntu-os-cloud \
    --image-family ubuntu-1604-lts \
    --machine-type n1-standard-64 \
    --min-cpu-platform "Intel Skylake" \
    --boot-disk-size=300GB

ここで

  • PROJECT_ID は Google Cloud プロジェクトの ID です。
  • ZONE は、インスタンスがデプロイされるゾーンです。ゾーンとは、インスタンスとそのリソースが存在するおおよその場所です。たとえば、us-west1-aus-west リージョン内のゾーンです。以前に gcloud config set compute/zone を使用してデフォルト ゾーンを設定した場合は、このフラグの値でデフォルト値がオーバーライドされます。

インスタンスが起動するまで、しばらくお待ちください。準備が完了すると、[VM インスタンス] ページに緑色のステータス アイコン付きで表示されます。

インスタンスに接続する

インスタンスに接続するには、Cloud Console または gcloud ツールを使用します。

Console

  1. Cloud Console で、[VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. 仮想マシンインスタンスのリストで、作成したインスタンスの行の SSH をクリックします。

gcloud

gcloud compute ssh PROJECT_ID-deepvariant-run --zone ZONE

DeepVariant の実行

作成した Compute Engine インスタンスに対して次の手順を行い、環境を構成して DeepVariant を実行します。

  1. 次のコマンドを実行して、Docker Community Edition(CE)をインストールします。

    sudo apt-get -qq -y install \
      apt-transport-https \
      ca-certificates \
      curl \
      gnupg-agent \
      software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository \
      "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) \
      stable"
    sudo apt-get -qq -y update
    sudo apt-get -qq -y install docker-ce
    
  2. 次のコマンドをコピーして貼り付け、DeepVariant 環境変数を構成します。

    BIN_VERSION="0.9.0"
    BASE="${HOME}/deepvariant-run"
    INPUT_DIR="${BASE}/input"
    REF="hs37d5.fa.gz"
    BAM="HG002_NIST_150bp_chr20_downsampled_30x.bam"
    OUTPUT_DIR="${BASE}/output"
    DATA_DIR="${INPUT_DIR}/data"
    OUTPUT_VCF="HG002.output.vcf.gz"
    OUTPUT_GVCF="HG002.output.g.vcf.gz"
    
  3. 入力データ ディレクトリと出力ディレクトリのローカル ディレクトリ構造を作成します。

    mkdir -p "${OUTPUT_DIR}"
    mkdir -p "${INPUT_DIR}"
    mkdir -p "${DATA_DIR}"
    
  4. このチュートリアルでは、公開されている HG002 ゲノムを、GRCh37 参照にマッピングされている 30x カバレッジで使用します。ただし、DeepVariant が 20 番染色体(chr20)でのみ実行されるように、DeepVariant の実行時に、--regions 20 フラグを追加して、ランタイムを高速化します。

    サンプルデータは Illumina シーケンシングを使用して作成されましたが、DeepVariant では以下の他の種類の入力データもサポートされています。

    • 全ゲノム(Illumina)(WGS)
    • Exome(Illumina)(WES)
    • 全ゲノム(PacBio)

    gsutil cp コマンドを使用して、入力テストデータを deepvariant Cloud Storage バケットから、前の手順で作成したインスタンスのディレクトリにコピーします。

    # Input BAM and BAI files:
    gsutil cp gs://deepvariant/performance-testdata/"${BAM}" "${DATA_DIR}"
    gsutil cp gs://deepvariant/performance-testdata/"${BAM}".bai "${DATA_DIR}"
    
    # GRCh37 reference FASTA file:
    gsutil cp gs://deepvariant/case-study-testdata/"${REF}"* "${DATA_DIR}"
    
  5. DeepVariant は、Container Registry 内の事前に構築された Docker イメージでステージングされたコンテナ化アプリケーションです。イメージを pull するには、次のコマンドを実行します。

    sudo docker pull gcr.io/deepvariant-docker/deepvariant:"${BIN_VERSION}"
    
  6. DeepVariant を起動するには、次のコマンドを実行します。コマンドの実行時間の合計は約 8 分です。

    sudo docker run \
        -v "${DATA_DIR}":"/input" \
        -v "${OUTPUT_DIR}:/output" \
        gcr.io/deepvariant-docker/deepvariant:"${BIN_VERSION}" \
        /opt/deepvariant/bin/run_deepvariant \
        --model_type=WGS \
        --ref="/input/${REF}" \
        --reads="/input/${BAM}" \
        --output_vcf=/output/${OUTPUT_VCF} \
        --output_gvcf=/output/${OUTPUT_GVCF} \
        --regions 20 \
        --num_shards=$(nproc)
    

    次の表に、コマンドに渡されるフラグを示します。

    フラグ 説明
    model_type DeepVariant では、さまざまな種類の入力データがサポートされます。このチュートリアルでは、全ゲノム配列(WSG)を使用します。
    ref 参照 FASTA ファイルの場所。
    reads 入力 BAM ファイルの場所。
    output_vcf 出力 VCF ファイルの場所。
    output_gvcf 出力 gVCF ファイルの場所。
    regions (オプション)処理する染色体領域のスペース区切りリスト。個々の要素は、chr20:10-20 または BED/BEDPE ファイルへのパスなど、リージョンのリテラルです。
    num_shards 並行して実行するシャードの数です。最適な結果を得るには、このフラグの値を、DeepVariant を実行するマシン上のコアの数に設定します。

    コマンドの実行が正常に開始されると、次のようなメッセージが出力されます。

    ***** Running the command:*****
    time seq 0 63 | parallel
    -k
    --line-buffer /opt/deepvariant/bin/make_examples
    --mode calling
    --ref "/input/hs37d5.fa.gz"
    --reads "/input/HG002_NIST_150bp_downsampled_30x.bam"
    --examples "/tmp/deepvariant_tmp_output/make_examples.tfrecord@64.gz"
    --regions "20"
    --gvcf "/tmp/deepvariant_tmp_output/gvcf.tfrecord@64.gz"
    --task {}
    
  7. DeepVariant が終了すると、次のファイルが deepvariant-run/output ディレクトリに出力されます。

    • HG002.output.g.vcf.gz
    • HG002.output.g.vcf.gz.tbi
    • HG002.output.vcf.gz
    • HG002.output.vcf.gz.tbi

    次のコマンドを実行して、出力ディレクトリ内のファイルを一覧表示し、すべての出力ファイルが表示されていることを確認します。

    ls $OUTPUT_DIR
    

費用とランタイムでの見積もり

次の表に、BAM ファイルで 30 倍の全ゲノムサンプルを使用して DeepVariant を実行した場合の、およそのランタイムと費用を示しています。これらの推定には、インスタンスの設定と Cloud Storage からのサンプルデータのダウンロードに必要な時間は含まれません。

この表は、プリエンプティブル VM と非プリエンプティブル VM の費用の見積もりと推定ランタイムを示します。推定ランタイムは、非プリエンプティブル VM の使用を前提としています。

プリエンプティブル VM は、通常の VM を使用する場合と比較して最大 80% の費用を削減します。ただし、このインスタンスは、他のタスクのリソースへのアクセスが必要な場合に、Compute Engine によって終了(プリエンプト)される可能性があります。さらに、プリエンプティブル VM はサービスレベル契約(SLA)の対象外となるため、ターンアラウンド タイムの保証が必要な場合は --preemptible フラグを使用しないでください。

プリエンプティブル VM を効果的に使用する方法については、Compute Engine のベスト プラクティスをご覧ください。

マシンタイプ 時間単位のランタイム 費用(非プリエンプティブル) 費用(プリエンプティブル)
n1-standard-8 19.7 $8.06 $2.16
n1-standard-16 11.3 $8.91 $2.14
n1-standard-32 7.25 $11.20 $2.54
n1-standard-64 5.65 $17.30 $3.78
n1-standard-96 4.52 $20.80 $4.48

クリーンアップ

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

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

プロジェクトの削除

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

プロジェクトを削除するには:

  1. Cloud Console で、プロジェクト ページに移動します。

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

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

次のステップ