Як запобігти відключенню Google Colab?


137

З: Чи є спосіб програмно запобігти відключенню Google Colab під час очікування?

Далі описано умови, через які ноутбук автоматично відключається:

У ноутбуках Google Colab час очікування простою становить 90 хвилин, а абсолютний - 12 годин. Це означає, що якщо користувач не взаємодіє зі своїм ноутбуком Google Colab більше 90 хвилин, його екземпляр автоматично припиняється. Крім того, максимальний термін служби екземпляра Colab становить 12 годин.

Звичайно, ми хочемо автоматично вичавити максимум з екземпляра, не маючи необхідності постійно взаємодіяти з ним постійно . Тут я припущу загальновидіні системні вимоги:

  • Операційні системи Ubuntu 18 LTS / Windows 10 / Mac
  • У випадку з системами на базі Linux, використовуючи такі популярні DE, як Gnome 3 або Unity
  • Браузери Firefox або Chromium

Тут слід зазначити, що така поведінка не порушує Умов використання Google Colab , хоча це не заохочується відповідно до їх поширених запитань (коротше: морально не годиться використовувати всі графічні процесори, якщо вам це насправді не потрібно. ).


Моє поточне рішення дуже тупе:

  • По-перше, я вимикаю заставку, тому мій екран завжди ввімкнено.
  • У мене є плата Arduino, тому я просто перетворив її на гумовий качачий USB і змушую її імітувати примітивну взаємодію користувача під час сну (просто тому, що вона є під рукою для інших випадків використання).

Чи є кращі способи?


1
Мені теж було цікаво про те саме питання. Було б корисно для студентів під час захисту дисертації.
Дмитро

2
"Час очікування в режимі очікування 90 хвилин ... якщо користувач не взаємодіє зі своїм ноутбуком Google Colab більше 90 хвилин, його екземпляр автоматично припиняється." Це погано, тому що керастунер тоді неможливо використовувати. Співробітники Google повинні подумати більше, якщо вони дійсно хочуть, щоб громадськість використовувала керастунер.
Джеффрі Андерсон,

1
Як зупинити виконання цього сценарію?
Муртаза Камал

1
Не код, а невелика вага та клавіша backspace у вашій системі можуть зробити трюк за вас. Сподіваюся, ви зрозуміли!
Vikalp Jain

Відповіді:


120

Редагувати: мабуть, рішення дуже просте і не потребує будь-якого JavaScript. Просто створіть нову комірку внизу, що має такий рядок:

while True:pass

тепер тримайте клітинку в послідовності запуску, щоб нескінченний цикл не зупинявся, і таким чином підтримуйте ваш сеанс живим.

Старий метод: встановіть інтервал JavaScript, щоб натискати кнопку підключення кожні 60 секунд. Відкрийте налаштування розробника (у вашому веб-браузері) за допомогою Ctrl + Shift + I, потім клацніть на вкладці консолі та введіть це в підказці консолі. (для mac натисніть Option + Command + I)

function ConnectButton(){
    console.log("Connect pushed"); 
    document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click() 
}
setInterval(ConnectButton,60000);

1
Там написано Uncaught TypeError: Не вдається прочитати властивість "клацнути" значення null у ConnectButton
Shaida Muhammad

1
Здається, ваша відповідь застаріла
jgauth

1
Виправлено, оновивши селектор JS
Танай Карве

4
У Chrome ви можете створити закладку, щоб активувати цей фрагмент одним клацанням миші. Просто створіть закладку з такою URL-адресою: javascript:void(setInterval(function(){ console.log("Connect pushed"); document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click(); },60000))(однолінійна версія тієї ж команди). Я не впевнений, що це працює в інших браузерах
pdpino,

