Límite de memoria, vectorizar vs bucles, etc.

2 views
Skip to first unread message

Anna Sáez de Tejada Cuenca

unread,
Aug 8, 2015, 5:35:41 PM8/8/15
to Grupo de usuarios de R de la UGR
Hola,

Estoy escribiendo una función que será mi función objetivo a minimizar usando optim o similares, así que previsiblemente se tendrá que evaluar bastantes veces.

Intenté vectorizarlo todo, y luego aplicar las operaciones pertinentes, y sé cómo hacerlo, pero involucra almacenar un array en tres dimensiones y se queja de que no tiene suficiente espacio. Las dimensiones del problema son N~32000 y J~226 (tamaño de los datos), y M que puedo elegir yo pero debería ser del orden de N para ir bien.

Lo que he hecho es, en cambio, no vectorizar completamente sino hacer un for sobre j=1:J, ya que como J es pequeño pensé que no era un pecado tan grande, y trabajar con matrices NxM. Haciéndolo así, con M=10^4 funciona, con M=10^5 vuelve a dar error de falta de memoria (no se puede almacenar un vector de 2.7 Gb).

Mis dudas son, ¿es una buena solución hacer un bucle de 200 iteraciones para evitar el problema de memoria? ¿Sería mejor vectorizar todo si pudiera usar más memoria? ¿Hay alguna manera de poder almacenar variables más grandes? Conozco sparseMatrix, pero no permite arrays tridimensionales, ¿verdad? Y si lo hago con el bucle sobre j, las matrices bidimensionales no son sparse para nada, están todas llenas.

Nota: lo estoy ejecutando en un servidor que se supone que tiene más memoria y potencia que un ordenador personal, aunque no sé exactamente cómo comprobar cuánta memoria tiene, y si mi problema es de falta de memoria o de que R no almacena variables tan grandes y ya.

José Luis López Pino

unread,
Aug 11, 2015, 12:54:37 PM8/11/15
to gur...@googlegroups.com
R siempre dando la lata con las limitaciones de memoria. Me suena el problema :)

Yo lo intentaría con el paquete "ff", estoy casi seguro de que puedes almacenar arrays tridimensionales en un fichero y te deja manipularlo de una forma relativamente fácil. Pero creo que tendrás que adaptar tu código para que no acceda a todo el array al mismo tiempo. 

Otros paquetes que quizás te puedan echar una mano son:
- bigmemory: debe ser algo parecido a ff.
- foreach: para programación distribuida "facilita", si tienes que distribuir la computación entre distintos nodos y los cálculos no requieren comunicación entre ellos.

Saludos y suerte con ello.

Regards // Saludos // Mit Freundlichen Grüßen // Bien cordialement,
Pino

--
Has recibido este mensaje porque estás suscrito al grupo "Grupo de usuarios de R de la UGR" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a gur-ugr+u...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a gur...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/gur-ugr.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Anna Sáez de Tejada Cuenca

unread,
Aug 12, 2015, 6:15:43 PM8/12/15
to Grupo de usuarios de R de la UGR
¡¡¡¡Muchísimas gracias!!!!
Reply all
Reply to author
Forward
0 new messages