如何防止 Google Colab 断开连接?
- 2024-10-22 08:29:00
- admin 原创
- 100
问题描述:
有没有办法以编程方式防止Google Colab因超时断开连接?
以下描述了导致笔记本电脑自动断开连接的情况:
Google Colab 笔记本的空闲超时为 90 分钟,绝对超时为 12 小时。这意味着,如果用户超过 90 分钟未与其 Google Colab 笔记本交互,其实例将自动终止。此外,Colab 实例的最大生命周期为 12 小时。
当然,我们希望自动最大限度地利用实例,而不必不断地手动与其交互。在这里,我将假设常见的系统要求:
Ubuntu 18.04 LTS (Bionic Beaver)、Windows 10 或 Mac 操作系统
对于基于 Linux 的系统,使用流行的桌面环境,如GNOME 3 或Unity
Firefox 或 Chromium 浏览器
我应该在这里指出,这种行为并不违反 Google Colab 的使用条款,尽管他们的常见问题解答不鼓励这种行为(简而言之:如果你不是真的需要,从道德上讲,用完所有的 GPU 是不对的)。
我当前的解决方案非常愚蠢:
首先,我关闭屏幕保护程序,这样我的屏幕就一直亮着。
我有一块Arduino开发板,所以我把它变成了一个橡皮鸭 USB设备,并让它在我睡觉时模拟原始的用户交互(只是因为我手头有它用于其他用例)。
还有更好的方法吗?
解决方案 1:
截至 2021 年 3 月,这些方法都不再起作用,因为 Google 添加了一段时间后随机弹出的CAPTCHA按钮。
在此之前,解决方案非常简单,不需要任何 JavaScript。只需在底部创建一个包含以下行的新单元格:
while True:pass
现在将单元格保持在运行序列中,以便无限循环不会停止,从而使您的会话保持活动状态。
旧方法:
设置 JavaScript 间隔,每 60 秒单击一次连接按钮。
使用 Ctrl+Shift+I 打开开发者设置(在您的网络浏览器中),然后单击控制台选项卡并在控制台提示符下键入此内容。(对于 Mac,请按 Option+Command+I)
function ConnectButton(){
console.log("Connect pushed");
document.querySelector("#top-toolbar > colab-connectbutton").shadowRoot.querySelector("#connect").click()
}
setInterval(ConnectButton,60000);
解决方案 2:
由于连接按钮的 id 现在已更改为“colab-connect-button”,因此可以使用以下代码来继续点击该按钮。
function ClickConnect(){
console.log("Clicked on connect button");
document.querySelector("colab-connect-button").click()
}
setInterval(ClickConnect,60000)
如果仍然不起作用,请按照以下步骤操作:
右键单击连接按钮(在 colab 的右上角)
点击检查
获取按钮的 HTML ID 并替换以下代码
function ClickConnect(){
console.log("Clicked on connect button");
document.querySelector("Put ID here").click() // Change id here
}
setInterval(ClickConnect,60000)
解决方案 3:
对我来说以下是例子:
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)
版本 2:
如果您希望停止该功能,以下是新代码:
var startClickConnect = function startClickConnect(){
var clickConnect = function clickConnect(){
console.log("Connnect Clicked - Start");
document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
console.log("Connnect Clicked - End");
};
var intervalId = setInterval(clickConnect, 60000);
var stopClickConnectHandler = function stopClickConnect() {
console.log("Connnect Clicked Stopped - Start");
clearInterval(intervalId);
console.log("Connnect Clicked Stopped - End");
};
return stopClickConnectHandler;
};
var stopClickConnect = startClickConnect();
要停止,请调用:
stopClickConnect();
解决方案 4:
嗯,这对我有用:
在控制台中运行以下代码,它将阻止您断开连接。
Ctrl
++打开检查器视图。然后转到控制台Shift
。I
function ClickConnect(){
console.log("Working");
document.querySelector("colab-toolbar-button#connect").click()
}
setInterval(ClickConnect,60000)
如何防止 Colaboratory 断开连接
解决方案 5:
使用pynput在你的电脑上创建 Python 代码:
from pynput.mouse import Button, Controller
import time
mouse = Controller()
while True:
mouse.click(Button.left, 1)
time.sleep(30)
在您的桌面上运行此代码。然后将鼠标箭头指向(Colaboratory 的左侧面板 - 文件部分)任意目录的目录结构。
此代码将每 30 秒持续点击目录一次,因此目录将每 30 秒扩展和缩小一次。因此您的会话不会过期。
重要提示--您必须在您的电脑上运行此代码。
解决方案 6:
我没有单击Connect
按钮,而是单击了按钮Comment
以保持会话处于活动状态(2020 年 8 月):
function ClickConnect(){
console.log("Working");
document.querySelector("#comments > span").click()
}
setInterval(ClickConnect,5000)
解决方案 7:
我使用宏程序定期点击 RAM/Disk 按钮来整晚训练模型。诀窍是配置一个宏程序,使其点击 Ram/Disk Colab 工具栏按钮两次,两次点击之间间隔很短,这样即使运行时断开连接,它也会重新连接。(第一次点击用于关闭对话框,第二次点击用于重新连接)。但是,您仍然必须整晚打开笔记本电脑,并且可能要锁定 Colab 选项卡。
解决方案 8:
先前的答案在一些脚本的帮助下可能会起到很好的作用。
对于这种不使用脚本的烦人断线问题,我有一个解决方案(或一种技巧),尤其是当你的程序必须从你的 Google Drive 读取数据时,比如训练深度学习网络模型,使用脚本执行操作reconnect
是没有用的,因为一旦你与 Colaboratory 断开连接,程序就死机了。你应该手动再次连接到你的 Google Drive,让你的模型能够再次读取数据集,但脚本不会这样做。
我已经测试过很多次了并且效果很好。
当您使用浏览器(我使用 Chrome)在 Colaboratory 页面上运行程序时,请记住,一旦程序开始运行,就不要对浏览器进行任何操作,例如:切换到其他网页、打开或关闭另一个网页等等。只需将其留在那里,等待程序运行完毕。您可以切换到其他软件(例如PyCharm)继续编写代码,但不能切换到另一个网页。
我不知道为什么打开或关闭或切换到其他页面会导致 Colaboratory 页面的连接问题,但每次我尝试打扰我的浏览器,比如做一些搜索工作时,我与 Colaboratory 的连接很快就会中断。
解决方案 9:
也许许多以前的解决方案不再有效。例如,下面的代码继续在 Colab 中创建新的代码单元,但仍然有效。毫无疑问,创建一堆代码单元会带来不便。如果在运行的几个小时内创建了太多的代码单元并且没有足够的 RAM,浏览器可能会冻结。
这会反复创建代码单元——
function ClickConnect(){
console.log("Working");
document.querySelector("colab-toolbar-button").click()
}setInterval(ClickConnect,60000)
但我发现下面的代码可以运行,不会造成任何问题。在 Colab 笔记本选项卡中,Ctrl + Shift + i
同时单击键并将以下代码粘贴到控制台中。120000 个间隔就足够了。
function ClickConnect(){
console.log("Working");
document.querySelector("colab-toolbar-button#connect").click()
}setInterval(ClickConnect,120000)
我已经在 2020 年 11 月在 Firefox 中测试了此代码。它也可以在 Chrome 上运行。
解决方案 10:
尝试一下:
function ClickConnect(){
console.log("Working");
document
.querySelector("#top-toolbar > colab-connect-button")
.shadowRoot
.querySelector("#connect")
.click()
}
setInterval(ClickConnect,60000)
解决方案 11:
更新中(2021 年 7 月)。
function ConnectButton(){
console.log("Working");
document.querySelector("#connect").click()
}
setInterval(ConnectButton, 60000);
解决方案 12:
我不相信 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)
其他人建议将按钮名称更改为#colab-connect-button,但会出现同样的错误。
运行时启动后,按钮将更改为显示 RAM/DISK,并显示一个下拉菜单。单击下拉菜单将创建一个<DIV class=goog menu...>
以前未在 DOM 中显示的新菜单,其中包含 2 个选项“连接到托管运行时”和“连接到本地运行时”。如果控制台窗口已打开并显示元素,则单击下拉元素时可以看到此 DIV 出现。只需在出现的新窗口中将鼠标焦点移动到两个选项之间,即可将其他元素添加到 DOM,一旦鼠标失去焦点,它们就会从 DOM 中完全删除,即使没有单击。
解决方案 13:
您可以为笔记本添加书签以使其保持连接:
function ClickConnect(){
console.log("Clicked on star button");
document.querySelector("iron-icon#star-icon").click()
}
setInterval(ClickConnect, 60000)
现在你每分钟都可以看到星星的闪烁。
解决方案 14:
使用 Python 与Selenium:
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()
解决方案 15:
YouTube 视频“如何防止 Google 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)
解决方案 16:
截至目前June 2023
,这是用于防止 Google colab 因不活动而断开连接的有效 javascript 代码。
function keepAliveProgrammatically() {
document.querySelector('colab-connect-button').shadowRoot.querySelector("#connect").click();
}
上面的函数负责单击compute resources
按钮。该按钮每 6 秒被单击一次。下面的代码片段负责运行该函数。
const keepAliveProgrammaticallyInterval = setInterval(() => {
keepAliveProgrammatically();
}, 6000);
要停止代码,请使用下面的代码片段。
clearInterval(keepAliveProgrammaticallyInterval);
解决方案 17:
我尝试了之前答案中的代码,但它们对我来说不起作用。所以这是我用于重新连接的 JavaScript 代码。
let interval = setInterval(function(){
let ok = document.getElementById('ok');
if(ok != null){
console.log("Connect pushed");
ok.click();
}},60000)
您可以用同样的方式(在浏览器的控制台上运行)来运行它。
如果要停止脚本,可以输入clearInterval(interval)
并再次运行setInterval(interval)
。
解决方案 18:
这对我有用:
function ClickConnect(){
console.log("Working");
document.querySelector("paper-icon-button").click()
}
Const myjob = setInterval(ClickConnect, 60000)
运行代码片段Hide results展开片段
如果不起作用,请尝试通过运行来清除它:
clearInterval(myjob)
运行代码片段Hide results展开片段
解决方案 19:
这个对我有用(好像他们改变了按钮的类名或id):
function ClickConnect(){
console.log("Working");
document.querySelector("colab-connect-button").click()
}
setInterval(ClickConnect,60000)
运行代码片段Hide results展开片段
解决方案 20:
只需在您想要运行的单元格后运行下面的代码即可避免数据丢失。
!python
要退出此模式,请写入
exit()
解决方案 21:
投票最多的答案对我来说确实有效,但它会让“管理会话”窗口一次又一次地弹出。
我已经通过使用下面的浏览器控制台自动单击刷新按钮解决了这个问题
function ClickRefresh(){
console.log("Clicked on refresh button");
document.querySelector("paper-icon-button").click()
}
setInterval(ClickRefresh, 60000)
欢迎在此要点中贡献更多代码片段https://gist.github.com/Subangkar/fd1ef276fd40dc374a7c80acc247613e
解决方案 22:
此代码不断单击文件资源管理器窗格中的“刷新文件夹”。
function ClickRefresh(){
console.log("Working");
document.querySelector("[icon='colab:folder-refresh']").click()
}
const myjob = setInterval(ClickRefresh, 60000)
解决方案 23:
GNU Colab让您可以在 Colaboratory 实例上运行标准的持久桌面环境。
确实,它包含一种不让机器因空转而死亡的机制。
这里有一个视频演示。
解决方案 24:
好吧,我找到了一个巧妙的解决方案,可以摆脱
活动会话
自动弹出。我们需要 2 个函数来实现这一点,
与之前的步骤相同。检查 > 控制台 > 逐个粘贴函数
1
function clickConnect() {
try {
document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
// this also works, if above one doesn't work, comment it and uncomment below one
//document.querySelector("colab-connect-button").shadowRoot.getElementById('connect').click();
setTimeout(clickDismiss, 500);
console.log("Keeping Colab Alive!");
} catch (error) {
console.log(error);
}
}
2
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
3
async function clickDismiss() {
try {
// click manage session button
document.querySelector("colab-usage-display").shadowRoot.querySelector("paper-button").click();
} catch (error) {
console.log(error);
}
try {
// leave from manage session window
await sleep(1000);
document.querySelector('colab-sessions-dialog').shadowRoot.querySelector('.dismiss').click();
} catch (error) {
console.log(error);
}
try {
// click close button
await sleep(1000);
document.querySelector("paper-tab").querySelector("paper-icon-button").shadowRoot.getElementById('icon').click();
} catch (error) {
console.log(error);
}
}
4
setInterval(ClickConnect, 60000);
编辑:
所以,如果您不喜欢手动完成所有这些工作,有一种方法可以自动完成所有这些工作!
方法 1. 使用此Chrome 扩展程序即可完成
或者
方式_2。
使用Page-Manipulator扩展
单击它然后单击添加 Java 脚本按钮 > + 新建 + > 文件名
假设文件名为 ColabAlive > Make
活跃网站 =
colab.research.google.com
匹配页面 =递归
然后使用下面的代码,
显示代码片段
// 1
function clickConnect() {
try {
document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
// this also works, if above one doesn't work, comment it and uncomment below one
//document.querySelector("colab-connect-button").shadowRoot.getElementById('connect').click();
setTimeout(clickDismiss, 500);
console.log("Keeping Colab Alive!");
} catch (error) {
console.log(error);
}
}
//2
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
//3
async function clickDismiss() {
try {
// click manage session button
document.querySelector("colab-usage-display").shadowRoot.querySelector("paper-button").click();
} catch (error) {
console.log(error);
}
try {
// leave from manage session window
await sleep(1000);
document.querySelector('colab-sessions-dialog').shadowRoot.querySelector('.dismiss').click();
} catch (error) {
console.log(error);
}
try {
// click close button
await sleep(1000);
document.querySelector("paper-tab").querySelector("paper-icon-button").shadowRoot.getElementById('icon').click();
} catch (error) {
console.log(error);
}
}
//4
setInterval(clickConnect, 60000);
Run code snippetHide resultsExpand snippet
单击“活动”,然后重新加载 > 完成
感谢 Oshayr、Albert Einstein以及所有在此发布解决方案的人。
解决方案 25:
下面的 JavaScript 代码对我有用。感谢@artur.k.space。
function ColabReconnect() {
var dialog = document.querySelector("colab-dialog.yes-no-dialog");
var dialogTitle = dialog && dialog.querySelector("div.content-area>h2");
if (dialogTitle && dialogTitle.innerText == "Runtime disconnected") {
dialog.querySelector("paper-button#ok").click();
console.log("Reconnecting...");
} else {
console.log("ColabReconnect is in service.");
}
}
timerId = setInterval(ColabReconnect, 60000);
在 Colab 笔记本中,同时按下Ctrl
++Shift
键I
。将脚本复制并粘贴到提示行中。然后Enter
在关闭编辑器之前按下 。
通过这样做,该功能将每 60 秒检查一次,查看屏幕上的连接对话框是否显示,如果显示,则该功能将OK
自动为您单击按钮。
解决方案 26:
2023 年 7 月版本:
function ConnectButton() {
console.log("trying to click connect button");
let colabConnectButton = document.querySelector("colab-connect-button");
if (colabConnectButton && colabConnectButton.shadowRoot) {
let actualButton = colabConnectButton.shadowRoot.querySelector("colab-toolbar-button#connect");
if (actualButton) {
actualButton.click();
console.log("connect button clicked");
} else {
console.log("button not found");
}
} else {
console.log("button not found");
}
}
setInterval(ConnectButton, 60000);
解决方案 27:
尝试这样做可以避免在您尝试模拟每分钟单击工具栏连接按钮时出现的所有烦人的对话框。您只需将其复制粘贴到您的控制台,调用该方法,然后就可以在笔记本上工作了。
function connectRefresher() {
window.ConnectButtonIntervalId = setInterval(function ConnectButton(){
console.log("connected");
document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
document.querySelector("colab-sessions-dialog").shadowRoot.querySelector("#footer > div > paper-button").click();
console.log("closed the dialog!!");
},60000);
}
function clearRefresher() {
console.log("clear Interval called !!");
clearInterval(window.ConnectButtonIntervalId);
}
connectRefresher(); //to connect the refresher
clearRefresher(); //to disconnect the refresher
解决方案 28:
我建议使用 jQuery(Colaboratory 似乎默认包含 jQuery)。
function ClickConnect(){
console.log("Working");
$("colab-toolbar-button").click();
}
setInterval(ClickConnect, 60000);
解决方案 29:
我对以下 JavaScript 函数有疑问:
function ClickConnect(){
console.log("Clicked on connect button");
document.querySelector("colab-connect-button").click()
}
setInterval(ClickConnect, 60000)
它们在实际单击按钮之前就在控制台上打印“单击连接按钮”。
从这个问题的不同答案可以看出,自 Google Colab 推出以来,连接按钮的 ID 已经更改了几次。而且将来也可能会改变。
因此,如果您要复制此问题的旧答案,它可能会显示“单击了连接按钮”,但实际上可能不会这样做。当然,如果单击不起作用,它会在控制台上打印错误,但如果您可能不小心看不到它怎么办?
所以你最好这样做:
function ClickConnect(){
document.querySelector("colab-connect-button").click()
console.log("Clicked on connect button");
}
setInterval(ClickConnect,60000)
您肯定会知道它是否真的有效。
解决方案 30:
以下最新的解决方案对我有用:
function ClickConnect(){
colab.config
console.log("Connnect Clicked - Start");
document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
console.log("Connnect Clicked - End");
};
setInterval(ClickConnect, 60000)
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件