如何防止Google Colab断开连接?

Fal*_*nUA 5 python linux jupyter-notebook google-colaboratory

有什么方法可以以编程方式防止Google Colab在超时时断开连接?

下面介绍导致笔记本计算机自动断开连接的情况:

Google Colab笔记本的空闲超时为90分钟,绝对超时为12小时。这意味着,如果用户超过90分钟未与其Google Colab笔记本进行交互,则其实例将自动终止。另外,Colab实例的最大生命周期为12小时。

自然,我们希望自动将最大值从实例中挤出,而不必不断地手动与之交互。在这里,我将假定常见的系统要求:

  • Ubuntu 18 LTS / Windows 10 / Mac操作系统
  • 对于基于Linux的系统,请使用流行的DE,例如Gnome 3或Unity
  • 火狐浏览器

我要在此指出,这种行为不会违反 Google Colab的使用条款,尽管根据其常见问题解答(我们的常见问题),我们不鼓励这样做(简而言之:从道德上讲,如果您真的不需要用尽所有GPU,就不行了) )。

我当前的解决方案非常愚蠢:

  • 首先,我关闭屏幕保护程序,因此我的屏幕始终保持打开状态。
  • 我有一个Arduino开发板,所以我只是将它变成了一个橡胶鸭子USB,并使其在我睡觉时模仿原始用户交互(只是因为我手头有其他用例)。

有更好的方法吗?

小智 60

由于现在连接按钮的id变成了“colab-connect-button”,下面的代码可以用来一直点击按钮。

function ClickConnect(){
    console.log("Clicked on connect button"); 
    document.querySelector("colab-connect-button").click()
}
setInterval(ClickConnect,60000)
Run Code Online (Sandbox Code Playgroud)

如果仍然如此,这不起作用,请按照以下步骤操作:

  1. 右键单击连接按钮(在 colab 的右上角)
  2. 点击检查
  3. 获取按钮的 HTML id 并替换为以下代码
function ClickConnect(){
    console.log("Clicked on connect button"); 
    document.querySelector("Put ID here").click() // Change id here
}
setInterval(ClickConnect,60000)
Run Code Online (Sandbox Code Playgroud)

  • 这是根据新按钮 ID(2020 年 2 月)的当前解决方案 (6认同)
  • 如何停止该脚本的执行? (5认同)
  • @MurtazaKamal Crtl + Shift + I ,转到源并单击暂停按钮。 (2认同)

小智 33

对我而言,以下示例:

  • document.querySelector("#connect").click() 或者
  • document.querySelector("colab-toolbar-button#connect").click() 或者
  • document.querySelector("colab-connect-button").click()

正在抛出错误。

我不得不使它们适应以下内容:

版本 1:

function ClickConnect(){
  console.log("Connnect Clicked - Start"); 
  document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
  console.log("Connnect Clicked - End"); 
};
setInterval(ClickConnect, 60000)
Run Code Online (Sandbox Code Playgroud)

版本 2: 如果您希望能够停止该功能,这里是新代码:

function ClickConnect(){
  console.log("Connnect Clicked - Start"); 
  document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
  console.log("Connnect Clicked - End"); 
};
setInterval(ClickConnect, 60000)
Run Code Online (Sandbox Code Playgroud)

要停止,请致电:

stopClickConnect();
Run Code Online (Sandbox Code Playgroud)


Kav*_*ora 26

嗯,这对我有用 -

在控制台中运行以下代码,它将阻止您断开连接。Ctrl+ Shift + i 打开检查器视图。然后去控制台。

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

如何防止 google colab 断开连接


小智 20

使用 pynput 在你的电脑中创建一个 python 代码

from pynput.mouse import Button, Controller
import time

mouse = Controller()

while True:
    mouse.click(Button.left, 1)
    time.sleep(30)
Run Code Online (Sandbox Code Playgroud)

在您的桌面上运行此代码,然后将鼠标箭头指向任何目录上的(colabs 左侧面板 - 文件部分)目录结构,此代码将每 30 秒继续单击目录,因此它将每 30 秒扩展和收缩一次,因此您的会话不会过期重要 - 你必须在你的电脑上运行这个代码


