是否有一种方法以编程方式防止谷歌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中测试了这段代码。它也会在铬上工作。

其他回答

我不相信JavaScript解决方案还能继续工作。我在我的笔记本里写了:

    from IPython.display import display, HTML
    js = ('<script>function ConnectButton(){ '
           'console.log("Connect pushed"); '
           'document.querySelector("#connect").click()} '
           'setInterval(ConnectButton,3000);</script>')
    display(HTML(js))

当你第一次执行Run all(在JavaScript或Python代码开始之前)时,控制台显示:

Connected to
wss://colab.research.google.com/api/kernels/0e1ce105-0127-4758-90e48cf801ce01a3/channels?session_id=5d8...

然而,每次JavaScript运行时,你都会看到console.log部分,但点击部分只是给出:

Connect pushed

Uncaught TypeError: Cannot read property 'click' of null
 at ConnectButton (<anonymous>:1:92)

其他人建议按钮名称已更改为# coab -connect-button,但这也会产生相同的错误。

After the runtime is started, the button is changed to show RAM/DISK, and a drop down is presented. Clicking on the drop down creates a new <DIV class=goog menu...> that was not shown in the DOM previously, with 2 options "Connect to hosted runtime" and "Connect to local runtime". If the console window is open and showing elements, you can see this DIV appear when you click the dropdown element. Simply moving the mouse focus between the two options in the new window that appears adds additional elements to the DOM, as soon as the mouse looses focus, they are removed from the DOM completely, even without clicking.

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

import getpass
authtoken = getpass.getpass()

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

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

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

YouTube视频“如何防止谷歌Colab断开|一个简单的解决方案”中的解决方案对我很有效。

安装pynput库,它允许您控制和监视输入设备。

pip install pynput

现在,在您的本地机器上执行这段代码,并将鼠标光标放在正在运行的Colab笔记本中的一个空单元格中。

from pynput.mouse import Controller,Button
import time

mouse = Controller()

while True:
    mouse.click(Button.left,1)
    print('clicked')

    time.sleep(5)