遺伝子データ処理のリファレンス アーキテクチャ

このドキュメントでは、Cloud Life Sciences API と他の Google Cloud サービスを使用して、さまざまな手法とワークフロー エンジンで遺伝子データ処理を行うためのリファレンス アーキテクチャについて説明します。具体的には、このドキュメントは二次解析のアラインメントとバリアント呼び出しの手順を中心に説明しており、ライフ サイエンス組織に属する生物情報科学者、研究者、リサーチ IT チームなどといった技術の専門家を対象としています。

Google Cloud では、費用対効果に優れた二次解析ソリューションを大規模に実行するための、柔軟な API とサービスのセットおよびツールを提供します。二次解析には、未加工のリードのフィルタリング、配列リードの整列および結合、整列されたリードに対する QA とバリアント呼び出しが含まれますが、これらに限定されません。

アーキテクチャ

次の図は、遺伝子データを大規模に処理する手順と、その中でどの手順が Google Cloud で実行されるかを示しています。

Google Cloud で遺伝子データを大規模に処理する。

上の図に示すように、最初に遺伝子データのサンプルに対して一次解析が行われ、その後、元データとして Google Cloud に取り込まれ、二次解析が行われます。その後、処理されたデータに三次解析が行われ、PDF などの形式でレポートが出力されます。生物情報科学者をはじめとする技術の専門家は、このレポートをクラウドからダウンロードできます。

遺伝子データ処理のリファレンス アーキテクチャ コンポーネント

このドキュメントでは、Cloud Life Sciences API の使用方法と、この API を使用して遺伝子データ処理を行うための手法を解説している 2 つのリファレンス アーキテクチャの概要について説明します。

Cloud Life Sciences API の使用

Cloud Life Sciences API はフルマネージドのコンピューティング サービスです。このサービスでは、バッチジョブのリソース要件に基づいて最適なコンピューティング リソースを利用できます。この API を使用することで、Docker コンテナで実行される Compute Engine インスタンス上で、コマンドライン ツールの作成、実行、モニタリングが可能になります。また、複数のコマンドライン ツールを編成して、ステップ間の依存関係を維持しながら、特定の順序で実行できます。Cloud Life Sciences API には、Docker コンテナで構成されるパイプラインなど、ワークフローの実行に使用できる WorkflowsServiceV2Beta サービスが含まれています。

Pipeline オブジェクトは、1 つ以上の Action の説明と、パイプラインを実行するために必要なクラウド リソースを説明する Resources メッセージで構成されます。各アクションは、1 つ以上の command オブジェクトを含む単一の Docker コンテナの実行を記述します。前のオブジェクトがバックグラウンドで実行するように設定されていない限り、Action オブジェクトは順次実行され、各オブジェクトは前のオブジェクトが終了するまで実行を待機します。各 Action オブジェクトの実行方法と終了ステータスがパイプラインのアクションにどのように影響するかを指定するフラグを利用できます。たとえば、Action オブジェクトをバックグラウンドで実行するか、終了ステータスを無視するかなどを指定するフラグがあります。パイプラインの作成者は、パイプラインの実行に必要なクラウド リソースを記述する Resources メッセージを作成します。

