当内存不足时,Jupyter Lab会冻结计算机-如何防止它发生?

jak*_*kes 10 python jupyter-notebook jupyter-lab

我最近开始使用Jupyter Lab,但我的问题是我要处理非常大的数据集(通常,数据集本身大约是计算机RAM的1/4)。经过几次转换后,另存为新的Python对象,我倾向于耗尽内存。问题是,当我接近可用的RAM限制并执行需要另一个RAM空间的任何操作时,计算机将冻结,而修复它的唯一方法是重新启动它。这是Jupyter Lab / Notebook中的默认行为,还是我应该设置的某些设置?通常,我希望程序崩溃(例如在RStudio中),而不是整个计算机

emr*_*rah 7

如果您使用的是基于 Linux 的操作系统,请查看 OOM 杀手,您可以从这里获取信息。我不知道 Windows 的详细信息。

您可以使用earlyoom。它可以根据需要进行配置,例如earlyoom -s 90 -m 15将启动earlyoom时交换大小小于90%,且内存小于15%,它会杀死导致OOM进程,防止整个系统死机和。您还可以配置进程的优先级。


kd8*_*d88 6

对于这个问题,最可靠的解决方案绝对是使用 Docker 容器。您可以指定要为 Jupyter 分配多少内存,如果容器内存不足,那也没什么大不了的(记住要经常保存,但这不言而喻)。

这个博客将帮助您完成大部分工作。还有一些不错的说明,从这里免费提供的、官方维护的 Jupyter 图像之一设置 Jupyter 实验室:

https://medium.com/fundbox-engineering/overview-d3759e83969c

然后您可以docker run按照教程中的描述修改命令(例如,对于 3GB):

docker run --memory 3g <other docker run args from tutorial here>
Run Code Online (Sandbox Code Playgroud)

有关 docker 内存选项的语法,请参阅此问题:

docker 运行“--memory”选项需要什么单位?


Eli*_*eth 1

我还在 Jupyter Lab 上处理非常大的数据集 (3GB),并且在 Labs 上遇到了同样的问题。目前尚不清楚您是否需要维护对预转换数据的访问,如果不需要,我已经开始使用del未使用的大型数据帧变量(如果不需要它们)。del从你的记忆中删除变量。编辑**:我遇到的问题有多种可能性。当我使用远程 jupyter 实例时以及在间谍程序中执行大型转换时,我更经常遇到这种情况。

例如

df = pd.read('some_giant_dataframe') # or whatever your import is
new_df = my_transform(df)
del df # if unneeded.
Run Code Online (Sandbox Code Playgroud)

杰克斯,您可能还会发现此线程对大数据工作流程很有帮助。我一直在研究Dask来帮助内存存储。

我注意到在spyder和jupyter中,当大内存控制台运行时在另一个控制台中工作时通常会发生冻结。至于为什么只是死机而不是崩溃,我认为这与内核有关。IPython github 中存在一些内存问题- # 10082和 # 10117似乎最相关。这里的一位用户建议禁用 tab 补全jedi或更新 jedi。

在 10117 中,他们建议检查get_ipython().history_manager.db_log_output. 我有同样的问题,我的设置是正确的,但值得检查