2016-05-24 2 views
2

JAGSで3つのチェーンを5コアまたは6コアに細分することが可能かどうかは疑問です。ここに私のコードは次のとおりです。複数のコア(細分鎖)でJAGSを使用して複数のチェーンを実行することは可能ですか?

library(parallel) 
    # There is no progression bar using parallel 
      jags.parallel(data = d$data, 
         inits = d$inits, 
         parameters.to.save = d$params, 
         model.file = model.jags, 
         n.chains = 3, 
         n.thin = 10, 
         n.iter = 9000, 
         n.burnin = 3000, 
         working.directory = NULL, 
         n.cluster = 3) ## the number of cluster it’s taking 

あなたが見ることができ、これはデフォルトであるため、(私の場合は3である、ここでnc)鎖の数は、使用するコアの数に等しいです。

  1. これはMCMCのサンプリング方法にどのような影響を及ぼしますか?
  2. MCMCチェーンを並列に実行するときに、Rに使用する最適なコア数はありますか?
  3. 私は3本の鎖があれば3本のコアの下に行くことができないことを知りました。それは私にこれを与えるerrorError in res[[ch]] : subscript out of bounds。どうして?
  4. コアの数を増やすと時間がかかります(12コアの場合、3コアよりも7.2倍多くなります)!それは逆ではありませんか?
  5. 繰り返しを削除したり、バーンインや間引きを追加しなくても、スクリプトを高速化するにはどうすればよいですか?

私のコンピュータは16コアなので、コアの数にも柔軟性があります(64 GBのRAMと3 GHzのIntel Xeon E5プロセッサも搭載しています)。

+0

チェーンの各反復は以前の反復に依存するため、1つのチェーンを複数のコアに分割することはできません。 – jbaums

答えて

5

3本の鎖を複数のコアに分割することはできません。 JAGSをここで並行して実行すると、効果的に何が起こるのですか。

  1. 各チェーンで指定した焼き付けを実行します。あなたの例では、3つのチェーンは3000ステップのモデルを実行し、その情報は保存しません。

  2. 各鎖に適切な時間内のバーンインが行われると、事後分布から必要なサンプル数が各鎖に均等に分けられます。あなたの例では、各チェーンはサンプラーを600ステップ実行します((n.iter -n.thin)/n.chains)。

ですから、あなたの質問に進みましょう(#1は上で説明した通りです)。

  1. これに対する回答は、その時点でそのコンピュータで何をしているかによって異なります。コンピューティングパワーの大部分を占めるように、コンピュータのすべてのKコアで実行することは決してありません。私は一般的に、K-1コアをK-1コアでより大きなモデルに使用しています。シンプルなモデルでは、それは本当に重要ではありません。

  2. コア数が少ない場合でも複数のチェーンを実行できますが、コアの各チェーンを順次計算する必要があるため、処理速度が遅くなります。逆に、複数のコアにチェーンを減らすことはできません。 xチェーンをお持ちの場合は、> x coresではありません。

  3. これは質問2と3で答えられます。チェーンが増えると計算量は増えますが、チェーンを増やすほど多くのコアは増加しません。

  4. これは本当にあなたのモデルを見なければ答えられません。

+0

'(n.iter * n.burnin)/ n.thin'のサンプルが各チェーンから取り出されます(' niter \ n.thin/n.chains'ではなく)。したがって、OPの例では、チェーンごとに600回の反復が返されます( '(9000-6000)/ 10')。 – jbaums

+0

それは 'rjags'のやり方ですか?私は主に 'runjags'を使用し、それが間引かれる量に基づいて反復回数を増やします。私はそれに応じて答えを編集します。 –

+0

私は 'jags.parallel'が' R2jags'から来ていると確信しています。これは私が記述したように計算します(私はかなり確信しています...)。 'rjags'についてはわかりません - それは同じだと思いました。 – jbaums

関連する問題