Resources メッセージでは以下を指定できます。

  • 仮想マシン(VM)のサイズ(カスタムマシンの形とプリエンプティブルを含む)
  • VM を割り当てるゾーンとリージョン
  • ネットワーク オプション(ネットワーク サイズには上限があるため、大規模な処理プロジェクトで重要)
  • 接続されたアクセラレータ(GPU
  • 接続されたディスク
  • サービス アカウントとスコープ

Cloud Life Sciences API は、API 呼び出しで Pipeline オブジェクトを受け取ると、以下のタスクを実行します。

  1. Resources メッセージの内容に基づいて Compute Engine VM インスタンスを作成します。
  2. Action の説明で指定されたすべての Docker イメージをダウンロードします。
  3. Action オブジェクトを、指定されたイメージとコマンドを持つ新しい Docker コンテナとして実行します。
  4. Compute Engine VM インスタンスを削除します。

Action で説明される一般的なタスクのセットには、以下のものがあります。

  • 入力ファイルのダウンロード
  • コマンドの実行
  • Cloud Storage へのログのコピー
  • 出力ファイルのアップロード

Cloud Life Sciences API は、Google Cloud のスケーラブルで高性能なストレージと処理能力、プリエンプティブル VM インスタンス、GPU、Tensor Processing Unit(TPU)を活用して、安全かつスケーラブルなデータ解析環境を実現します。また、単一のサンプルや結合データセットに対して、Genome Analysis Toolkit(GATK)DeepVariant などの業界標準の二次解析フレームワークを迅速、簡単、かつコスト効率よく実行できます。

Cloud Life Sciences API は、CromwellNextflowGalaxy などのオープンソースのワークフロー エンジンと統合されています。また、Nextflow と Galaxy では、Compute Engine や Cloud Storage との直接統合が可能であり、Google Cloud でのコンピューティングがサポートされています。次の図は、Cloud Life Sciences API のコンポーネントと、Google Cloud で遺伝子の二次解析パイプラインを実行するために必要なその他のサービスを含む、リファレンス アーキテクチャを示しています。

Persistent Disk、Container-Optimized OS、GPU を使用した Compute Engine コンピューティング ノードで実行される Cloud Life Sciences API を示すリファレンス アーキテクチャ。

遺伝子データの処理: Cromwell を使用した GATK のベスト プラクティス ワークフローの実行

Cloud Life Sciences API をワークフロー エンジンとともに使用して、タスクをオーケストレートできます。次の例では、GATK のベスト プラクティス ワークフローを適用しつつ、Cromwell を使用して二次解析を行います。

Cromwell は、ワークフローのスケジューリング、実行、管理が可能な、さまざまな環境で実行できるオープンソースのワークフロー管理システムです。Cromwell は、ワークフロー記述言語(WDL)で定義されたワークフローを読み取り、Cloud Life Sciences API を使用してワークフローの個々のタスクを実行します。この場合、Cromwell サーバーは Compute Engine VM インスタンス上で実行され、Cloud SQL サーバーによりオペレーション データが保存されます。その後、Cromwell VM は、Cloud Life Sciences API への API 呼び出しによって定義された各タスクを実行し、WDL での構成に従い各タスクの VM インスタンスを起動します。

GATK には、バリアント検出とジェノタイピングのためのツールが含まれています。GATK のベスト プラクティス ワークフローには、特定のユースケースに対応するためのパイプラインが多数用意されています。この例では、PairedEndSingleSampleWf という本番環境用ワークフローを中心に説明します。このワークフローには、データ前処理、生殖細胞系列一塩基多型(SNP)の最初のバリアント呼び出し、単一のサンプル(全ヒトゲノムの配列データ)のインデル検出が含まれます。

このワークフローは、マッピングされていない BAM(uBAM)形式の全ヒトゲノムのペアエンド配列データを 1 つ以上のリードグループで取り込み、ALT コンティグとともに Hg38 参照ゲノムを使用します。出力には、cram ファイル、cram インデックス、cram md5、GVCF、対応するインデックス、BQSR レポート、いくつかのサマリー指標が含まれます。使用されているサンプルは、完全なサンプルの 3 つのリードグループを含む NA12878 のダウンサンプル バージョンです。このワークフローは、個々のタスクを定義する一連の WDL ファイルとして、入力仕様と一般的なオプションとともにパッケージ化されています。WDL ファイルは、各 VM インスタンスの CPU コアとメモリの数、各 VM インスタンスにインストールするコンテナ、実行するコマンド、入力および出力ファイルの場所など、各タスクに割り当てるクラウド リソースを指定します。ステップがプリエンプティブル マシンで実行されるかどうかや、Action オブジェクトを再試行する回数など、他の仕様もあります。

次の図は、Cromwell と Cloud Life Sciences API で GATK のベスト プラクティス ワークフローを実行し、遺伝子の二次解析を実行するための一般的なアーキテクチャを示しています。これには、二次解析を実行するために必要なステップも含まれます。

Cloud Life Sciences API で Cromwell を使用して GATK のベスト プラクティスを実行する。

この図は、以下で説明する、二次解析を実行するための手順を示しています。

  1. ゲノム解読の後、基本となる未加工の呼び出しをローカル ストレージまたはネットワーク接続ストレージ(NAS)に保存し、そこで uBAM ファイルに変換します。その後、この uBAM ファイルを Cloud Storage バケットに転送します。
  2. Identity and Access Management(IAM)を使用して、サービス アカウントとして認証します。
  3. Compute Engine で実行中の Cromwell サーバーにジョブを送信します。

    リクエストが、Google Cloud ファイアウォール ルールを使用して Virtual Private Cloud へのアクセスを許可するように構成された Identity-Aware Proxy を介して行われます。

  4. Cromwell サーバーが GATK のワークフローを公開リポジトリから pull します。

  5. Cromwell サーバーが Cloud Life Sciences API を呼び出してジョブを開始します。

  6. Cloud Life Sciences API が、GATK の公開リポジトリから各タスクのコンテナを pull します。

  7. Cloud Life Sciences API がタスクごとに Compute Engine で VM を起動し、マシンごとにコンテナを起動します。

  8. VM インスタンスが Cloud Storage バケットから入力ファイルを取得します。

  9. VM インスタンスがコンピューティング タスクを実行し、中間ファイル、ログファイル、出力ファイルを Cloud Storage バケットに保存します。

遺伝子データの処理: DeepVariant の実行

DeepVariant は、ディープ ニューラル ネットワークを使用して次世代 DNA 配列データから遺伝的バリアントを呼び出すオープンソースの解析用パイプラインです。この解析用パイプラインは Google の研究チームによって開発されたもので、TensorFlow for SNP とエクソームまたはゲノムに対するインデル バリアント呼び出しを使用します。DeepVariant は、整列された配列リードをバリアント呼び出しに変換するために使用されます。

DeepVariant を使用するには、最上位で次の 3 つの入力を行う必要があります。

  • Samtoolsfaidx コマンドを使用して生成された、FASTA 形式の参照ゲノムとそれに対応する .fai インデックス ファイル
  • BAM 形式の整列されたリードファイルと、それに対応するインデックス ファイル(.bai)。この読み取りは、指定された参照ゲノムに整列させる必要があります。
  • バリアント呼び出しに使用する DeepVariant ML モデル。

DeepVariant の出力は、VCF 形式のすべてのバリアント呼び出しのリストです。DeepVariant は、TensorFlow 機械学習フレームワークと統合されています。

DeepVariant は Docker コンテナで、またはバイナリで直接実行できます。また、オンプレミス ハードウェアやクラウドでも実行できます。DeepVariant には、GPU や TPU などのハードウェア アクセラレータを使用するためのサポートが含まれています。DeepVariant クイックスタート ガイドで説明されているように、Docker を使用することで、1 つのコマンドだけで Docker コンテナから DeepVariant を実行できます。Google Cloud の本番環境のユースケースでは、DeepVariant プロセスをワークフローに統合し、ワークフロー エンジンから呼び出しを行うことをおすすめします。

また、DeepVariant Runner を使用することもできます。この方法では、DeepVariant の実行のチュートリアルで説明されている方法と同様の方法で Cloud Life Sciences API を使用します。これにより、コストと速度が最適化された Docker ベースのパイプラインを使用して、DeepVariant を大規模に実行できます。

次の図は、Google Cloud で DeepVariant パイプラインを実行するための一般的なアーキテクチャを示しています。

Google Cloud で DeepVariant パイプラインを実行するためのアーキテクチャ。

上の図に示されている、DeepVariant を実行する手順は次のとおりです。

  1. サンプルからマッピングされた DNA リードを作成した後、これらの BAM ファイルを Cloud Storage バケットに転送します。
  2. IAM を使用して、サービス アカウントとして認証します。
  3. DeepVariant を実行して Cloud Life Sciences API を呼び出し、ジョブを開始します。
  4. Cloud Life Sciences API がタスクごとに DeepVariant コンテナを公開リポジトリから pull します。
  5. Cloud Life Sciences API がタスクごとに Compute Engine で VM を起動し、マシンごとにコンテナを起動します。
  6. VM インスタンスが Cloud Storage バケットから入力ファイルを取得します。
  7. VM インスタンスがコンピューティング タスクを実行し、中間ファイル、ログファイル、出力ファイルを Cloud Storage バケットに保存します。

データ ガバナンス

このドキュメントでは、遺伝子データ解析に固有のコンポーネントを中心としたアーキテクチャを説明しています。人間の遺伝子データを含む本番環境の統合では、管轄地域の要件とベスト プラクティスに応じて、Google Cloud で追加のコンポーネントを構成する必要がある場合があります。

Google Cloud は、Google Cloud のベスト プラクティスをカプセル化したエンドツーエンドのアーキテクチャを提供しており、ヘルスケアのセキュリティ、プライバシー、コンプライアンスのニーズを満たすのに役立ちます。Cloud Healthcare Data Protection Toolkit には、適切なアクセスの構成、監査ログの保持、不審なアクティビティのモニタリングなど、医療データに推奨されるセキュリティおよびプライバシーの管理策に関する多くのベスト プラクティスが含まれています。これらの機能の詳細と、Google Cloud がお客様のデータを保護する方法については、Google Cloud でのデータの信頼性のホワイトペーパーをご覧ください。

データ所在地

組織がデータ所在地に関する要件を遵守する必要がある場合、サービス固有の規約の「一般サービス」セクションを参照して、Google Cloud のデータ所在地のコミットメントに関するドキュメントを確認してください。このドキュメントでは、そのような要件に準拠するようにユーザーの環境を構成する際に役立つツールと制御について、主に説明しています。

組織のポリシー

プロジェクト全体において、リソースの物理的な場所を制限するには、リソースの場所に関する制約を含む組織ポリシーを設定します。サポートされているサービスの一覧については、リソース ロケーションのサポート対象サービスをご覧ください。

Google Cloud のリソース識別子

このドキュメントでは、データ所在地のコミットメントはリソース識別子や属性などのデータラベルに適用されません。これらの識別子、属性、その他のデータラベル(ファイル名など)によって機密データが公開されることがないようにする必要があります。

Cloud Life Sciences API のリージョンとゾーン

Cloud Life Sciences API 呼び出しを行う際、リクエストを送信するリージョンを指定する必要があります。次の例は、Google Cloud プロジェクト foo とリージョン us-central1 でパイプラインを実行するためのエンドポイント URI を示しています。

v2beta/projects/foo/locations/us-central1/workflows:runPipeline

コンテナ イメージ名、入力および出力ファイルの名前、Cloud Life Sciences API へのリクエストで送信されたその他の情報など、このオペレーションで保存されたメタデータはこのリージョンに保存されます。

Cloud Life Sciences API が Compute Engine VM インスタンスを起動する際、API 呼び出しには VM インスタンスを起動するリージョンまたはゾーンを含める必要があります。1 つ以上のリージョンまたはゾーンを指定することで、VM の場所を制限できます。VM インスタンス、Compute Engine の保存データ、永続ディスクは、指定されたリージョンに残ります。Compute Engine インスタンスで利用できる機能(CPU プラットフォーム、マシンタイプ、SSD、GPU など)は、リージョンやゾーンによって異なります。そのため、必要なリソースがリージョンやゾーンで使用可能であることを確認してから、そのリージョンやゾーンに使用制限を加えてください。

詳細については、Compute Engine のデータ所在地の詳細と規約をご覧ください。

Google Cloud Storage

入力および出力ファイル、一時的な作業ファイル、永続ディスクのスナップショットは Cloud Storage に保存できます。Cloud Storage バケット内の保存データは、バケットの構成時に選択したリージョン、デュアルリージョン、またはマルチリージョン内に残ります。詳細は、現在の Cloud Storage バケット ロケーションのリストをご覧ください。

可用性、パフォーマンス、効率性を最適化するには、Cloud Storage デュアルリージョンを使用します。このオプションを選択すると、バケット内のデータが 2 つの特定のリージョンに非同期にコピーされ、データがリージョン間で冗長になります。詳しくは、Cloud Storage デュアルリージョンをご覧ください。

パフォーマンスおよびデータ所在地を考慮して、Cloud Storage、Compute Engine、Life Sciences API には、可能な限り同じリージョンを使用します。

詳細については、Cloud Storage のデータ所在地の詳細と規約をご覧ください。

次のステップ