2016-06-01 1 views
2

Je voudrais exécuter 1000 itérations d'une simulation en R. Chaque itération prend 20 secondes, ce qui prend ~ 6 heures en série. Et j'ai plusieurs dizaines de simulations à exécuter, chacune avec 1000 itérations. Je veux donc utiliser l'informatique parallèle pour accomplir ce travail en moins de temps.Comment puis-je utiliser tous mes cœurs Amazon EC2 pour effectuer une simulation parallèle en R?

Je suis nouveau à ce sujet. Après avoir lu du matériel sur le web, j'utilise maintenant le service EC2 d'Amazon, en exécutant une AMI avec RStudio Server et OpenBLAS qui a été utilement fournie par Louis Aslett. Les détails du logiciel chargé dans l'AMI sont ici: http://www.louisaslett.com/RStudio_AMI.

J'ai expérimenté plusieurs instances EC2 et j'utilise actuellement une instance ubuntu c4.8xlarge avec 36 cœurs. Ou des cœurs virtuels, je ne suis pas entièrement sûr de la différence.

Mon problème est que je ne peux pas sembler utiliser n'importe où près des 36 cœurs disponibles. J'ai réussi à utiliser jusqu'à 10 cœurs, mais j'ai des erreurs quand j'essaie d'utiliser> 10 cœurs.

est ici un minimum de code (en utilisant l'ensemble de données de voitures) pour reproduire l'erreur:

library(parallel) 
detectCores() #36 
ptm<-proc.time() 
cl <- makeCluster(getOption("cl.cores", 20)) #specify number of cores 
clusterSetRNGStream(cl, 123) 
sims <- clusterEvalQ(cl, { 
    cars[sample(1:nrow(cars), 10, replace=FALSE),] 
}) 
stopCluster(cl) 

Ce code fonctionne généralement bien quand je précise 10 noyaux dans la déclaration makeCluster(). Il produit une liste de 10 éléments dont chacun a été produit par l'un des 10 cœurs. Mais spécifier> 10 coeurs (c'est-à-dire, comme ci-dessus) entraîne généralement des erreurs telles que ce que j'ai collé ci-dessous. Comme je l'ai mentionné ci-dessus, je suis nouveau à ce sujet et mon code est basé sur un exemple que j'ai trouvé en ligne qui devait être exécuté sur un seul ordinateur multi-core (pas une machine EC2). Donc je me rends compte que j'ai peut-être mal spécifié l'instruction makeCluster() à des fins d'exécution sur EC2.

J'apprécierais n'importe quelle aide ou suggestions pour que cela fonctionne!

Un grand merci,

Mark B.

Voici l'erreur que je reçois lorsque vous essayez d'utiliser> 10 cœurs:

OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
/usr/lib/R/bin/R: fork: retry: Resource temporarily unavailable 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
/usr/lib/R/bin/R: fork: retry: No child processes 
/usr/lib/R/bin/R: fork: retry: Resource temporarily unavailable 
/usr/lib/R/bin/R: fork: retry: No child processes 
/usr/lib/R/bin/R: fork: retry: No child processes 
/usr/lib/R/bin/R: fork: retry: Resource temporarily unavailable 
/usr/lib/R/bin/R: fork: retry: No child processes 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable 
OpenBLAS blas_thread_init: RLIMIT_NPROC 241473 current, 241473 max 
/usr/lib/R/bin/R: fork: retry: No child processes 
/usr/lib/R/bin/R: fork: retry: No child processes 
/usr/lib/R/bin/R: fork: retry: No child processes 
/usr/lib/R/bin/R: fork: retry: No child processes 
/usr/lib/R/bin/R: fork: retry: No child processes 
/usr/lib/R/bin/R: fork: retry: No child processes 
/usr/lib/R/bin/R: fork: Resource temporarily unavailable 
ERROR: option '-e' requires a non-empty argument 
+0

Peut-être que cela aide ... http://stackoverflow.com/q/27825280/2836621 –

Répondre

1

Nous avons également rencontré le problème cette semaine. Ce que j'ai fait était de supprimer l'openBLAS et de quitter R de l'EC2 et de ré-installer R sans openBLAS. Alors ça a marché. Mais si vous avez vraiment besoin d'openBLAS pour accélérer votre algorithme, vous devrez peut-être construire R avec openBLAS à partir des codes source (nous n'avons pas encore essayé cette approche).