Recientemente comencé a usar Jupyter Lab y mi problema es que trabajo con conjuntos de datos bastante grandes (generalmente el conjunto de datos en sí es aproximadamente 1/4 de la RAM de mi computadora). Después de algunas transformaciones, guardadas como nuevos objetos de Python, tiendo a quedarme sin memoria. El problema es que cuando me acerco al límite de RAM disponible y realizo cualquier operación que necesite otro espacio de RAM, mi computadora se congela y la única forma de solucionarlo es reiniciarlo. ¿Es este un comportamiento predeterminado en Jupyter Lab / Notebook o hay algunas configuraciones que debo establecer? Normalmente, esperaría que el programa se bloquee (como en RStudio, por ejemplo), no toda la computadora
12
Respuestas:
Absolutamente la solución más sólida para este problema sería usar contenedores Docker. Puede especificar cuánta memoria asignar a Jupyter, y si el contenedor se queda sin memoria, simplemente no es gran cosa (solo recuerde guardar con frecuencia, pero eso es evidente).
Este blog te llevará la mayor parte del camino. También hay algunas instrucciones decentes que configuran Jupyter Lab a partir de una de las imágenes de Jupyter disponibles gratuitamente y mantenidas oficialmente aquí:
https://medium.com/fundbox-engineering/overview-d3759e83969c
y luego puede modificar el
docker run
comando como se describe en el tutorial como (por ejemplo, para 3GB):Para ver la sintaxis de las opciones de memoria de la ventana acoplable, consulte esta pregunta:
¿Qué unidad espera la opción "--memory" de la ventana acoplable?
fuente
Si está utilizando Ubuntu, consulte los asesinos de OOM, puede obtener información desde aquí
Puedes usar temprano . Se puede configurar como lo desee, por ejemplo
earlyoom -s 90 -m 15
, iniciaráearlyoom
y cuando el tamaño de intercambio sea inferior a% 90 y la memoria sea inferior a% 15, matará el proceso que causa OOM y evitará que todo el sistema se congele. También puede configurar la prioridad de los procesos.fuente
También trabajo con conjuntos de datos muy grandes (3GB) en Jupyter Lab y he estado experimentando el mismo problema en Labs. No está claro si necesita mantener el acceso a los datos
del
pretransformados ; si no, he comenzado a usar variables de trama de datos grandes no utilizadas si no las necesito.del
elimina variables de tu memoria. Editar **: hay múltiples posibilidades para el problema que estoy encontrando. Encuentro esto más a menudo cuando uso una instancia remota de jupyter, y también en Spyder cuando realizo grandes transformaciones.p.ej
Jakes también puede encontrar útil este hilo en flujos de trabajo de datos grandes . He estado buscando en Dask para ayudar con el almacenamiento de memoria.
He notado en Spyder y Jupyter que el congelamiento generalmente ocurre cuando se trabaja en otra consola mientras se ejecuta una consola de memoria grande. En cuanto a por qué simplemente se congela en lugar de estrellarse, creo que esto tiene algo que ver con el núcleo. Hay un par de problemas de memoria abiertos en el github de IPython : # 10082 y # 10117 parecen más relevantes. Un usuario aquí sugiere deshabilitar la finalización de la pestaña
jedi
o actualizar jedi.En 10117 proponen comprobar la salida de
get_ipython().history_manager.db_log_output
. Tengo los mismos problemas y mi configuración es correcta, pero vale la pena verificarfuente
También puede usar portátiles en la nube, como Google Colab aquí . Han proporcionado la facilidad para RAM recomendadas y el soporte para el portátil Jupyter es por defecto.
fuente
Creo que deberías usar trozos. Como eso:
Para obtener más información, échale un vistazo: https://towardsdatascience.com/why-and-how-to-use-pandas-with-large-data-9594dda2ea4c
Sugiero que no agregue una lista nuevamente (probablemente la RAM se sobrecargará nuevamente). Deberías terminar tu trabajo en ese ciclo for.
fuente
Voy a resumir las respuestas de la siguiente pregunta . Puede limitar el uso de memoria de su programa. A continuación, esta será la función
ram_intense_foo()
. Antes de llamar, debe llamar a la funciónlimit_memory(10)
fuente
No hay ninguna razón para ver la salida completa de un gran marco de datos. Ver o manipular grandes marcos de datos utilizará innecesariamente grandes cantidades de los recursos de su computadora.
Lo que sea que esté haciendo se puede hacer en miniatura. Es mucho más fácil trabajar en la codificación y manipulación de datos cuando el marco de datos es pequeño. La mejor manera de trabajar con big data es crear un nuevo marco de datos que tome solo una pequeña porción o una pequeña muestra del gran marco de datos. Luego puede explorar los datos y codificar en el marco de datos más pequeño. Una vez que haya explorado los datos y haga funcionar su código, simplemente use ese código en el marco de datos más grande.
La forma más fácil es simplemente tomar el primer n, número de las primeras filas del marco de datos utilizando la función head (). La función head solo imprime n, número de filas. Puede crear un mini marco de datos utilizando la función de cabeza en el marco de datos grande. A continuación, elegí seleccionar las primeras 50 filas y pasar su valor a small_df. Esto supone que BigData es un archivo de datos que proviene de una biblioteca que abrió para este proyecto.
Esto funcionará la mayor parte del tiempo, pero a veces el marco de datos grandes viene con variables preseleccionadas o con variables ya agrupadas. Si los datos grandes son así, necesitaría tomar una muestra aleatoria de las filas de los datos grandes. Luego use el código que sigue:
fuente