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

有没有更好的办法?


当前回答

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

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

其他回答

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

试试上面的代码。这对我很有用:)

这对我来说很管用:

函数ClickConnect () { console.log(“工作”); document.querySelector(“paper-icon-button”).click () } Const myjob = setInterval(点击连接,60000)

如果不工作,试着通过运行:

clearInterval (myjob)

从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);

好吧,我不是一个Python人,我也不知道这个“Colab”的实际用途是什么。我把它作为一个构建系统,哈哈。我曾经在里面设置ssh转发,然后放这个代码,让它运行,是的,它可以工作。

import getpass
authtoken = getpass.getpass()

下面的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按钮。