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

有没有更好的办法?


当前回答

这对我来说很管用:

在控制台中运行以下代码,它将阻止您断开连接。

按Ctrl + Shift + I打开检查器视图。然后去控制台。

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

如何防止协作中心断开连接

其他回答

这对我来说很管用:

在控制台中运行以下代码,它将阻止您断开连接。

按Ctrl + Shift + I打开检查器视图。然后去控制台。

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

如何防止协作中心断开连接

好吧,我找到了一个很好的解决办法,可以摆脱

活动会话

自动弹出。我们需要两个函数,

与前面的步骤相同。逐个检查>控制台>粘贴功能

1

function clickConnect() {
    try {
         document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
        // this also works, if above one doesn't work, comment it and uncomment below one
        //document.querySelector("colab-connect-button").shadowRoot.getElementById('connect').click();
        setTimeout(clickDismiss, 500);
        console.log("Keeping Colab Alive!");    
    } catch (error) {
        console.log(error);
    }
}

2

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

3

async function clickDismiss() {
    
    try {   
        
        // click manage session button
        document.querySelector("colab-usage-display").shadowRoot.querySelector("paper-button").click();
    
        } catch (error) {
        console.log(error);
    }
    
        try {
            // leave from manage session window
            await sleep(1000);
            document.querySelector('colab-sessions-dialog').shadowRoot.querySelector('.dismiss').click();
                } catch (error) {
        console.log(error);
    }
    
        try {   
            // click close button
            await sleep(1000);
            document.querySelector("paper-tab").querySelector("paper-icon-button").shadowRoot.getElementById('icon').click();
                } catch (error) {
        console.log(error);
    }
    
}

4

setInterval(ClickConnect, 60000);

编辑:

所以,如果你不喜欢手动做所有这些事情,有一种方法来自动化所有这些!

Way_1。使用这个Chrome扩展和完成

or

Way_2。

使用page -机械手扩展 点击它,然后点击添加Java脚本按钮> +新建+ >文件名 文件名是ColabAlive > Make 活跃网站= colab.research.google.com 匹配页面=递归 然后使用下面的代码,

// 1 function clickConnect() { try { document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click(); // this also works, if above one doesn't work, comment it and uncomment below one //document.querySelector("colab-connect-button").shadowRoot.getElementById('connect').click(); setTimeout(clickDismiss, 500); console.log("Keeping Colab Alive!"); } catch (error) { console.log(error); } } //2 function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } //3 async function clickDismiss() { try { // click manage session button document.querySelector("colab-usage-display").shadowRoot.querySelector("paper-button").click(); } catch (error) { console.log(error); } try { // leave from manage session window await sleep(1000); document.querySelector('colab-sessions-dialog').shadowRoot.querySelector('.dismiss').click(); } catch (error) { console.log(error); } try { // click close button await sleep(1000); document.querySelector("paper-tab").querySelector("paper-icon-button").shadowRoot.getElementById('icon').click(); } catch (error) { console.log(error); } } //4 setInterval(clickConnect, 60000);

单击“活动”,然后重新加载> done

这要归功于Oshayr, Albert Einstein和每个在这里发表他们的解决方案的人。

我尝试了之前答案中的代码,但它们不适合我。这里是重新连接的JavaScript代码。

let interval = setInterval(function(){
let ok = document.getElementById('ok');
if(ok != null){
   console.log("Connect pushed");
ok.click();
}},60000)

您可以以同样的方式使用它(在浏览器的控制台上运行)来运行它。

如果您想停止脚本,可以输入clearInterval(interval),并希望再次运行setInterval(interval)。

尝试这样做可以避免在您尝试模拟每分钟单击工具栏连接按钮时出现所有恼人的对话框。你可以复制粘贴到你的控制台,调用这个方法,你就可以在笔记本上工作了。

function connectRefresher() {
       window.ConnectButtonIntervalId = setInterval(function ConnectButton(){
                console.log("connected"); 
                document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
                document.querySelector("colab-sessions-dialog").shadowRoot.querySelector("#footer > div > paper-button").click();
                console.log("closed the dialog!!"); 
            },60000);
    }
    
function clearRefresher() { 
           console.log("clear Interval called !!");
           clearInterval(window.ConnectButtonIntervalId);
    }

 connectRefresher(); //to connect the refresher
 clearRefresher(); //to disconnect the refresher

我一直在寻找一个解决方案,直到我发现了一个Python 3脚本,它随机地来回移动鼠标并单击,总是在同一个地方。但这足以骗过协作实验室,让它以为我在笔记本上活动,它不会断开连接。

import numpy as np
import time
import mouse
import threading

def move_mouse():
    while True:
        random_row = np.random.random_sample()*100
        random_col = np.random.random_sample()*10
        random_time = np.random.random_sample()*np.random.random_sample() * 100
        mouse.wheel(1000)
        mouse.wheel(-1000)
        mouse.move(random_row, random_col, absolute=False, duration=0.2)
        mouse.move(-random_row, -random_col, absolute=False, duration = 0.2)
        mouse.LEFT
        time.sleep(random_time)


x = threading.Thread(target=move_mouse)
x.start()

sudo -H pip3 install <package_name>

你只需要用sudo(在你的本地机器上)运行它(因为它控制鼠标),它就能工作,让你充分利用协作实验室的12小时会话。

学分:对于那些使用Colab (Pro):防止会话由于不活动而断开