如何增加Jupyter笔记本的内存限制?

50

我正在使用安装有Python3的Windows 10系统中的Jupyter Notebook。我的计算机有8GB RAM,其中至少有4GB的RAM可用。

但是,当我想要使用以下命令创建一个大小为6000*6000的numpy ndArray时: np.zeros((6000, 6000), dtype='float64') 我得到了以下错误:无法分配形状为(6000, 6000)和数据类型为float64的数组

我认为这不应超过100MB的RAM。 我尝试更改数字以查看发生了什么。 最大的数组大小是(5000,5000)。 我在估计需要多少RAM时犯了一个错误吗?


似乎是操作系统固有的限制。我不确定在Windows环境下是否存在此问题,但这里有一个解决方案:https://dev59.com/dVMH5IYBdhLWcg3w8l0D,该解决方案似乎可以解决Ubuntu上类似的问题。建议您尝试这个方案。 - nima
@nima:6K * 6K个float(每个8个字节)将是36百万 * 8个字节 =仅288MB,在大多数拥有> = 4GB的笔记本电脑上都可以正常运行。但是另一个问题涉及总大小为283 GB的3D数组,即比大多数笔记本电脑的物理内存要大1000倍且>>。 - smci
2
检查numpy ndarray实际占用多少内存的明显方法是在纯Python控制台(而非Jupyter)下运行,创建ndarray,并查看分配了多少内存。此外,如果在控制台下运行正常,但在Jupyter下失败,则说明问题出在Jupyter或其配置上。 - smci
2个回答

58
Jupyter notebook有一个默认的内存限制大小。您可以尝试按照以下步骤来增加内存限制:
  1. 使用以下命令生成配置文件:

    jupyter notebook --generate-config
    
  2. 打开位于jupyter文件夹内的jupyter_notebook_config.py文件,并编辑以下属性:

    NotebookApp.max_buffer_size = 您所需的值
    

    记得在属性值前面删除#

  3. 保存并运行Jupyter笔记本。 现在它应该能够使用设置的内存值。 同时,不要忘记从Jupyter文件夹内运行笔记本。


或者,您可以使用以下命令直接运行笔记本:
jupyter notebook --NotebookApp.max_buffer_size=your_value

6
我如何检查笔记本是否使用正确的配置文件启动? - LuizAngioletti
6
不确定是否有更新,但该回答似乎不正确。正如名称所示,“max_buffer_size”限制的是缓冲区,而不是整个内存使用情况。并且它似乎是HTTP服务器(tornado)的缓冲区。 - de1
3
我们如何知道要放哪个值?我的意思是...你如何计算它是最好的,应该考虑哪些因素? - Ariadne R.
2
The Jupyter folder is in your home directory, ~/.jupyter. - Sabito stands with Ukraine
1
这些信息的形式是以字节(bytes)、千字节(kilobytes)、兆字节(megabytes)、千兆字节(gigabytes)呈现,还是看起来像100 MB或者10 GB这样? - jamiel22
显示剩余2条评论

6
对于Jupyter,您需要考虑两个进程:
  1. 本地HTTP服务器(基于Tornado)
  2. 内核进程(通常为本地,但可以分布式并取决于您的配置)。
max_buffer_size是Tornado Web服务器设置,对应于缓冲的最大传入数据量,默认为100MB(104857600)。 (https://www.tornadoweb.org/en/stable/httpserver.html)
根据这个 PR ,Notebook中这个值似乎已经增加到了500 MB。
据我所知,Tornado HTTP服务器不允许定义最大内存,它作为Python3进程运行。
对于内核,您应该查看定义的内核规范命令。
尝试的一个选项可以是这个 one

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接