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

有没有更好的办法?


当前回答

使用pynput在PC上创建Python代码:

from pynput.mouse import Button, Controller
import time

mouse = Controller()

while True:
    mouse.click(Button.left, 1)
    time.sleep(30)

在桌面上运行这段代码。然后将鼠标箭头指向(协作实验室的左面板-文件部分)任意目录上的目录结构。

这段代码将每30秒继续单击目录,因此它将每30秒展开和收缩一次。因此您的会话不会过期。

重要的是,你必须在你的PC上运行这段代码。

其他回答

也许以前的许多解决方案不再有效。例如,下面的代码继续在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中测试了这段代码。它也会在铬上工作。

var startColabHandler = function startColabHandler(interval = 60000, enableConnectButton = false) {
    console.log("colabHandler - configure - start: " + new Date());
    
    var colabClick = function colabClick() {
        console.log("colabHandler - click - start: " + new Date());
        
        if (enableConnectButton === true) {
            var button1 = document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect");
            
            if (button1) {
                button1.click()
            }
        }
        
        button2 = document.querySelector("html body colab-dialog.yes-no-dialog paper-dialog div.buttons paper-button#ok");
        
        if (button2) {
            button2.click()
        }
        
        console.log("colabHandler - click - end: " + new Date());
    };

    var intervalId = setInterval(colabClick, interval);

    window.stopColabHandler = function stopColabHandler() {
        console.log("colabHandler - stop - start: " + new Date());
        
        clearInterval(intervalId);
        
        console.log("colabHandler - stop - start: " + new Date());
    };

    console.log("colabHandler - configure - end: " + new Date());
};

我推荐使用jQuery(似乎collaboratory默认包含jQuery)。

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

当所有这些都失败时,您可以通过订阅谷歌Colab Pro+获得后台执行

使用pynput在PC上创建Python代码:

from pynput.mouse import Button, Controller
import time

mouse = Controller()

while True:
    mouse.click(Button.left, 1)
    time.sleep(30)

在桌面上运行这段代码。然后将鼠标箭头指向(协作实验室的左面板-文件部分)任意目录上的目录结构。

这段代码将每30秒继续单击目录,因此它将每30秒展开和收缩一次。因此您的会话不会过期。

重要的是,你必须在你的PC上运行这段代码。