1
@qAp Я виявив, що це все одно буде працювати, навіть якщо ви перебуваєте на іншій вкладці, або ваш екран вимкнений через заставку (я
треную

50

Оскільки ідентифікатор кнопки підключення тепер змінено на "colab-connect-button", наступний код можна використовувати для продовження натискання на кнопку.

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

Якщо все одно це не працює, виконайте наведені нижче дії.

  1. Клацніть правою кнопкою миші на кнопку підключення (у верхній правій частині колаба)
  2. Клацніть на перевірити
  3. Отримайте ідентифікатор HTML кнопки та замініть у наступному коді
function ClickConnect(){
    console.log("Clicked on connect button"); 
    document.querySelector("Put ID here").click() // Change id here
}
setInterval(ClickConnect,60000)

5
Це поточне рішення згідно з новим ідентифікатором кнопки (лютий 2020 р.)
Kaushal28

Якщо Google коли-небудь намагатиметься зробити так, щоб це не спрацювало (приклад: зробіть це класом і мати кілька підроблених невидимих ​​кнопок з цим самим класом), ви завжди можете замість кроку 3: клацнути правою кнопкою миші -> Копіювати -> Копіювати шлях JS
Banjer_HD

Все ще отримує таку саму проблему Runtime відключений, Runtime відключений через бездіяльність
SUSHMA KUMARI

5
Як зупинити виконання цього сценарію?
Муртаза Камаль,

2
@MurtazaKamal Crtl + Shift + I, перейдіть до Джерела та натисніть кнопку паузи.
Faisal Maqbool

19

Ну, це працює на мене -

запустіть наступний код у консолі, і це не дозволить вам від'єднатися. Ctrl + Shift + i, щоб відкрити інспектор. Потім перейдіть до консолі.

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

Як запобігти відключенню Google Colab


1
Дякую, це добре працює і для мене. (Я залишив той самий коментар тут минулого тижня, але він зник. Важливо не втрачати роботу, тому ця відповідь заслуговує на позитивні відгуки.)
Джеффрі Андерсон,

Не працює, все ще відключається. (Використання браузера Firefox 74.0 (64-розрядна версія)).
hafiz031

Це також працює, навіть якщо ви залишаєте вікно браузера згорнутим і працюєте з іншими програмами?
HarryS

18

Для мене такі приклади:

  • 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();

Для мене це єдине рішення, яке не видає помилок. Спасибі
pairon

Я спробував вищезазначені методи та кілька інших блогів. Безумовно і актуальні на сьогоднішній день, обидва ваші коди працюють без помилок. Дякую :)
HarryS

15

створити код python у своєму ПК за допомогою pynput

from pynput.mouse import Button, Controller
import time

mouse = Controller()

while True:
    mouse.click(Button.left, 1)
    time.sleep(30)

Запустіть цей код на своєму робочому столі, а потім наведіть стрілку миші на (каталог лівої панелі кола - розділ файлу) структуру каталогів у будь-якій директорії, яка буде продовжувати натискати на каталог кожні 30 секунд, тому вона буде розширюватися та зменшуватися кожні 30 секунд, тому ваш сеанс не буде термін дії закінчився Важливо - ви повинні запустити цей код у своєму ПК


Я спробував це і отримав DisplayNameError під час імпортування pynput. Можливо, тому, що ми можемо отримати доступ до colab лише через браузер (під час розміщеного сеансу виконання), а не за допомогою клавіатури / миші тощо
HasnainMamdani

Я думаю, Ви неправильно зрозуміли цю ідею. До Colab немає доступу за допомогою python. Тільки під контролем миші на коді вище (бо для імітації, взаємодії миші з браузером) питань бібліотеки .Fix в локальному комп'ютері
Seyon Seyon

13

Замість того, щоб натискати кнопку підключення, я просто натискаю кнопку коментаря, щоб зберегти сеанс живим. (Серпень-2020)

