是否有一种方法以编程方式防止谷歌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代码。
let interval = setInterval(function(){
let ok = document.getElementById('ok');
if(ok != null){
console.log("Connect pushed");
ok.click();
}},60000)
您可以以同样的方式使用它(在浏览器的控制台上运行)来运行它。
如果您想停止脚本,可以输入clearInterval(interval),并希望再次运行setInterval(interval)。
好吧,我找到了一个很好的解决办法,可以摆脱
活动会话
自动弹出。我们需要两个函数,
与前面的步骤相同。逐个检查>控制台>粘贴功能
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);
编辑:
所以,如果你不喜欢手动做所有这些事情,有一种方法来自动化所有这些!
Way_1。使用这个Chrome扩展和完成
or
Way_2。
使用page -机械手扩展
点击它,然后点击添加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);
单击“活动”,然后重新加载> done
这要归功于Oshayr, Albert Einstein和每个在这里发表他们的解决方案的人。
下面的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按钮。