Je souhaite utiliser le package R
future
(prend en charge les calculs asynchrones) pour créer un serveur de jobs de cluster pouvant ajouter/supprimer dynamiquement des travaux dans une file d'attente.Gestion des tâches de cluster dans R via le package futur
Une fonctionnalité spécifique que je voudrais ajouter à mon serveur de jobs consiste à distribuer des tâches demandant de la mémoire aux machines les plus puissantes de mon cluster. Cependant, comme je n'ai aucune expérience avec le paquet, je ne suis pas sûr que mon approche (donnée ci-dessous) comporte des pièges. Plus précisément, est-ce que les appels suivants de plan
ont des effets secondaires qui pourraient gâcher les choses? S'il vous plaît voir les commentaires dans le code pour plus de détails.
Merci d'avance!
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)
Oh, super! Merci pour votre aide et le super paquet (!). – cryo111