function ClickConnect(){

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

11

Я використовую макропрограму, щоб періодично натискати кнопку RAM / Disk, щоб тренувати модель всю ніч. Фокус полягає у налаштуванні макропрограми, щоб двічі клацнути на кнопці панелі інструментів Ram / Disk Colab з коротким інтервалом між двома клацаннями, щоб, навіть якщо Runtime буде відключено, вона знову підключилася назад. (перший клік використовується для закриття діалогового вікна, а другий клацання використовується для ПІДКЛЮЧЕННЯ). Однак вам все одно доведеться залишати ноутбук відкритим цілу ніч і, можливо, закріпити вкладку Colab.


8

Наведені вище відповіді за допомогою деяких сценаріїв можуть працювати добре. У мене є рішення (або своєрідна хитрість) для цього надокучливого відключення без сценаріїв, особливо коли ваша програма повинна читати дані з вашого диска google, наприклад, навчання моделі глибокого навчання мережі, коли використання сценаріїв для виконання reconnectоперації не приносить користі, тому що колись якщо ви від’єднаєтеся від своєї колаборації, програма просто мертва, вам слід вручну знову підключитися до вашого диска Google, щоб ваша модель змогла знову читати набір даних, але сценарії цього не роблять.
Я вже багато разів тестував, і він працює добре.
Коли ви запускаєте програму на сторінці colab з браузером (я використовую Chrome), просто пам’ятайте, що не виконуйте жодних операцій з вашим браузером, як тільки програма почне працювати, наприклад: переключитися на інші веб-сторінки, відкрити або закрити іншу веб-сторінку та і так далі, просто залиште його там у спокої і чекаючи завершення роботи вашої програми, ви можете перейти на інше програмне забезпечення, наприклад pycharm, щоб продовжувати писати свої коди, але не переходити на іншу веб-сторінку. Я не знаю, чому відкриття, закриття або перехід на інші сторінки спричинять проблему з підключенням сторінки Google Colab, але кожного разу, коли я намагаюся заважати своєму браузеру, наприклад, виконую якусь пошукову роботу, моє з’єднання з colab незабаром руйнується.


Я додаю до вашої відповіді, що Firefox чудово працює з цим трюком. Але для мене я вимкнув режим сну на своєму mac і поставив вікно браузера перед усіма іншими вікнами, ніби я активно працюю над цим. Я тримав це всю ніч, і це працює. Жодна з трюків JavaScript не спрацювала. Одна примітка - я використовую Google Colab Pro: тому я не впевнений, чи це спрацює з безкоштовною колабою.
Ясер Сінджаб,

@Yasser Sinjab Дякую за ваші доповнення, я використовую безкоштовну версію, і вона працює добре.
Ху Сісі

8

Спробуйте це:

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

setInterval(ClickConnect,60000)

6

Використання пітону селену

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()

6

Я не вірю, що рішення 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))

Коли ви вперше виконуєте Запуск усіх (до того, як почався код 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 повністю, навіть без клацання.


погодьтеся, чи є якесь рішення
Талха Анвар

5

Я спробував наведені вище коди, але вони не працювали для мене. Тож ось мій код JS для повторного підключення.

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

Ви можете використовувати його таким же чином (запустити на консолі браузера) для його запуску. Якщо ви хочете зупинити сценарій, ви можете ввести clearInterval(interval)і хочете запустити знову setInterval(interval).

Сподіваюся, це вам допоможе.


5

Оновлений. це працює для мене.

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

Якщо не працює, ви, хлопці, спробуйте це очистити, запустивши:

clearInterval(myjob)


4

Цей працював у мене (схоже, вони змінили назву класу кнопки або ідентифікатор):

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


4

Відповідь, за якою проголосували найбільше, безумовно, працює для мене, але це змушує вікно Manage session з’являтися знову і знову.
Я вирішив це, натиснувши автоматично кнопку оновлення за допомогою консолі браузера, як показано нижче

function ClickRefresh(){
    console.log("Clicked on refresh button"); 
    document.querySelector("paper-icon-button").click()
}
setInterval(ClickRefresh, 60000)

Не соромтеся надавати більше фрагментів для цього на цій статті https://gist.github.com/Subangkar/fd1ef276fd40dc374a7c80acc247613e


4

Можливо, багато з попередніх рішень вже не працюють. Наприклад, цей нижченаведений код продовжує створювати нові комірки коду в Colab, працюючи. Безсумнівно, створення групи комірок коду - це незручність. Якщо за кілька годин роботи надто багато комірок коду і недостатньо оперативної пам’яті, браузер може зависнути.

Це неодноразово створює кодові клітинки -

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)

Я протестував цей код у Firefox, у листопаді 2020 року. Він також буде працювати на chrome.


3

Я б рекомендував використовувати JQuery (схоже, що Co-lab за замовчуванням включає JQuery).

function ClickConnect(){
  console.log("Working");
  $("colab-toolbar-button").click();
}
setInterval(ClickConnect,60000);

Це не працює:Uncaught ReferenceError: $ is not defined at ClickConnect (<anonymous>:3:3)
Кел Солаар,

3

У мене проблема з цими функціями javascript:

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

