长时间运行的Jupyter笔记本/实验室?

14

我在 ec2 实例上的 tmux 会话中运行 Jupyter。我的单元格运行时间非常长,但当我关闭浏览器或笔记本盖子时,笔记本不再输出单元格(并可能导致 Python 内核崩溃)。

这是我在远程实例上启动实验室的方式:

jupyter lab --ip=0.0.0.0 --port=5002 --no-browser --allow-root

我正在寻找一种解决方案,可以无限期地运行笔记本电脑,而不会丢失数据,也不必让我的本地计算机保持开启状态。

  • 我不想使用VNC或X窗口转发(太慢)
  • 我不想将我的代码重写为Python脚本(仅需要在jupyter labs中工作)

肯定有一个解决方案!

更新:

以下的“nohup”解决方案不起作用:

enter image description here

运行此单元格并关闭浏览器后,重新打开时没有输出:

enter image description here

2个回答

9

编辑(澄清后):

您可以使用一些Jupyter魔法,在关闭浏览器或笔记本电脑后继续运行单元格,然后在返回后打印输出。以下是如何完成此操作的方法:

%%capture stored_output

import time
time.sleep(30)
print("Hi")

返回后,运行以下内容:

stored_output.show()
# Hi

翻译:

您需要使用nohup启动笔记本。

nohup jupyter notebook &

只有在返回 shell 时才需要添加“&”。笔记本将在后台运行,当您关闭 SSH 连接时,其进程 ID 不会被终止。


@M.R. 感谢您更新问题,看到我对答案的编辑。 - samredai
我遇到了一个类似的问题,但是%%capture并没有解决它。内核似乎仍然停留在会话中,但是没有继续处理(看起来好像崩溃了)。https://stackoverflow.com/questions/77050024/cannot-reconnect-to-jupyter-lab-kernel-running-on-aws-ec2-after-disconnection - undefined

3

我认为你想要的是不可能的,因为当你关闭笔记本盖子使它进入睡眠模式时,即使你设法保持SSH连接的活跃,浏览器中的笔记本客户端也将停止与服务器进行交互。你可以更改操作系统设置以防止系统在关闭笔记本盖子后休眠,但这与保持计算机开启并使用电池没有区别。

我的做法是:

  • 在screen或tmux中启动远程Jupyter服务器,这样如果SSH连接断开,服务器进程和Python内核仍然在运行。
  • 以一种方式编写长时间运行的单元格,使得输出要么不会被写入stdout,要么会被记录在服务器的文件中。

当您唤醒机器并重新启动SSH连接时,单元格将已完成运行,您可以在另一个单元格中检查结果或直接查看日志。


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