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

有没有更好的办法?


当前回答

只需在想要运行以防止数据丢失的单元格后运行下面的代码。

!python

另外,要退出此模式,请写入

exit()

其他回答

我有一个问题与这些JavaScript函数:

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

在实际点击按钮之前,他们会在控制台上打印“点击连接按钮”。

从这个问题的不同答案中可以看出,自从谷歌Colab推出以来,连接按钮的id已经改变了几次。将来也可能会改变。

如果你要复制这个问题的旧答案,它可能会说“点击连接按钮”,但它可能不会那样做。当然,如果单击不起作用,它将在控制台上打印一个错误,但是如果您可能不会意外地看到它呢?

所以你最好这样做:

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

你一定会看到它是否真的有效。

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

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

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

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

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

这一个为我工作(似乎他们改变了按钮的类名或id):

函数ClickConnect () { console.log(“工作”); document.querySelector(“colab-connect-button”).click () } setInterval (ClickConnect, 60000)

function ClickConnect()
{
    console.log("Working...."); 
    document.querySelector("paper-button#comments").click()
}
setInterval(ClickConnect, 600)

这对我很有效,但要明智地使用它。

对我来说,以下是一些例子:

document.querySelector(“#连接”).click()或 document.querySelector(“colab-toolbar-button #连接”).click()或 document.querySelector(“colab-connect-button”).click ()

我们失误了。

我必须调整它们以适应以下情况:

版本1:

function ClickConnect(){
  console.log("Connnect Clicked - Start"); 
  document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
  console.log("Connnect Clicked - End"); 
};
setInterval(ClickConnect, 60000)

版本2: 如果你想停止这个函数,下面是新代码:

var startClickConnect = function startClickConnect(){
    var clickConnect = function clickConnect(){
        console.log("Connnect Clicked - Start");
        document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
        console.log("Connnect Clicked - End"); 
    };

    var intervalId = setInterval(clickConnect, 60000);

    var stopClickConnectHandler = function stopClickConnect() {
        console.log("Connnect Clicked Stopped - Start");
        clearInterval(intervalId);
        console.log("Connnect Clicked Stopped - End");
    };

    return stopClickConnectHandler;
};

var stopClickConnect = startClickConnect();

为了停止,调用:

stopClickConnect();