是否有一种方法以编程方式防止谷歌Colab超时断开?
笔记本电脑自动断开连接的情况如下:
谷歌Colab笔记本的空闲超时为90分钟,绝对超时为12小时。这意味着,如果用户没有与他的谷歌Colab笔记本进行交互超过90分钟,其实例将自动终止。此外,Colab实例的最大生存期为12小时。
自然,我们希望自动地从实例中挤出最大的值,而不必不断地手动与它交互。这里我将假设常见的系统需求:
Ubuntu 18.04 LTS (Bionic Beaver), Windows 10或Mac操作系统
对于基于linux的系统,使用流行的桌面环境,如GNOME 3或Unity
Firefox或Chromium浏览器
我应该在这里指出,这样的行为并不违反谷歌Colab的使用条款,尽管根据他们的常见问题解答,这是不鼓励的(简而言之:从道德上讲,如果你真的不需要它,那么用完所有的gpu是不可以的)。
我目前的解决方案非常愚蠢:
首先,我把屏保关掉,这样我的屏幕就一直开着。
我有一个Arduino板,所以我只是把它变成了一个橡胶鸭子USB设备,让它在我睡觉的时候模拟原始的用户交互(只是因为我手头有其他用例)。
有没有更好的办法?
从2021年3月起,这些方法都不起作用,因为谷歌增加了一个CAPTCHA按钮,一段时间后随机弹出。
在此之前,解决方案非常简单,不需要任何JavaScript。只需要在底部创建一个新单元格,内容如下:
while True:pass
现在将单元格保持在运行序列中,这样无限循环就不会停止,从而使会话保持活动状态。
老方法:
设置JavaScript间隔,每60秒单击一次连接按钮。
用Ctrl+Shift+I打开开发者设置(在您的web浏览器中),然后单击控制台选项卡,并在控制台提示符上键入此选项卡。(mac按Option+Command+I键)
function ConnectButton(){
console.log("Connect pushed");
document.querySelector("#top-toolbar > colab-connectbutton").shadowRoot.querySelector("#connect").click()
}
setInterval(ConnectButton,60000);
我不相信JavaScript解决方案还能继续工作。我在我的笔记本里写了:
from IPython.display import display, HTML
js = ('<script>function ConnectButton(){ '
'console.log("Connect pushed"); '
'document.querySelector("#connect").click()} '
'setInterval(ConnectButton,3000);</script>')
display(HTML(js))
当你第一次执行Run all(在JavaScript或Python代码开始之前)时,控制台显示:
Connected to
wss://colab.research.google.com/api/kernels/0e1ce105-0127-4758-90e48cf801ce01a3/channels?session_id=5d8...
然而,每次JavaScript运行时,你都会看到console.log部分,但点击部分只是给出:
Connect pushed
Uncaught TypeError: Cannot read property 'click' of null
at ConnectButton (<anonymous>:1:92)
其他人建议按钮名称已更改为# coab -connect-button,但这也会产生相同的错误。
After the runtime is started, the button is changed to show RAM/DISK, and a drop down is presented. Clicking on the drop down creates a new <DIV class=goog menu...> that was not shown in the DOM previously, with 2 options "Connect to hosted runtime" and "Connect to local runtime". If the console window is open and showing elements, you can see this DIV appear when you click the dropdown element. Simply moving the mouse focus between the two options in the new window that appears adds additional elements to the DOM, as soon as the mouse looses focus, they are removed from the DOM completely, even without clicking.