是否有一种方法以编程方式防止谷歌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设备,让它在我睡觉的时候模拟原始的用户交互(只是因为我手头有其他用例)。

有没有更好的办法?


当前回答

也许以前的许多解决方案不再有效。例如,下面的代码继续在Colab中创建新的代码单元格,但仍然有效。毫无疑问,创建一堆代码单元是不方便的。如果在运行的几个小时内创建了太多的代码单元,并且没有足够的RAM,浏览器可能会冻结。

这将重复创建代码单元格-

function ClickConnect(){
console.log("Working"); 
document.querySelector("colab-toolbar-button").click() 
}setInterval(ClickConnect,60000)

但我发现下面的代码是工作的,它不会引起任何问题。在Colab notebook选项卡中,同时单击Ctrl + Shift + i键并将以下代码粘贴到控制台中。120000个间隔就足够了。

function ClickConnect(){
console.log("Working"); 
document.querySelector("colab-toolbar-button#connect").click() 
}setInterval(ClickConnect,120000)

我在2020年11月在firefox中测试了这段代码。它也会在铬上工作。

其他回答

由于连接按钮的id现在更改为“coab -connect-button”,下面的代码可以用来继续单击按钮。

function ClickConnect(){
    console.log("Clicked on connect button"); 
    document.querySelector("colab-connect-button").click()
}
setInterval(ClickConnect,60000)

如果还是不行,那就按照下面的步骤来做:

右键单击连接按钮(在colab的右上角) 点击inspect 获取按钮的HTML id并在以下代码中进行替换

function ClickConnect(){
    console.log("Clicked on connect button"); 
    document.querySelector("Put ID here").click() // Change id here
}
setInterval(ClickConnect,60000)

下面的JavaScript代码适合我。感谢@artur.k.space。

function ColabReconnect() {
    var dialog = document.querySelector("colab-dialog.yes-no-dialog");
    var dialogTitle = dialog && dialog.querySelector("div.content-area>h2");
    if (dialogTitle && dialogTitle.innerText == "Runtime disconnected") {
        dialog.querySelector("paper-button#ok").click();
        console.log("Reconnecting...");
    } else {
        console.log("ColabReconnect is in service.");
    }
}
timerId = setInterval(ColabReconnect, 60000);

在Colab笔记本中,同时按Ctrl + Shift + I键。将脚本复制并粘贴到提示行中。然后在关闭编辑器之前按Enter。

通过这样做,该函数将每60秒检查一次,看看是否显示屏幕上的连接对话框,如果是,该函数将自动为您单击OK按钮。

我使用宏程序定期点击RAM/Disk按钮来整晚训练模型。诀窍是配置一个宏程序,点击Ram/Disk Colab工具栏按钮两次,两次点击之间的间隔很短,这样即使运行时断开连接,它也会重新连接回来。(第一次点击用于关闭对话框,第二次点击用于重新连接)。 然而,你还是得整晚打开笔记本电脑,可能还得固定Colab标签。

在一些脚本的帮助下,前面的答案可能工作得很好。

我有一个解决方案(或一种技巧),对于没有脚本的恼人的断开连接,特别是当你的程序必须从你的谷歌驱动器读取数据时,比如训练深度学习网络模型,使用脚本进行重新连接操作是没有用的,因为一旦你与协作实验室断开连接,程序就死了。您应该手动连接到您的谷歌驱动器再次使您的模型能够再次读取数据集,但脚本不会做这件事。

我已经测试过很多次了,效果很好。

当你用浏览器(我使用Chrome)在协作页面上运行程序时,只要记住,一旦程序开始运行,就不要对浏览器做任何操作,比如:切换到其他网页,打开或关闭另一个网页,等等。只要把它放在那里,等待你的程序完成运行。你可以切换到另一个软件,比如PyCharm,继续写代码,但不能切换到另一个网页。

我不知道为什么打开或关闭或切换到其他页面会导致协作页面的连接问题,但每次我试图打扰我的浏览器,比如做一些搜索工作,我与协作页面的连接很快就会中断。

投票最多的答案当然适合我,但它使管理会话窗口一次又一次地弹出。 我已经解决了这个问题,使用浏览器控制台自动单击刷新按钮,如下所示

function ClickRefresh(){
    console.log("Clicked on refresh button"); 
    document.querySelector("paper-icon-button").click()
}
setInterval(ClickRefresh, 60000)

请随意在这个gist https://gist.github.com/Subangkar/fd1ef276fd40dc374a7c80acc247613e上贡献更多的片段