27
votes

I am using jupyter notebook with Python3 on windows 10. My computer has 8GB RAM and at least 4GB of my RAM is free.

But when I want to make a numpy ndArray with size 6000*6000 with this command: np.zeros((6000, 6000), dtype='float64') I got this : Unable to allocate array with shape (6000, 6000) and data type float64

I don't think this could use more then 100MB RAM. I tried to change the number to see what happens. The biggest array I can make is (5000,5000). Did I make a mistake in estimating how much RAM I need?

2
It seems to be a limitation hardcoded on your OS. I am not sure about the windows environment, but there is solution stated here: stackoverflow.com/questions/57507832/… that seems to be addressing the same problem on a ubuntu. I suggest you try that one. - nima
@nima: 6K*6K floats (8 bytes each) will be 36 million * 8 bytes = only 288MB, which will be fine on most laptops with >= 4GB. But that other question is about a 3D array of total size 283 GB, i.e. 1000x larger and >> physical memory of most laptops. - smci
The obvious way to check how much memory the numpy ndarray actually takes is to run under plain Python console (not Jupyter), create the ndarray, and see how much memory was allocated. Moreover if it works under console and fails under Jupyter, then you know it's due to Jupyter or its configuration. - smci

2 Answers

30
votes

Jupyter notebook has a default memory limit size. You can try to increase the memory limit by following the steps:
1) Generate Config file using command:

jupyter notebook --generate-config

NotebookApp.max_buffer_size = your desired value


Alternatively, you can simply run the Notebook using below command:

 jupyter notebook --NotebookApp.max_buffer_size=your_value
1
votes

For Jupyter you need to consider 2 processes:

  1. The local HTTP server (which is based on Tornado)
  2. Kernel process (normally local but can be distributed and depends on your config).

max_buffer_size is a Tornado Web Server setting, corresponds to the Maximum amount of incoming data to buffer and defaults to 100MB (104857600). (https://www.tornadoweb.org/en/stable/httpserver.html)

Based on this PR, this value seems to have been increased to 500 MB in Notebook.

Tornado HTTP server does not allow to my knowledge to define the max memory, it runs as a Python3 process.

For the kernel, you should look at the command defined kernel spec.

An option to try would be this one