2017-08-24 7 views
0

Rパッケージfuture(非同期計算をサポート)を使用して、ジョブをキューに動的に追加または削除できるクラスタ・ジョブ・サーバーを作成します。将来のパッケージによるRのクラスタ・ジョブ管理

ジョブサーバに追加したい特定の機能の1つは、クラスタ内のより強力なマシンにメモリを要求するジョブを配布することです。しかし、私はパッケージに関する経験がないので、私のアプローチ(下記)に落とし穴があるかどうかは不明です。具体的には、その後の​​の呼び出しには、物事を混乱させる副作用がありますか?詳細については、コード内のコメントを参照してください。

ありがとうございます!ここfuture

library(parallel) 
library(future) 

slaveIPs=c("172.16.2.10","172.16.2.21") 
masterIP="172.16.2.33" 
workers=makePSOCKcluster(slaveIPs,master=masterIP) 

#check whether PSOCK cluster was correctly set up 
unlist(clusterCall(workers,function(x) unname(Sys.info()["nodename"])) 
#[1] "ip-172-16-2-10" "ip-172-16-2-21" 

#now the first important part that I am not sure about 
#as you can see, I only use workers[1] for the first task 
#is it OK to use workers[1] like that? 
plan(cluster,workers=workers[1]) 

f=future({ 
    #do memory-hungry work 
    unname(Sys.info()["nodename"]) 
}) 

message(value(f)) 
#ip-172-16-2-10 

#now I am only using workers[2] for the second task 
#Is this ok? Does the previous call to 'plan' need some cleaning before? 
plan(cluster,workers=workers[2]) 

f=future({ 
    #do low-memory work 
    unname(Sys.info()["nodename"]) 
}) 

message(value(f)) 
#ip-172-16-2-21 

stopCluster(workers) 

答えて

1

著者:

はい、それは大丈夫すなわちplan()を使用することによって、そのような将来の戦略を変更します。代替方法としては、基本的には内部的に起こっていることがあります。

f <- cluster({ 
    #do low-memory work 
    unname(Sys.info()["nodename"]) 
}, workers = workers[2]) 

将来の戦略を明示的に指定することの欠点は、コードがcluster先物を使用するようにハードコードされることです。

今後、私は将来的に優先または必須の「リソース」を指定するためのメカニズムを追加する予定です。これは今のちょうど概念で、いつでもすぐに存在しませんが、私はラインで何かを考えています:例えば、

1は himemタグ/プロパティの労働者を照会することができ
f <- future({ ... }, needs = "himem") 

attr(workers[2], "provides") <- c("himem", "superfast")。私はあなたのようなニーズを認識していることを知っているので、これらの考えを共有しています。このような仕組みが利用できるようになるにはかなりの時間がかかります。したがって、一方で、上記のように将来の戦略を明示的に指定する必要があります。ところで

、代わりに:

slaveIPs=c("172.16.2.10","172.16.2.21") 
masterIP="172.16.2.33" 
workers=makePSOCKcluster(slaveIPs,master=masterIP) 

あなたが試すことができます:futureパッケージで提供さ

slaveIPs <- c("172.16.2.10", "172.16.2.21") 
workers <- makeClusterPSOCK(slaveIPs) 

- これはマスターのIPアドレスを指定/知っておく必要がなくなります。

+0

大変です!あなたの助けと素晴らしい(!)パッケージのThx。 – cryo111