Forêt aléatoire R sur Amazon ec2 Erreur: impossible d'allouer un vecteur de taille 5,4 Go

9

randomForest()J'entraîne des modèles forestiers aléatoires en R à l'aide de 1000 arbres et trames de données avec environ 20 prédicteurs et 600K lignes. Sur mon ordinateur portable, tout fonctionne bien, mais lorsque je passe à amazon ec2, pour exécuter la même chose, j'obtiens l'erreur:

Error: cannot allocate vector of size 5.4 Gb
Execution halted

J'utilise le c3.4xlargetype d'instance, donc c'est assez costaud. Quelqu'un connaît-il une solution pour que cela s'exécute sur cette instance? J'aimerais connaître les nuances de mémoire qui provoquent ce problème uniquement sur l'instance ec2 et non sur mon ordinateur portable (processeur OS X 10.9.5 2,7 GHz Intel Core i7; mémoire 16 Go 1600 MHz DDR3)

Merci.

Ethan
la source

Réponses:

5

Voici quelques conseils (utilisez à vos risques et périls!):

Si les mesures plus simples mentionnées ci-dessus ne vous aident pas OU vous souhaitez obtenir plus d' évolutivité et / ou de performances , y compris la possibilité de paralléliser le processus sur une seule machine ou sur plusieurs machines, envisagez d'utiliser le bigrfpackage R: http: // cran. r-project.org/web/packages/bigrf . Voir également cette discussion: https://stackoverflow.com/q/1358003/2872891 .

Aleksandr Blekh
la source
2

En plus d'autres idées: réduisez vos données jusqu'à ce que vous trouviez ce que vous pouvez exécuter sur l'instance Amazon. S'il ne peut pas faire 100k lignes, alors quelque chose ne va pas, s'il échoue à 590k lignes, alors son marginal.

L'instance c3.4xlarge a 30 Go de RAM, donc oui, cela devrait suffire.

Spacedman
la source
2

Il est toujours utile de simplement rechercher l'erreur exacte que vous voyez sur Google, en excluant des détails tels que la mémoire réelle du vecteur. Pour moi, le premier hit était une documentation intéressante appelée " R: Limites mémoire de R ", où, sous "Unix", on peut lire:

La limite d'espace d'adressage est spécifique au système: les systèmes d'exploitation 32 bits imposent une limite ne dépassant pas 4 Go: elle est souvent de 3 Go. L'exécution d'exécutables 32 bits sur un système d'exploitation 64 bits aura des limites similaires: les exécutables 64 bits auront une limite spécifique au système essentiellement infinie (par exemple, 128 To pour Linux sur les processeurs x86_64).

Voir l'aide du système d'exploitation / shell sur des commandes telles que limit ou ulimit pour savoir comment imposer des limitations sur les ressources disponibles pour un seul processus. Par exemple, un utilisateur bash pourrait utiliser

ulimit -t 600 -v 4000000

alors qu'un utilisateur csh pourrait utiliser

limit cputime 10m limit vmemoryuse 4096m

pour limiter un processus à 10 minutes de temps processeur et (environ) 4 Go de mémoire virtuelle. (Il existe d'autres options pour définir la RAM utilisée, mais elles ne sont généralement pas respectées.)

Donc, vous devriez vérifier

  1. Quel type de système d'exploitation exécutez-vous sur votre instance EC2
  2. Quel type de build R exécutez-vous sur ce système d'exploitation et assurez-vous que vous exécutez une version 64 bits
  3. Si les deux sont déjà 64 bits, utilisez ulimitpour définir la mémoire, par exemple 8 Go:ulimit -v 8000000
logc
la source