繁体   English   中英

如何调试垂死的 Jupyter Python3 内核?

[英]How to debug dying Jupyter Python3 kernel?

我正在使用 Python 3 内核在 Jupyter 笔记本上使用 scipy 和 scikits.learn 运行一些代码。 在计算过程中,内核正在重新启动,并显示一个消息对话框,说“内核似乎已经死了。 它将自动重新启动。”。 底层 Jupyter 进程的 stderr 只记录内核死亡并将重新启动的事实,而没有任何有用的消息。 有没有办法检查潜在的错误? 这可能是来自某些 C++ 代码中的段错误,但我只能猜测。 我在服务器上搜索了任何相关日志,但没有找到任何有用的信息。

对于机器学习项目,在 8 gigs RAM 笔记本电脑中读取近 5000 张图像作为 numpy 数组时遇到了完全相同的问题。 在对我的图像的分辨率和相应的 numpy 数组的大小进行了一些数学计算后,我认为 8 gig 的 RAM 不足以处理图像。 经过网上的大量研究,其中包括更新CUDA,cuDNN,降级TensorFlow(他们在导入相关模块/包时遇到同样的错误),更新numpy到最新版本和更新intel Math Kernel版本(命令:“conda install -c intel mkl”)(一整天的研究)。 对我有用的解决方案是在 Google colab 上运行模型训练过程。

在此处输入图片说明

现在,回到你的问题:显示的对话框:“内核似乎已经死了。 它会自动重启。” 本身不是“错误”。 通过清除所有变量并重新启动内核,它更像是“Jupyter Notebook 帮助自己”。 它是 Jupyter Notebook 发送 SOS 信号,并从自身获取帮助以使其不会崩溃。 否则会导致重新启动的 Jupyter Notebook 没有未保存的更改。 (好吧,它会自动保存,但不会“自动检查点”)

Jupyter Notebook 的这种“响应”仅仅是因为达到了笔记本电脑的最大 RAM 容量。 - 这是“潜在错误”(响应)。 这将释放资源,使您能够重新启动程序。 还记得打开过多 chrome 标签时计算机挂起的情况吗? 或者运行一个有太多变量值需要存储的程序(比如我的 5000 张图片)? 当 RAM 容量被充分利用时,这可能是 Jupyter Notebook 的替代响应。 挂。 或者崩溃。

但相反,开发人员已经足够好心,让它能够照顾好自己。

注意1:运行与.py 脚本相同的代码,错误会更详细。

注意 2:如果您使用的是 CUDA,请记住,即使会话终止,Jupyter Notebook 也无法释放 CUDA 资源。 所以这可能是它重新启动的原因。

我正在使用Python 3内核在Jupyter笔记本上使用scipy和scikits.learn运行一些代码。 在计算过程中,内核正在重新启动,并显示一个消息对话框,说“内核似乎已经死了。 它将自动重新启动。”。 底层 Jupyter 进程的 stderr 只记录内核死亡并将重新启动的事实,而没有任何有用的消息。 有没有办法检查潜在的错误? 可能是来自某些C ++代码的段错误,但我只能猜测。 我在服务器上搜索了任何相关日志,但没有找到任何有用的信息。

添加到已确认的解释列表中(第 2 点):

  1. 需要太多内存
  2. 堆栈溢出 - 递归步骤太多

就我而言,当我将它作为 Python 脚本运行时,我得到了这个:

致命的 Python 错误:无法从堆栈溢出中恢复。 ...中止(核心转储)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM