我目前正在使用jupyter笔记本在远程服务器上训练神经网络.我用以下内容进行了设置:
现在,当我在浏览器中重新连接到jupyter笔记本时,我看不到训练单元的当前输出,只看到我在观看前10分钟训练时看到的输出.
我试图为此找到一个解决方案,我认为,对于这个问题存在一些git问题,但它们已经过时了,我无法弄清楚这个问题是否已经解决.
编辑//让我的意图更加清晰,因为我发现stackoverflow上的一些线程正在解决这个问题:我不想等待训练完成,因为我可能想要在它完成之前杀死训练,当它绝对我不希望它会走的路.因此,某种"实时"输出或至少是常规输出会很好.
Mer*_*ury 11
这是 jupyter 笔记本中长期缺少的功能。我使用几乎相同的设置:我的笔记本在远程服务器的 tmux 会话内运行,并且我在本地通过 ssh 隧道使用它。
在进行任何工作之前,我在第一个单元格中运行以下代码片段:
import sys
import logging
nblog = open("nb.log", "a+")
sys.stdout.echo = nblog
sys.stderr.echo = nblog
get_ipython().log.handlers[0].stream = nblog
get_ipython().log.setLevel(logging.INFO)
%autosave 5
Run Code Online (Sandbox Code Playgroud)
现在假设我运行一个需要一段时间才能完成的单元(如训练运行)。就像是:
import time
def train(num_epochs):
for epoch in range(num_epochs):
time.sleep(1)
print(f"Completed epoch {epoch}")
train(1000)
Run Code Online (Sandbox Code Playgroud)
现在train(1000),在运行时,在前 10 秒后,我想做其他事情并关闭浏览器,并断开远程连接。
(请注意修改后的短自动保存持续时间;我补充说,因为我经常忘记在关闭浏览器选项卡之前保存笔记本。)
500 秒过去后,我可以重新连接到远程服务器并在浏览器中打开笔记本。我的该单元的日志将在“Completed epoch 9”之后停止打印,即当我断开连接时。然而,内核实际上仍然train在后端运行,并且它也会显示“忙”。
现在,我们只需打开文件即可nb.log找到所有日志,包括关闭浏览器和连接后的日志。我们可以在闲暇时不断刷新nb.log文件,新的日志会不断出现,直到内核运行完毕train()。
train()现在,如果我们想在完成之前停止,我们只需按jupyter 中的“中断”按钮即可。内核将被释放,我们可以运行其他东西(键盘中断错误消息也将显示在您的 nb.log 文件中)。我们所有预先计算的笔记本变量和导入的库仍然存在,因为内核实际上并未断开连接。
虽然这不是一个非常复杂的解决方案,但我发现它很容易实现
这是 Jupiter Notebook 官方网站上仍然悬而未决的问题。请参阅https://github.com/jupyterlab/jupyterlab/issues/2833 “重新连接到正在运行的会话:保留输出”
如果您使用 .py 文件而不是 .ipynb 文件(jupyter 笔记本),并在该 .py 文件中打印结果以测试代码的操作。
要将 .ipynb 转换为 .py 文件,您可以使用以下命令:
'jupyter nbconvert --to script example.ipynb'
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用 python 脚本而不是 jupyter 笔记本文件,这将使事情变得更容易。
在您的脚本中,在您认为必要的阶段编写 prints() ,以便您可以在 Tmux 终端中看到它。因此,您可以随时 (ctr+c) 终止训练,如果需要,Tmux 可以保存会话,只需按“ctr-b + d”即可从会话中分离
| 归档时间: |
|
| 查看次数: |
1018 次 |
| 最近记录: |