複雑なモデルを大きなデータセットに繰り返し当てはめるときに計算効率を最適化するにはどうすればよいですか?


12

MCMCglmmR のパッケージを使用して混合効果モデルを実行すると、パフォーマンスの問題が発生します。コードは次のようになります。

MC1<-MCMCglmm(bull~1,random=~school,data=dt,family="categorical"
, prior=list(R=list(V=1,fix=1), G=list(G1=list(V=1, nu=0)))
, slice=T, nitt=iter, ,burnin=burn, verbose=F)

データには約20,000の観測があり、それらは約200の学校に集中しています。実行する前に、未使用の変数をすべてデータフレームから削除し、他のすべてのオブジェクトをメモリから削除しました。私が抱えている問題は、反復を許容できないほど小さな数に減らしない限り、実行に非常に長い時間がかかることです。50,000回の反復により、5時間かかり、実行する多くの異なるモデルがあります。したがって、コードの実行を高速化する方法、または使用できる他のパッケージがあるかどうかを知りたいと思います。MCMCglmmランダム効果の信頼区間が必要なため、使用しています。

一方で、私は今年後半に新しいPCを手に入れたいと思っていましたが、少し運が良ければそれを前に出すことができるかもしれないので、新しいハードウェアに限られた金額を使うにはどうすればいいですか? 、CPUの高速化など。タスクマネージャーを見ると、RAMが問題であるとは思いません(物理的な使用量の50%を超えることはありません)。 。私の現在のセットアップは、Intel Core i5 2.66GHz、4GB RAM、7200rpm HDDです。追加のRAMを犠牲にして、できるだけ高速なCPUを取得することは合理的ですか?また、このような統計計算の問題に対するレベル3のCPUキャッシュサイズの影響についても疑問に思いましたか?

アップデート:SOメタに尋ねた私は、スーパーユーザーの質問およびポストを修正してくださいすることをお勧めされています。そのためには、MCMCglmmで「内部」で何が行われているかについて、より詳細に説明する必要があります。計算時間の大部分が最適化に費やされていると考えるのは正しいですか?つまり、いくつかの複雑な関数の最大値を見つけるということですか?行列の反転や他の線形代数演算もボトルネックの原因となる一般的な演算ですか?私がスーパーユーザーコミュニティに提供できるその他の情報は、最もありがたいことに受信されます。


MCMCがこのような問題に長い時間をかけるのは驚くべきことではないと思います。おそらくそれをより速く実行する方法があると確信しています。しかし、正しい答えを出すにはまだ時間がかかります。
マイケルR.チャーニック

@Michael Chernick、ありがとう-まだ時間がかかることは承知しています。できるだけ最小限に抑えたいだけです。それだけです。私の父は仕事でOracle SPARC T4を使用しており、MCMCを非常に高速に実行しています;)
ジョーキング

3
@JoeKing、あなたのタイトルをよりわかりやすいものに編集し、おそらくあなたを助けることができるより多くのユーザーを引き付けました。またlmer()、特に何度も行う必要がある場合、モデルを大きなデータセットに適合させるのにかなり時間がかかることもわかりました。他のユーザー(@DirkEddelbuettelなど)が私よりもはるかに役立つでしょうが、あなたの質問に対する答えは並列コンピューティングにあるかもしれません。また、stackoverflowでより良い回答が得られる可能性もあります。
マクロ

マクロ、編集に感謝します。私も使用しましたglmer(他の投稿からわかるように)約20秒かかりますが、問題は信頼区間や標準エラーを与えないことと、メーリングリストのアーカイブからlme4パッケージには、ランダム効果のサンプリング分布が非常に歪んでいる可能性があるため、これらの統計は報告されていません。実際、私はMCMCglmmこれまでのところ、私の場合は正常に近づいていることを発見しました(これはあまり役に立たないということではありません。SOに移行するようにリクエストした方が良いでしょうか?
ジョーキング

1
私はmcmcglmmの詳細を知りませんが、MCMCメソッドを多く使用しました。MCMCの良いところは、恥ずかしいほど並列化できることです(これは技術用語です!)。複数のコアがある場合、それぞれで独立したチェーンを実行し、結果をプールします。これがMCMCの実行方法ですが、それを行うために(MPIを使用して)独自の並列C ++コードを作成しました。ハードウェアのアドバイスに関しては、できるだけ多くのコアを持つものを探してください。これは、使用しているツールが複数のコアを活用できることを前提としています。質問でSUを提供する情報に関しては、コアを利用できるかどうかを確認してください。
ボグダノビスト

回答:


3

AmazonのEC2クラウドコンピューティングサービスまたは同様のサービスで実行してみませんか?MCMCpack私の記憶が正しければ、ほとんどがCで実装されているため、モデルの複雑さや反復などを減らしない限り、それほど速くはなりません。必要な仕様を作成し、すべてのモデルを一度に実行します。


これに対する1つの変更:m2.4xlarge(68.7GB RAMオプション)で実行することは、完全なマシンを取得する唯一の方法であり、VM(仮想マシン)で発生する可能性のあるRAMキャッシングの問題に必ずしも遭遇しない/ AMI)マシンの一部で実行されます。
イテレーター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.