2011年4月27日水曜日

RAxMLによる並列計算処理まとめ

RAxMLには並列処理に関していくつかバージョンがありますが、それがどのようにして並列処理を行っているのかを、忘れないうちにここにメモしておきます。あと、細かい計算処理の仕方やRight versionについても。

*あくまで自分の理解です。

・PTHREADSとOpen-MPIの違い

これは、一言で言えば「各スレッドあるいは各プロセス(CPUと考えてもよい)がメモリを共有しているか否か」ということになります。前者はメモリを共有、後者は各プロセスが独自のメモリを保持します。

具体的にいえば、4GBのメインメモリがあったとして、2コアでPTHREADSを使う場合は2つのスレッドが4GBを同時に使用する。MPIの場合は2つのスレッドが2GBずつメモリを分け合います。

簡単に言うと、漫画を描く(系統樹を再構築する)ために、漫画家(スレッドとか)が作業机(メモリ)をシェアするか否かということです。

なお、MPIの場合はそれぞれのプロセス間で通信を行い、互いの進行状況を知らせ、それらを同期する必要があります。

RAxMLでは、PTHREADSでは1本の系統樹に対する各パラメタの最適化に対して並列処理が行われ、MPIではTree searchingの際に並列処理が適応されます(つまりSPRなどで提案された複数本の系統樹についてのパラメタの最適化を、それぞれのプロセスで行う)。MPIの場合は例えばML解析の際、それぞれの初期系統樹からのML探索単位でプロセスを分けているわけではないので注意。

PTHREADSでなぜ複数本の系統樹の最適化を並列にやらないかというと、系統樹の本数が増えるごとに推定されるパラメタの数が増え、キャッシュの負担が増してしまうからです。その場合、一本の系統樹に対して複数コア使うほうがより効率がいいということになります。

上述の例で言えば、キャッシュは作業机上にある文房具ということになります。描く漫画のコマ数が増えれば、それだけ多くのペンやホワイトや定規やらが必要になりますが、それには限りがあるということですね。

逆に、MPIではわざわざ作業机を分けているのに、同じコマを書こうとする(一本の系統樹の最適化)のは非効率であるというわけです。

これらがRAxML-PTHREADSとRAxML-MPIになるわけですが、これらの機能を合わせたのがRAxML-HYBRIDです。このバージョンでは、探索の際提案された各樹形をまず複数のプロセスにわけ、さらに各プロセスに割り当てられたメモリの中でPTHREADSを適応し、各系統樹のパラメタ最適化を並列に行います。

ただ、この計算処理の恩恵を得るには当然ながら多くのコアが必要で、作者曰く「最低60コアはないとお話にならないね」とのことです。

ちなみにHYBRIDバージョン(MPIも)ではmpirunを使ってMPIのプロセス数を指定しますが、これを指定しない場合、デフォルトではプロセス数は1であり、ただのPTHREADSバージョンを使うことになります。


ASRVの計算方法

例えばΓ[4 categories]で計算する場合、各rateを想定して各rateごとにトータルのlnLを計算して最後にそれらの1/4を合算して最終的な尤度を計算するようにしているみたいですが、ちょっとこれについては本当にこれでいいのか(自分の理解があっているかも含め)勉強中です。

ちなみに作者曰く「膨大なデータを解析する際はdiscrete Gammaを使うのではなくCATを使った方がいいと思う」とのことでした。

配列長の増大についてはそうだと思いますが、配列数の増大についても同じことが言えるでしょうか?

あと、AICも確認してみないことには何とも言えんですね。

(RAxMLのCATはPhyloBayesとかのCATではなく、各サイトごとの独自のrateを計算するモデル)


RAxML-Rightについて

このバージョンは最近になって公開されました。Phylogenomicなどの膨大なデータを取り扱うことを想定した上でのRAxMLの新バージョンです。

主な特徴は

1、ASRVにGamma分布ではなくCATを使う。
2、Check point機能があり、クラスタなどで解析をして途中でrunがぶった切れても各ポイントから再開できる(その際使うコア数も変更可能)
3、メモリがかなり節約できる。

です。なお、Rightを使う場合には事前にParsimonitorで最節約の系統樹を初期系統樹として用意する必要があります。


こんなとこですか。

 並列処理については大学院の共通科目で計算科学の講義もありますので、今年はここでも勉強したいと思います。去年はISEPと被りましたが、今年は大丈夫でしょう。


あとは、もっとハードな部分についても自分で調べる必要がありますね。

0 件のコメント: