Google Colab 会话超时

Google Colab session timeout

FAQs中提到

Virtual machines are recycled when idle for a while, and have a maximum lifetime enforced by the system.

最大生命周期和空闲时间是固定的还是可变的?有什么方法可以预测吗?

如果关闭浏览器,则为 90 分钟。如果您保持浏览器打开状态,则需要 12 小时。此外,如果您关闭浏览器时代码单元格为 运行,如果同一单元格尚未完成,则当您重新打开浏览器时它仍将是 运行(当前正在执行的单元格保持 运行 即使在浏览器关闭后)

问题: 我必须训练我的模型几个小时,但如果我不经常点击,google colab 会在 30 分钟后自动断开连接,导致所有数据丢失。

解决方案:

步骤:

  1. 通过键入 Ctrl+ Shift + i 打开检查器视图,然后单击顶部的控制台选项卡。
  2. 将以下代码片段粘贴到控制台底部,然后按回车键
function ClickConnect(){
console.log("Working"); 
document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
}
setInterval(ClickConnect,60000)
  1. 相信我,这就是所有人。 上面的代码将继续点击页面并防止它断开连接。

下图显示了上述步骤的控制台视图:-

或者您也可以尝试以下代码段:

interval = setInterval(function() { 
    console.log("working")
    var selector = "#top-toolbar > colab-connect-button"
    document.querySelector(selector).shadowRoot.querySelector("#connect").click()
    setTimeout(function() {
            document.querySelector(selector).shadowRoot.querySelector("#connect").click()
    }, 1000)
}, 60*1000)

另一种克服会话超时的方法是 运行 python 中的自动点击脚本(特别是如果您不打算在 运行 在 colab 中运行代码时使用计算机)

代码如下:(一定要先pip install pynput)

import threading
from pynput.mouse import Button, Controller
from pynput.keyboard import Listener, KeyCode


delay = 20 #this is the delay of the autoclick (20 seconds here)
button = Button.left
start_stop_key = KeyCode(char='s')
exit_key = KeyCode(char='e')


class ClickMouse(threading.Thread):
    def __init__(self, delay, button):
        super(ClickMouse, self).__init__()
        self.delay = delay
        self.button = button
        self.running = False
        self.program_running = True

    def start_clicking(self):
        self.running = True

    def stop_clicking(self):
        self.running = False

    def exit(self):
        self.stop_clicking()
        self.program_running = False

    def run(self):
        while self.program_running:
            while self.running:
                mouse.click(self.button)
                time.sleep(self.delay)
            time.sleep(0.1)


mouse = Controller()
click_thread = ClickMouse(delay, button)
click_thread.start()


def on_press(key):
    if key == start_stop_key:
        if click_thread.running:
            click_thread.stop_clicking()
        else:
            click_thread.start_clicking()
    elif key == exit_key:
        click_thread.exit()
        listener.stop()


with Listener(on_press=on_press) as listener:
    listener.join()

运行 命令行上的脚本 window,然后按 "s" 键开始自动点击,按 "e" 键退出,然后将鼠标指针停留在代码单元格(通常会在一定延迟后点击)。

改进@Ashish Anand 的回答

开始时使用此代码:

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

以及需要停止时的如下代码:

clearInterval(clicker);