是否有一种方法以编程方式防止谷歌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设备,让它在我睡觉的时候模拟原始的用户交互(只是因为我手头有其他用例)。
有没有更好的办法?
我有一个问题与这些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)
你一定会看到它是否真的有效。
我一直在寻找一个解决方案,直到我发现了一个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):防止会话由于不活动而断开