小智 20

而不是点击连接按钮,我只是点击评论按钮来保持我的会话活跃。(2020 年 8 月)

function ClickConnect(){

console.log("Working"); 
document.querySelector("#comments > span").click() 
}
setInterval(ClickConnect,5000)
Run Code Online (Sandbox Code Playgroud)


Hu *_*ixi 11

借助一些脚本的上述答案可能效果很好。对于没有脚本的恼人断开连接,我有一个解决方案(或一种技巧),尤其是当您的程序必须从您的谷歌驱动器读取数据时,例如训练深度学习网络模型,使用脚本进行reconnect操作是没有用的,因为一次你与你的 colab 断开连接,程序刚刚死了,你应该再次手动连接到你的谷歌驱动器,让你的模型能够再次读取数据集,但脚本不会做那件事。

我已经对其进行了多次测试,并且效果很好。

当您使用浏览器(我使用 Chrome)在 colab 页面上运行程序时,请记住,一旦您的程序开始运行,请勿对您的浏览器进行任何操作,例如:切换到其他网页,打开或关闭其他网页,以及依此类推,只需将它放在那里等待您的程序完成运行,您就可以切换到另一个软件,例如 pycharm 以继续编写您的代码但不切换到另一个网页。我不知道为什么打开或关闭或切换到其他页面会导致 google colab 页面的连接问题,但是每次我尝试打扰我的浏览器时,比如做一些搜索工作,我与 colab 的连接很快就会中断。


小智 9

尝试这个:

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

setInterval(ClickConnect,60000)
Run Code Online (Sandbox Code Playgroud)


Ara*_*san 9

也许以前的许多解决方案不再有效。例如,这个波纹管代码继续在 Colab 中创建新的代码单元,尽管如此。毫无疑问,创建一堆代码单元是一种不便。如果在运行的几个小时内创建了太多的代码单元并且没有足够的 RAM,浏览器可能会冻结。

这会反复创建代码单元——

function ClickConnect(){
console.log("Working"); 
document.querySelector("colab-toolbar-button").click() 
}setInterval(ClickConnect,60000)
Run Code Online (Sandbox Code Playgroud)

但是我发现下面的代码正在运行,它不会引起任何问题。在 Colab notebook 选项卡中,Ctrl + Shift + i同时单击该键并将以下代码粘贴到控制台中。120000个间隔就够了。

function ClickConnect(){
console.log("Working"); 
document.querySelector("colab-toolbar-button#connect").click() 
}setInterval(ClickConnect,120000)
Run Code Online (Sandbox Code Playgroud)

我已于 2020 年 11 月在 Firefox 中测试了此代码。它也适用于 chrome。


Luc*_*ado 9

更新(2021 年 7 月)。

function ConnectButton(){ 
    console.log("Working"); 
    document.querySelector("#connect").click() 
}
setInterval(ConnectButton, 60000);
Run Code Online (Sandbox Code Playgroud)

  • 更新什么?之前答案中的代码?什么样的答案?还有别的事吗?它指的是什么? (2认同)

小智 8

设置一个JavaScript间隔,每60秒点击一次连接按钮。使用Ctrl + Shift + I打开开发人员设置(在您的Web浏览器中),然后单击控制台选项卡,然后在控制台提示符下键入此设置。(对于Mac,请按Option + Command + I)

function ConnectButton(){
    console.log("Connect pushed"); 
    document.querySelector("#connect").click() 
}
setInterval(ConnectButton,60000);
Run Code Online (Sandbox Code Playgroud)

  • 在 Chrome 中,您可以创建书签以一键激活此代码段。只需使用以下 URL 创建一个书签:`javascript:void(setInterval(function(){ console.log("Connect Pushed"); document.querySelector("#top-toolbar > colab-connect-button").shadowRoot。 querySelector("#connect").click(); },60000))` (同一命令的单行版本)。我不确定这是否适用于其他浏览器 (6认同)
  • 它说**未捕获的类型错误:无法读取 ConnectButton 处 null 的属性“单击”** (3认同)
  • 看来你的答案已经过时了 (3认同)
  • 2022 年 2 月 12 日测试,不再工作。 (2认同)

