ゲノム変異体解析の並列化

[Parallelizing Genome Variant Analysis \- The Databricks Blog](https://databricks.com/blog/2016/05/24/parallelizing-genome-variant-analysis.html)の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

:::note info
2016年の記事です。
:::

*これはNorthwest Genome CenterとUniversity of WashingtonのDeborah SiegelとDatabricksのDenny LeeによるSparkを用いたADAMによるゲノム変異体解析のコラボレーションから生まれたゲスト記事です。*

これはK-Means、ADAM、Apache Sparkを用いたゲノム変異体解析に関する3パートのシリーズのパート1です。

1. [つまりゲノムシーケンシングとは](https://qiita.com/taka_yayoi/items/6fd7a9512cad34f8baa1)
1. [ゲノム変異体解析の並列化](https://qiita.com/taka_yayoi/items/dbb6e5230628797bc922)
1. [ゲノム変異体とK\-Meansを用いた地域グループの予測](https://qiita.com/taka_yayoi/items/8f6929b9777ab83681dc)

# イントロダクション

過去数年間を通じて、我々はゲノムシーケンシングのコストと時間の急激な削減を目撃してきました。ゲノムシーケンスのバリエーションを理解することのポテンシャルは、一般的な病気の傾向がある人の特定、希少疾病の解決、医師による個人にパーソナライズした処方と投薬の実現と多岐にわたります。

この3パートのブログ記事では、ゲノムシーケンシングの入門書とそのポテンシャルをご説明します。ここでは、ゲノムシーケンスの差異を見るゲノム変異体解析にフォーカスし、Databricksコミュニティエディションを用い、Apache SparkとADAMを活用することでどのように高速に行えるのかを説明します。最後に、ゲノム変異データに対してk-meansアルゴリズムを実行し、これらの変異体に基づいて個人の起源となる地理グループを予測するモデルを構築します。

この記事では、ゲノムシーケンス解析の並列化にフォーカスします。ゲノムシーケンシングの振り返りとして、[つまりゲノムシーケンシングとは](https://qiita.com/taka_yayoi/items/6fd7a9512cad34f8baa1)を読んでいただくこともできますし、3つ目の記事[ゲノム変異体とK\-Meansを用いた地域グループの予測](https://qiita.com/taka_yayoi/items/8f6929b9777ab83681dc)を読み進めることもできます。

# ゲノム変異体解析の並列化

[つまりゲノムシーケンシングとは](https://qiita.com/taka_yayoi/items/6fd7a9512cad34f8baa1)で触れた通り、Apache Sparkはタスクを並列分散するだけでなく、主にインメモリで処理を行い、中間ファイルを生成する必要性を引き下げるので、シーケンスデータにApache Sparkが最適な選択肢となる非常に大きなデータに対して、性能及び結果を劇的に改善することを期待して、分散、並列化しうる数多くのステップとステージがあります。

ADAM + Spark(ゲノム読み取り値のソートおよび、読み取り値の重複排除のためのマーキング)のベンチマークでは、シングルノードでは1.5日かかっていたのを、コモディティなクラスターでは1時間以下になったように、スケーラブルな高速化が示されています([ADAM: Genomics Formats and Processing Patterns for Cloud Scale Computing](https://www2.eecs.berkeley.edu/Pubs/TechRpts/2013/EECS-2013-207.html))。

現状のゲノムシーケースデータフォーマットを取り扱う際に言及すべき主要な問題は、これらを容易に並列化できないということです。基本的に、現行のツールセットとゲノムデータフォーマット(例:SAM、BAM、VCFなど)は、分散計算環境向けには設計されていません。文脈を与えるために、次のセクションではゲノムシーケンスから変異体ワークフローに至るワークフローの簡素化したバッググラウンドを説明します。

# 変異体ワークフローに対するシンプルなゲノムシーケンス

変異体を解析する前に、最初に実行される品質コントロールと前処理ステップが数多く存在します。簡素化されたワークフローは以下のような図になります。
![](https://databricks.com/wp-content/uploads/2016/05/Simplified-Sequence-to-Variant-Workflow-1024x396.png)
ゲノムシーケンサー機器の出力は、短いヌクレオチドシーケンスの読み取り値と関連する品質スコアの両方をASCIIフォーマットで保存するテキストベースのフォーマットである[FASTQ format](https://en.wikipedia.org/wiki/FASTQ_format)となります。以下の図はFASTQフォーマットのデータのサンプルとなります。
![](https://databricks.com/wp-content/uploads/2016/05/FASTQ-format-1024x202.png)

典型的な次のステップでは、短いDNAシーケンス(読み取り)の大規模セットを[リファレンスゲノム](https://en.wikipedia.org/wiki/Reference_genome)に割り当て、ゲノムにマッピングされたタグを格納するシーケンスアライメントマップファイルであるSAMファイルを作成する[Bowtie](http://bowtie-bio.sourceforge.net/manual.shtml#what-is-bowtie)のようなシーケンスアライメントツールであるBWA(Burrows-Wheeler Alignment)を使用します。以下の図([Sequence Alignment/Map Format specification](https://samtools.github.io/hts-specs/SAMv1.pdf)からの引用)ではSAMフォーマットのサンプルとなります。この仕様には、この記事のスコープ外となる数多くの用語とコンセプトが含まれています。より詳細に関しては、[Sequence Alignment/Map Format specification](https://samtools.github.io/hts-specs/SAMv1.pdf)をご覧ください。
![](https://databricks.com/wp-content/uploads/2016/05/Example-SAM-format-1024x254.png)
ソース: [Sequence Alignment/Map Format specification](https://samtools.github.io/hts-specs/SAMv1.pdf)

次のステップでは、多くの場合は[SAMtools](https://github.com/samtools/samtools)(このプロセスの良いリファレンスはDave Tangの[Learning BAM file](https://github.com/davetang/learning_bam_file)です)を用いてSAMをBAM(SAMのバイナリーバージョン)に保存します。最後になりますが、リファレンスシーケンスとBAMファイルを(通常は[BCFtools](https://github.com/samtools/bcftools)を用いて)比較することでVariant Call Format (VCF)ファイルが生成されます。Kaushik Ghoseによって、このプロセスを説明している素晴らしいショートなブログ記事[SAM\! BAM\! VCF\! What?](https://kaushikghose.wordpress.com/2014/03/26/sam-bam-vcf-what/)があります。

# 簡素化されたVCFの概要

VCFファイルを用いることで、ようやく変異体解析をスタートできます。VCF自身は複雑な仕様であり、詳細に関しては[1000 Genomes Project VCF \(Variant Call Format\) version 4\.0 specification](https://www.internationalgenome.org/wiki/Analysis/vcf4.0)をご覧ください。
![](https://databricks.com/wp-content/uploads/2016/05/1000-genomes-VCF4.0-specification.png)
ソース: [1000 Genomes Project VCF \(Variant Call Format\) version 4\.0 specification](https://www.internationalgenome.org/wiki/Analysis/vcf4.0)

VCFを処理、解析するツールは数多く存在しますが、並列分散処理でこれらを使用することはできません。VCFファイルの簡素化ビューには、メタデータ、ヘッダー、そしてデータが含まれます。メタデータは、多くの場合は興味の対象であり、それぞれの遺伝子型に適用されるべきものとなります。以下の図に示したように、お使いの遺伝子型データを処理するために4つのノード(Node 1、Node 2、Node 3、Node 4)を持っていたとしても、4つのノードすべてに効率的に分散することができません。従来型の変異体解析ツールでは、データ、メタデータ、ヘッダーの全てを含むファイル全体を単一のノードに送信しなくてはなりません。さらに、VCFファイルでは行当たり1つ以上の観測結果(変異体と、それらすべての遺伝子型)が含まれます。これによって、再フォーマットあるいは特殊なツールを使用することなしには、並列に遺伝子型を解析することが不可能となっています。
![](https://databricks.com/wp-content/uploads/2016/05/VCF-cannot-distribute.png)

VCFの解析を複雑なものにしている別の主要な問題は、VCFフォーマットの仕様を取り巻く複雑性のレベルです。[1000 Genomes Project VCF \(Variant Call Format\) version 4\.0 specification](https://www.internationalgenome.org/wiki/Analysis/vcf4.0)によると、VCFの行をどのように解釈するのかに関して大量のルールが存在します。このため、変異体データを解析したいと考えるすべてのデータサイエンティストは、取り扱い、パーシングするVCFの仕様を理解するために膨大な労力を費やさなくてはなりません。

# ADAMのご紹介

テクニカルレポート[ADAM: Genomics Formats and Processing Patterns for Cloud Scale Computing](https://www2.eecs.berkeley.edu/Pubs/TechRpts/2013/EECS-2013-207.pdf)で説明されているような、シーケンスデータの並列処理とシーケンスデータの分散に関わる問題を解決するためにビッグデータゲノミクスのADAMプロジェクトが設計されました。ADAMは、CLI(ゲノミクスデータをクイックに処理するためのツールキット)、大量のAPI(ゲノミクスデータの変換、解析、クエリーのためのインタフェース)、スキーマ、ファイルフォーマット(データに対する効率的な並列アクセスを実現する列指向フォーマット)から構成されています。

## bdgフォーマットのスキーマ

リード、リファレンス指向データ、変異体、遺伝子型、アセンブリーのようなシーケンスデータの一般的な型をパースする際の複雑性に対処するために、ADAMはファイルフォーマットではなくデータ型自身に合わせて構築された拡張可能なApache Avroセットを活用します。言い換えると、スキーマを用いることADAM(や他のツール)は、ファイルフォーマットに応じてデータの各行をパースするためのカスタムコードを構築するのではなく、より簡単にクエリーが行えます。これらのデータフォーマットは容易にシリアライズでき、データ型のようなそれぞれ固有のスキーマに関する情報をデータバッチごとに無駄に送信する必要がないため、非常に効率的です。お使いのクラスターのノードは、どのようなスキーマであるのかを拡張可能な方法(拡張されたスキーマでデータを追加でき、古いスキーマのデータと一緒に解析できます)で検知できるようになります。

## ADAM Parquet経由の並列分散

ADAMのParquetファイルは、シーケンスデータの並列分散をサポートしているので、(バイナリーやテキストのVCFファイルと比較して)高速な処理を実現します。上述したVCFファイルの図においては、ファイル全体が一つのノードに送信されなくてはならない様子を見ました。ADAMのParquetファイルを用いることで、メタデータとヘッダーはデータエレメントとスキーマに組み込まれ、エレメントごとに一つの観測結果となるので「きちんとした」状態(1つの遺伝子型に対して1つの変異体)になります。
![](https://databricks.com/wp-content/uploads/2016/05/ADAM-can-distribute.png)

これによって、ファイルを複数のノードにわたって分散できるようになります。特殊なツールを使用することなしに、特定のパネルの遺伝子型など必要なデータに対するエレメントへのフィルタリングがシンプルなものにもなります。ADAMファイルは並列分散のために設計された[Parquet](https://parquet.apache.org/)列指向ストレージフォーマットとして格納されます。GATK4の時点では、[Genome Analysis Toolkit](https://gatk.broadinstitute.org/hc/en-us)はADAM Parquetフォーマットのデータを読み書きすることができます。

## 変異体ワークフローに対するシンプルなゲノムシーケンス(改訂版)

定義されたスキーマ(bdgフォーマット)とADAMのAPIを用いることで、データサイエンティストはデータフォーマットのパーシングではなく、データのクエリーにフォーカスすることができます。
![](https://databricks.com/wp-content/uploads/2016/05/Simplified-Sequence-to-Variant-Workflow-with-ADAM-1024x350.png)

# 次のステップ

次の記事では、並列バイオインフォマティック解析のサンプル[ゲノム変異体とK\-Meansを用いた地域グループの予測](https://qiita.com/taka_yayoi/items/8f6929b9777ab83681dc)を実行します。ゲノムシーケンスの入門である[つまりゲノムシーケンシングとは](https://qiita.com/taka_yayoi/items/6fd7a9512cad34f8baa1)をレビューすることも可能です。

# リソース

ノートブックを作成する助けになった以下のリソースを特筆しておきたいと思います。

- [ADAM: Genomics Formats and Processing Patterns for Cloud Scale Computing \(Berkeley AMPLab\)](https://amplab.cs.berkeley.edu/publication/adam-genomics-formats-and-processing-patterns-for-cloud-scale-computing/)
- Andy Petrellaの[Lightning Fast Genomics with Spark and ADAM](https://www.slideshare.net/noootsab/lightning-fast-genomics-with-spark-adam-and-scala)と関連の[GitHub repo](https://github.com/andypetrella)
- Neil Fergusonの[Population Stratification Analysis on Genomics Data Using Deep Learning](https://github.com/nfergu/popstrat)
- Matthew Conlenの[Lightning\-Viz project](http://lightning-viz.org/)
- (Sparkによるゲノミクスにおける)[Timothy Danford’s SlideShare presentations](https://www.slideshare.net/TimothyDanford)
- [Centers for Mendelian Genomics uncovering the genomic basis of hundreds of rare conditions](https://www.genome.gov/news/news-release/Centers-for-Mendelian-Genomics-uncovering-the-genomic-basis-of-hundreds-of-rare-conditions)
- [NIH genome sequencing program targets the genomic bases of common, rare disease](https://www.nih.gov/news-events/news-releases/nih-genome-sequencing-program-targets-genomic-bases-common-rare-disease)
- [The 1000 Genomes Project](https://www.internationalgenome.org/)

また、Anthony Joseph、Xiangrui Meng、Hossein Falaki、Tim Hunterによる追加の貢献とレビューに感謝します。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)