Вони друкують на кнопці "Клацнув на кнопку підключення" перед тим, як натиснути кнопку. Як ви можете бачити з різних відповідей у ​​цій темі, ідентифікатор кнопки підключення змінювався кілька разів з часу запуску Google Colab. І це також може бути змінено в майбутньому. Отже, якщо ви збираєтеся скопіювати стару відповідь із цього ланцюжка, він може сказати "Клацнув на кнопку підключення", але насправді цього не може зробити. Звичайно, якщо клацання не спрацює, на консолі буде надруковано помилку, але що, якщо ви випадково не побачите? Тож вам краще зробити це:

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

І ви точно побачите, працює це справді чи ні.


3
function ClickConnect()
{
    console.log("Working...."); 
    document.querySelector("paper-button#comments").click()
}
setInterval(ClickConnect,600)

це працювало для мене, але використовуйте розумно

щасливого навчання :)


3

для мене працює таке ОСТАННЕ рішення:

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)

Подумайте про те, щоб включити пояснення до своєї відповіді.
Сурадж Субраманіан

3

Наведений нижче 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автоматично натискатиме кнопку для вас.


3

Ну, я не хлопець-пітон, і я не знаю, що насправді використовує цей "Colab", я використовую його як систему збірки ха-ха. І я раніше налаштовував переадресацію ssh, потім ставив цей код і залишав його запущеним, і так, він працює.

import getpass
authtoken = getpass.getpass()

3

Цей код продовжує натискати «Оновити папку» на панелі провідника файлів.

function ClickRefresh(){
  console.log("Working"); 
  document.querySelector("[icon='colab:folder-refresh']").click()
}
const myjob = setInterval(ClickRefresh, 60000)

1
Зверніть увагу, що панель провідника файлів / папки повинна бути розширена, щоб ця працювала.
Кел Солаар,


2

Ви також можете використовувати Python для натискання клавіш зі стрілками. Я також додав трохи випадковості в наступний код.

from pyautogui import press, typewrite, hotkey
import time
from random import shuffle

array = ["left", "right", "up", "down"]

while True:
    shuffle(array)
    time.sleep(10)
    press(array[0])
    press(array[1])
    press(array[2])
    press(array[3])

до речі ви, мабуть, хочете отримати доступ до вмісту array, цей код, здається, цілком рішучий щоразу натискати L, R, U, D
Марк Логарн

Чому б і ніfor key in array: press(key)
Pixelzery

2

Просто запустіть наведений нижче код після комірки, яку потрібно запустити, щоб врятувати від втрати даних.

!python

Також для виходу з цього режиму пишіть

exit()

2

Я шукав рішення, поки не знайшов Python3, який випадковим чином переміщує мишу вперед-назад і клацає, завжди на одному і тому ж місці, але цього досить, щоб обдурити Colab, думаючи, що я активний у блокноті і не відключаюся.

import numpy as np
import time
import mouse
import threading

def move_mouse():
    while True:
        random_row = np.random.random_sample()*100
        random_col = np.random.random_sample()*10
        random_time = np.random.random_sample()*np.random.random_sample() * 100
        mouse.wheel(1000)
        mouse.wheel(-1000)
        mouse.move(random_row, random_col, absolute=False, duration=0.2)
        mouse.move(-random_row, -random_col, absolute=False, duration = 0.2)
        mouse.LEFT
        time.sleep(random_time)


x = threading.Thread(target=move_mouse)
x.start()

Вам потрібно встановити необхідні пакети: sudo -H pip3 install <package_name> Вам просто потрібно запустити його (на локальній машині) за допомогоюsudo (оскільки він бере під контроль мишу), і це повинно працювати, що дозволяє в повній мірі скористатися 12-годинними сесіями Colab.

Подяки: Для тих, хто використовує Colab (Pro): Запобігання відключенню сеансу через бездіяльність


Підозрюю, ви також хотіли б помістити це в окрему тему: D
FalconUA

@FalconUA, Вчора ввечері я залишив Colab на своєму ПК, а коли прокинувся вранці, виявив, що він все ще працює. Я думаю, сценарій працює добре, але я отримав кілька попереджень щодо потоку, ви маєте рацію.
сингрій

1
function ClickConnect(){
    console.log("Clicked on connect button"); 
    document.querySelector("connect").click() // Change id here
}
setInterval(ClickConnect,60000)

Спробуйте вище, код працював у мене :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.