【问题标题】:Google Colab session timeoutGoogle Colab 会话超时
【发布时间】:2019-06-01 02:12:44
【问题描述】:

FAQs 中提到

虚拟机在空闲一段时间后会被回收,并具有系统强制执行的最长生命周期。

最长生命周期和空闲时间是固定的还是可变的?有没有办法预测它们?

【问题讨论】:

    标签: google-colaboratory


    【解决方案1】:

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

    解决方案:

    步骤:

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

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

    或者你也可以试试下面的sn-p:

    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)
    

    【讨论】:

    • 谢谢。它对我有用。好的!现在我不必每天多次上传我的数据文件了。
    • 嗨@Ashish 我收到此错误Uncaught TypeError: Cannot read property 'click' of null at ClickConnect (<anonymous>:3:55)。你能帮忙吗?
    • 元素 "colab-toolbar-button#connect" 似乎不再存在,所以我怀疑这仍然有效。
    • 自 2020 年 8 月起,更改为:document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
    • 对我来说,经过一段时间的培训,我只看到会话横幅,底部没有“关闭”按钮 - 即我必须在横幅外部(灰色部分)单击任何位置而不是在特定的按钮上。我该如何自动化呢?编辑:上面的代码运行没有错误,但不做任何事情。
    【解决方案2】:

    改进@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);
    

    【讨论】:

      【解决方案3】:

      克服会话超时的另一种方法是在 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()
      

      在命令行窗口运行此脚本,然后按“s”键开始自动单击,按“e”键退出,然后将鼠标指针留在代码单元上(通常它会在一定延迟后单击)。

      【讨论】:

      • 安装 pynput-1.6.8 后,当我尝试在 Google Colab 中运行该代码时出现 DisplayNameError。错误在第 2 行:from pynput.mouse import Button, Controller,它说:DisplayNameError: Bad display name "" 有人让它在 Google Colab 中工作吗?
      • 尝试在 google colab 之外运行它,例如在 spyder 中甚至在提示命令中
      【解决方案4】:

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

      【讨论】:

      • 如果它是打开的并且我一直在处理它,比如循环(更改参数,然后执行,比如说,2-3 小时,检查结果)怎么办?在这种情况下,会话也会在 12 小时后终止吗?
      • 现实是 18 分钟是当我实际观察到它时它断开连接,而不是阅读谷歌的文档。我上传的文件还在。有时文件消失了,我必须重新上传它。我得去看看那个超时是多少。
      • @GeoffreyAnderson :如果你挂载你的驱动器并上传到它,你的数据不会消失,如果它在像csv, image, video, etc 这样的文件中。使用from google.colab import drive; drive.mount('/content/gdrive') 非常简单
      • 我认为 12 小时的数字不再准确。我在没有任何互动的情况下让我的训练开放,它在大约 3 小时后关闭了会话。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 2021-06-01
      • 2020-05-04
      • 2019-06-15
      • 2010-12-05
      • 1970-01-01
      • 2020-08-30
      相关资源
      最近更新 更多