Snow

Les calculs statistiques qui exigent des longues procédures, peuvent être accéléré de manière significative en utilisant plusieurs ordinateurs en parallèle.

Le package «snow» (Simple Network Of Workstations) nous donne la possibilité d'avoir un cluster de postes de travail pour les calculs parallèles dans R.

Lancer le script Snow au DMS

  • Ouvrez un terminal
  • Taper la commande suivante: makeKey.sh (ceci est pour empêcher le SSH de vous demander votre mot de passe à chaque fois que vous tentez de vous connecter à d'autres machines du réseau)
  • Répondez par «y» à la question suivante :
Generating public/private rsa key pair.
/home/bayani/.ssh/id_rsa already exists.
Overwrite (y/n)? 
  • Faites juste «Enter» lorsque vous voyez :
Enter passphrase (empty for no passphrase): 
  • De nouveau faites juste «Enter» lorsque vous voyez :
Enter same passphrase again:
  • Lancer R, en tapant :
/usr/local/stat/R/R-3.0.0/bin/R 

Exemple explicatif

Dans l'exemple suivant, on fait des calculs de deux manières. La première fois, on lance les calculs sur la machine qu'on est présentement; par la suite on fait la même chose sur plusieurs CPUs (ex. nbcpus <- 10, 15, 20 ou 80). Une fois dans R, tapez les commandes suivantes :

require(snow)

myfunc <- function(M=1000) {
  decision <- 0
  for (i in 1:M) {
    x <- rnorm(100)
    if (shapiro.test(x)$p < 0.05) decision <- decision + 1
  }
  return(decision)
}


system.time({
  M <- 6000000
  decision <- myfunc(M)
  print(decision/M)
})

# Temps de calcul: 814s

nbcpus <- 10
cpus <- strsplit(system(paste("snowdms.sh ",nbcpus),intern=TRUE),split=" ")[[1]]

system.time({
  cl <- makeCluster(cpus, type = "SOCK")
  clusterSetupSPRNG(cl)
  M <- 6000000
  out <- clusterCall(cl, myfunc, round(M/nbcpus))
  stopCluster(cl)
  decision <- 0
  for (cpus in 1:nbcpus) {
    decision <- decision + out[[cpus]]
  }
  print(decision/(round(M/nbcpus)*nbcpus))
})

# Avec nbcpus <- 80: 58s
# Avec nbcpus <- 20: 70s
# Avec nbcpus <- 15: 84s
# Avec nbcpus <- 10: 111s
 

Remarque  Des messages tels que :

The authenticity of host 'leopard (132.204.53.53)' can't be established.
RSA key fingerprint is a6:a3:80:c8:52:22:d8:de:be:5a:d8:f4:04:cf:2c:01.
Are you sure you want to continue connecting (yes/no)?

peuvent apparaître. Il faut alors répondre par «yes». Ces messages n'apparaitont qu'une seule fois (pour une machine donnée).

Nombre de CPUs

Le rendement en terme du temps de calculs dépende du type du processus que vous allez lancer sur les machines. On voit dans l'exemple que plus de CPUs qu'on utilise plus vite les calculs iront. Mais il faut faire attention avec le fait que dépamdemant du type de calculs qu'on va faire ceci change. Il ne faut pas oublier les que l'envoi des calculs sur pleusieurs CPUs prend du temps, alos il faut que votre processus vaut la peine d'être envoyer sur pleusieurs CPUs(i.e. votre programme est bien parallelisable) Sinon, c'est mieux de lancer un programme qui est par exemple par trop grand sur une seule machine.

Exemple de tous les jours Disons qu'on veut écrire une lettre de deux lignes. À la palce de l'écrire vous vous déplacer 3 étages du pavillion Aisenstadt pour aller voir votre ami au troisième étage pour lui démander de l'aide. Pendent cetemps-là vous auriez pu avoir déjà écrire votre lettre de deux lignes. Mais par exemple si vous avez une lettre de 10 page à écrire, en ce memeont là ç a vaut la peine de se déplacer trois étages pour allez demande de l.aide à son ami.

Voir aussi

Références externes


La dernière modification de cette page a été faite le 3 décembre 2020 à 20:54.