Jupyter重连运行中内核后如何继续打印中间输出结果?
解决方案
方案1:提前将标准输出重定向到日志文件
运行训练代码前添加重定向逻辑,所有打印内容会同步写入本地日志文件,浏览器断开后也可直接在服务器端查看日志。示例代码:import sys class TeeLogger: def __init__(self, filename, mode='a', terminal=sys.stdout): self.file = open(filename, mode, buffering=1) self.terminal = terminal def write(self, message): self.terminal.write(message) self.file.write(message) self.flush() def flush(self): self.terminal.flush() self.file.flush() # 替换标准输出、错误输出流 sys.stdout = TeeLogger('train_log.log', terminal=sys.stdout) sys.stderr = TeeLogger('train_error.log', terminal=sys.stderr)后续在服务器终端执行
tail -f train_log.log即可实时查看最新输出。方案2:直接读取内核输出缓存
若训练已经启动未提前配置日志,可在Notebook新建单元格运行以下代码,拉取内核当前已缓存的输出内容:import sys print(sys.stdout.getvalue())基于ipykernel的环境也可以直接执行魔法命令
%history -o获取历史输出记录。方案3:用终端会话托管Jupyter进程
后续启动Jupyter服务前,先在服务器上创建tmux/screen会话,将Jupyter进程放在会话内运行。浏览器断开后,重新连接服务器进入对应的tmux/screen会话,就能直接看到Jupyter服务打印的所有内核输出内容。方案4:安装内核监控扩展
提前安装jupyterlab-kernelspy扩展,可在内核监控面板查看所有运行中内核的完整输入输出流,浏览器重连后也能拉取历史流内容。
如果当前训练已运行较长时间不想中断,优先尝试方案2获取已缓存的输出,同时可以在训练的回调逻辑中临时补充文件日志写入逻辑,避免后续输出继续丢失。
内容的提问来源于stack exchange,提问作者yahaha
相关产品推荐
相关产品推荐