小智 8

我不相信 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 Code Online (Sandbox Code Playgroud)

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

Connected to 
wss://colab.research.google.com/api/kernels/0e1ce105-0127-4758-90e48cf801ce01a3/channels?session_id=5d8...
Run Code Online (Sandbox Code Playgroud)

但是,每次运行 JavaScript 时,您都会看到 console.log 部分,但单击部分只是给出:

Connect pushed

Uncaught TypeError: Cannot read property 'click' of null
 at ConnectButton (<anonymous>:1:92)
Run Code Online (Sandbox Code Playgroud)

其他人建议按钮名称已更改为 #colab-connect-button,但这给出了相同的错误。

运行时启动后,按钮变为显示 RAM/DISK,并显示下拉列表。单击下拉菜单会创建一个<DIV class=goog menu...>以前未在 DOM 中显示的新文件,有 2 个选项“连接到托管运行时”和“连接到本地运行时”。如果控制台窗口打开并显示元素,您可以在单击下拉元素时看到此 DIV 出现。只需在出现的新窗口中的两个选项之间移动鼠标焦点即可向 DOM 添加其他元素,一旦鼠标失去焦点,它们就会从 DOM 中完全移除,甚至无需单击。


小智 7

我使用宏程序定期单击RAM / Disk按钮以整夜训练模型。诀窍是配置一个宏程序,以两次单击Ram / Disk Colab工具栏按钮,两次单击之间的间隔很短,这样即使运行时断开连接,它也将重新连接。(第一次单击用于关闭对话框,第二次单击用于重新连接)。但是,您仍然必须整夜打开笔记本电脑,甚至可以固定Colab选项卡。


Sci*_*iPy 7

使用 python 硒

from selenium.webdriver.common.keys import Keys
from selenium import webdriver
import time   

driver = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver')

notebook_url = ''
driver.get(notebook_url)

# run all cells
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + Keys.F9)
time.sleep(5)

# click to stay connected
start_time = time.time()
current_time = time.time()
max_time = 11*59*60 #12hours

while (current_time - start_time) < max_time:
    webdriver.ActionChains(driver).send_keys(Keys.ESCAPE).perform()
    driver.find_element_by_xpath('//*[@id="top-toolbar"]/colab-connect-button').click()
    time.sleep(30)
    current_time = time.time()
Run Code Online (Sandbox Code Playgroud)


wav*_*per 7

您可以为笔记本添加书签以使其保持连接状态:

function ClickConnect(){
    console.log("Clicked on star button"); 
    document.querySelector("iron-icon#star-icon").click()
}
setInterval(ClickConnect, 60000) 
Run Code Online (Sandbox Code Playgroud)

现在你每分钟都能看到星星的闪烁。


Joa*_*uim 7

YouTube 视频如何防止 Google Colab 断开连接 | 一个简单的解决方案中的解决方案对我有用。

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

pip install pynput
Run Code Online (Sandbox Code Playgroud)

现在在本地计算机上执行此代码,并将鼠标光标放在正在运行的 Colab 笔记本中的空单元格中。

from pynput.mouse import Controller,Button
import time

mouse = Controller()

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

    time.sleep(5)
Run Code Online (Sandbox Code Playgroud)


小智 6

我尝试了上面的代码,但它们对我不起作用。所以这是我用于重新连接的 JS 代码。

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

您可以使用相同的方式(在浏览器的控制台上运行)来运行它。如果要停止脚本,可以输入clearInterval(interval)并希望再次运行setInterval(interval)

我希望这可以帮助你。


小智 5

这对我有用(看起来他们更改了按钮类名或 ID):

function ClickConnect(){
    console.log("Working");
    document.querySelector("colab-connect-button").click()
}
setInterval(ClickConnect,60000)
Run Code Online (Sandbox Code Playgroud)


Har*_*yal 5

更新了一张。这个对我有用。

function ClickConnect(){
console.log("Working"); 
document.querySelector("paper-icon-button").click()
}
Const myjob = setInterval(ClickConnect, 60000)
Run Code Online (Sandbox Code Playgroud)

如果对你们不起作用,请尝试通过运行来清除它: