【解决】浏览器连接远程服务器上运行的jupyter notebook 界面刷新或关闭后失去最新的输出
环境:macos(客户端), centos(服务器), chrome, python, jupyter notebook
最近在本地浏览器访问使用公司服务器配置的jupyter notebook训练模型时遇到了一个问题——训练一个模型往往需要大半天,中途如果电脑网络连接断开,重连后会发现该notebook的输出不会再更新,无法获取epoch的训练结果和训练进度。
遇到这种情况只能盲目的等待,等着模型运行完,再输出结果变量,这样真的好艰难。于是我决定找点办法。
查了一下才发现原来有好多人吐槽过,而且这个问题在6年前的github就被人提出,至今都没有被jupyter团队解决qaqaq....
导致输出不再更新的原因是,当刷新/关闭重开客户端浏览器后,虽然服务器端jupyter一直在运行,但是 存储在本地浏览器 的每个cell的ID改变了,导致cell和服务器返回客户端的输出信息message之间不再有关联。
所以,在使用jupyter的时候,当断网了以后,就淡定重新连网,等待jupyter自己恢复输出就好。 不要 轻易关闭浏览器,更 不要 手贱刷新!不重启不刷新本地浏览器,网络正常连接后jupyter还是可以正常输出的。
虽然这个问题官方没有解决,但是对于想查看jupyter notebook输出的需求,还是有解决的办法的。
我查到了两个方法。
github issue : https:// github.com/jupyter/jupy ter/issues/83
stack overflow : https:// stackoverflow.com/quest ions/63305963/reconnecting-to-jupyter-notebook-loses-output
方法一 :使用%%capture魔术命令捕捉cell的输出。
例如,在单元格首行输入%%capture <VARIABLE NAME>,在这样,输出将被保存<VARIABLE NAME>,在程序完成后,使用print(<VARIABLE NAME>.stdout)即可获取单元格的输出。
%%capture魔术命令的使用: https:// stackoverflow.com/quest ions/66153425/how-to-capture-jupyter-cell-output-without-supressing-live-printing
当然,如果像我一样,在程序运行前没有使用%capture,中途重启浏览器失去了最新输出,想查看最新输出且对输出的要求不高,那么可以试试方法二。
方法二 :使用Chrome的开发者工具,直接查看没有正确输出的信息。
For anyone looking for a quick workaround:
1. Open the Chrome dev tools
2. Go to network tab
3. ClickWS
(Websockets)
4. Click on any of the active websockets
5. Go to messages tab
6. Click on any of the messages after the first
7. Expand content
You should see your output there
Chrome右上角三个点->更多工具->开发者工具->网络->WS
刷新/重新加载 ,以重新录制获取最新的网络活动。
随便点一个数据 ->在下方数据栏有详细的未展示数据内容。
展开json ,找到'content'字段,这时就可以看到我们想要的了。