从远程服务器持续使用 Jupyter Notebook
Posted
技术标签:
【中文标题】从远程服务器持续使用 Jupyter Notebook【英文标题】:Persistent use of Jupyter Notebook from remote server 【发布时间】:2018-01-31 19:44:20 【问题描述】:我使用ssh -L
连接到远程服务器,但如果我关闭笔记本电脑盖或连接丢失,jupyter notebook 将断开连接。
在我重新连接到远程服务器后,“最后一个”会话丢失了。
可以做些什么来让它持久化?
screen
可以帮忙吗?
【问题讨论】:
实际上,长时间运行的笔记本会失败。我的建议是您将笔记本转换为脚本,然后按照@MichaelD 的建议使用屏幕运行它。我知道这不能回答 OP 的问题,但它会解决他们的问题 【参考方案1】:在远程服务器上,您应该在screen
会话中打开您的 jupyter,如果您失去与服务器的连接并恢复它,它将使其持久化。
-
在您的计算机上:
ssh -L xxxx:localhost:yyyy server
。
screen
。
jupyter notebook --no-browser --port=yyyy
。 [在远程服务器上]
在您的浏览器中:localhost:xxxx
。
手动断开并重新连接:
-
退出屏幕窗口:
control + a
然后d
。
与服务器断开连接:control + d
然后重新连接ssh -L xxxx:localhost:yyyy
。
(可选)您可以使用screen -r
重新打开屏幕窗口,虽然没有必要。
返回您的笔记本或重新打开localhost:xxxx
。
【讨论】:
要重新连接,您只需使用ssh -L xxxx:localhost:yyyy server
重新连接到远程服务器。如果您想访问正在运行 jupyter 的屏幕,您可以执行screen -r
。请注意,重新连接到远程服务器就足够了,您不必重新打开屏幕。
我使用 tmux 来持续运行程序。
什么是xxxx
和yyyy
。你能解释一下要分配的端口吗?`
基本上,您应该在本地机器 (xxxx
) 和远程机器 (yyyy
) 上使用未使用的端口。例如,xxxx
可以是8888
,yyyy
也可以是8888
。【参考方案2】:
持久化 Jupyter 服务器会话的标准用法是使用 nohup
和 &
;在您的远程服务器中,IP 地址为xx.xx.xx.xx
:
nohup jupyter notebook --no-browser --ip xx.xx.xx.xx --port yyyy &
现在,即使您关闭笔记本电脑或断开连接,您也可以通过将浏览器指向 xx.xx.xx.xx:yyyy
来重新连接
【讨论】:
如何选择xx.xx.xx.xx
?
@MichaelD 这应该是您的服务器机器的 IP 地址
我试过了,它对我不起作用。 (我在本地机器上运行nohup ...
)
这对我不起作用。也许是因为服务器,在本地网络中...(从 10.xx 开始)
@MichaelD 应该不是问题——我的也是在本地网络中(以 192.xx.. 开头);你有没有在服务器中使用ifconfig
来获取它的IP?【参考方案3】:
添加到@BiBi 的答案...
我建议您查看tmux,而不是screen
。特别是,如果您将 tmux 与 Tmux Plugin Manager 结合并安装 Tmux Resurrect,即使在远程服务器重新启动后,您也可以返回到之前的 Tmux 会话。
tmux 的快捷方式与屏幕的快捷方式有些相同,只是 control + a
被 control + b
取代。当然,tmux 允许您配置自定义快捷方式。
【讨论】:
【参考方案4】:BiBi 的回答是正确的。但是我遇到了我的 ssh 连接意外终止并且尝试重新连接时端口转发不再起作用的情况。可能远程机器上有一些悬空的进程,不确定。
无论如何,在这些情况下,我使用socat
在远程机器上的两个本地端口之间进行代理:
# jupyter notebook/lab running in screen on port yyyy, then your connection dies...
ssh -L xxxx:localhost:zzzz
socat tcp-listen:zzzz,reuseaddr,fork tcp:localhost:yyyy
这样可以避免在不同的端口上重新启动 jupyter
【讨论】:
以上是关于从远程服务器持续使用 Jupyter Notebook的主要内容,如果未能解决你的问题,请参考以下文章
Linux Ubuntu下Jupyter Notebook的安装
Spark:如何从其他用户以“yarn_client”模式远程启动 Jupyter