R bosque aleatorio en Amazon ec2 Error: no se puede asignar un vector de tamaño 5.4 Gb

9

Estoy entrenando modelos de bosque aleatorios en R randomForest()con 1000 árboles y marcos de datos con aproximadamente 20 predictores y 600K filas. En mi computadora portátil todo funciona bien, pero cuando me muevo a Amazon EC2, para ejecutar lo mismo, aparece el error:

Error: cannot allocate vector of size 5.4 Gb
Execution halted

Estoy usando el c3.4xlargetipo de instancia, así que es bastante robusto. ¿Alguien sabe una solución para que esto se ejecute en esta instancia? Me encantaría conocer los matices de memoria que causan este problema solo en la instancia ec2 y no en mi computadora portátil (Procesador OS X 10.9.5 Intel Core i7 de 2.7 GHz; Memoria 16 GB 1600 MHz DDR3)

Gracias.

Ethan
fuente

Respuestas:

5

Aquí hay algunos consejos (¡use bajo su propio riesgo!):

Si las medidas más simples mencionadas anteriormente no ayudan O desea lograr una mayor escalabilidad y / o rendimiento , incluida la capacidad de paralelizar el proceso en una sola máquina o en varias máquinas, considere usar el bigrfpaquete R: http: // cran. r-project.org/web/packages/bigrf . Vea también esta discusión: https://stackoverflow.com/q/1358003/2872891 .

Aleksandr Blekh
fuente
2

Adicional a otras ideas: reduzca sus datos hasta que descubra lo que puede ejecutar en la instancia de Amazon. Si no puede hacer 100k filas, entonces algo está muy mal, si falla en 590k filas, entonces es marginal.

La instancia de c3.4xlarge tiene 30 Gb de RAM, así que sí, debería ser suficiente.

Hombre espacial
fuente
2

Siempre es útil simplemente buscar en Google el error exacto que está viendo, excluyendo detalles como la memoria real del vector. Para mí, el primer éxito fue una documentación interesante llamada " R: límites de memoria de R ", donde, bajo "Unix", se puede leer:

El límite de espacio de direcciones es específico del sistema: los sistemas operativos de 32 bits imponen un límite de no más de 4 Gb: a menudo es de 3 Gb. La ejecución de ejecutables de 32 bits en un sistema operativo de 64 bits tendrá límites similares: los ejecutables de 64 bits tendrán un límite específico del sistema esencialmente infinito (por ejemplo, 128Tb para Linux en cpus x86_64).

Consulte la ayuda del sistema operativo / shell en comandos como limit o ulimit para saber cómo imponer limitaciones a los recursos disponibles para un solo proceso. Por ejemplo, un usuario bash podría usar

ulimit -t 600 -v 4000000

mientras que un usuario csh podría usar

limit cputime 10m limit vmemoryuse 4096m

limitar un proceso a 10 minutos de tiempo de CPU y (aproximadamente) 4 Gb de memoria virtual. (Hay otras opciones para configurar la RAM en uso, pero generalmente no se cumplen).

Entonces, deberías comprobar

  1. ¿Qué tipo de sistema operativo está ejecutando en su instancia EC2?
  2. ¿Qué tipo de compilación R está ejecutando en ese sistema operativo y asegúrese de ejecutar una versión de 64 bits?
  3. Si ambos ya tienen 64 bits, utilícelos ulimitpara configurar la memoria en, por ejemplo, 8 Gb:ulimit -v 8000000
logc
fuente