web-dev-qa-db-fra.com

Comment empêcher Google Colab de se déconnecter?

Q: Existe-t-il un moyen d'empêcher par programmation Google Colab de se déconnecter en cas de dépassement de délai?

Ce qui suit décrit les conditions entraînant la déconnexion automatique d'un ordinateur portable:

Les blocs-notes Google Colab ont un délai d'inactivité de 90 minutes et un délai absolu de 12 heures. Cela signifie que si l'utilisateur n'interagit pas avec son bloc-notes Google Colab pendant plus de 90 minutes, son instance est automatiquement interrompue. De plus, la durée de vie maximale d'une instance Colab est de 12 heures.

Naturellement, nous voulons extraire automatiquement le maximum de l'instance, sans avoir à interagir manuellement avec elle en permanence . Ici, je suppose que la configuration système requise est courante:

  • Systèmes d'exploitation Ubuntu 18 LTS/Windows 10/Mac
  • Dans le cas de systèmes basés sur Linux, utiliser des DE populaires comme Gnome 3 ou Unity
  • Navigateurs Firefox ou Chromium

Je dois souligner ici qu'un tel comportement ne viole pas Conditions d'utilisation de Google Colab , bien qu'il ne soit pas encouragé en fonction de leur FAQ (en bref: moralement, il n'est pas acceptable d'utiliser tous les GPU si vous n'en avez pas vraiment besoin).


Ma solution actuelle est très stupide:

  • Tout d'abord, je désactive l'économiseur d'écran, mon écran est donc toujours allumé.
  • J'ai une carte Arduino, donc je viens de la transformer en caoutchouc ducky usb et de la faire émuler l'interaction utilisateur primitive pendant que je dors (juste parce que je l'ai à portée de main pour d'autres cas d'utilisation).

Y a-t-il de meilleures façons?

46
FalconUA

Définissez un intervalle javascript pour cliquer sur le bouton de connexion toutes les 60 secondes. Ouvrez les paramètres du développeur (dans votre navigateur Web) avec Ctrl + Maj + I, puis cliquez sur l'onglet de la console et tapez ceci sur l'invite de la console. (pour mac, appuyez sur Option + Commande + I)

function ConnectButton(){
    console.log("Connect pushed"); 
    document.querySelector("#connect").click() 
}
setInterval(ConnectButton,60000);
41
Tanay Karve

Eh bien, cela fonctionne pour moi -

exécutez le code suivant dans la console et cela vous empêchera de vous déconnecter. Ctrl + Maj + i pour ouvrir la vue Inspecteur. Ensuite, allez dans la console.

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

Comment empêcher google colab de se déconnecter

12
Kavyajeet Bora

Étant donné que l'ID du bouton de connexion est désormais changé en "bouton de connexion colab", le code suivant peut être utilisé pour continuer à cliquer sur le bouton.

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

Si cela ne fonctionne toujours pas, suivez les étapes ci-dessous:

  1. Cliquez avec le bouton droit sur le bouton de connexion (en haut à droite de la colab)
  2. Cliquez sur inspecter
  3. Obtenez l'ID HTML du bouton et remplacez-le dans le code suivant
function ClickConnect(){
    console.log("Clicked on connect button"); 
    document.querySelector("Put ID here").click() // Change id here
}
setInterval(ClickConnect,60000)
9
Nitesh Jindal

J'utilise un Macro Program pour cliquer périodiquement sur le bouton RAM/Disk pour entraîner le modèle toute la nuit. L'astuce consiste à configurer un programme macro pour cliquer deux fois sur le bouton de la barre d'outils Ram/Disk Colab avec un court intervalle entre les deux clics afin que même si le Runtime se déconnecte, il se reconnecte. (le premier clic sert à fermer la boîte de dialogue et le second clic à RECONNECTER). Cependant, vous devez toujours laisser votre ordinateur portable ouvert toute la nuit et peut-être épingler l'onglet Colab.

8
avi

Les réponses ci-dessus à l'aide de certains scripts peuvent bien fonctionner. J'ai une solution (ou une sorte d'astuce) pour cette déconnexion ennuyeuse sans scripts, en particulier lorsque votre programme doit lire les données de votre lecteur Google, comme la formation d'un modèle de réseau d'apprentissage en profondeur, où l'utilisation de scripts pour faire reconnect opération n'est d'aucune utilité car une fois que vous vous déconnectez avec votre colab, le programme est tout simplement mort, vous devez vous reconnecter manuellement à votre lecteur Google pour rendre votre modèle capable de lire à nouveau l'ensemble de données, mais les scripts ne feront pas cette chose.
Je l'ai déjà testé plusieurs fois et cela fonctionne bien.
lorsque vous exécutez un programme sur la page colab avec un navigateur (j'utilise Chrome), n'oubliez pas que n'effectuez aucune opération sur votre navigateur une fois que votre programme commence à fonctionner, comme: passer à un autre pages Web, ouvrez ou fermez une autre page Web, etc., laissez-le simplement là et attendez la fin de votre programme, vous pouvez passer à un autre logiciel, comme pycharm pour continuer à écrire vos codes mais pas à une autre page Web. Je ne sais pas pourquoi ouvrir ou fermer ou basculer vers d'autres pages entraînera le problème de connexion de la page google colab, mais chaque fois que j'essaie de déranger mon navigateur, comme faire un travail de recherche, ma connexion à colab va bientôt tomber en panne.

5
Hu Xixi

Utilisation de 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()
5
SciPy

créer un code python dans votre PC avec pynput

from pynput.mouse import Button, Controller
import time

mouse = Controller()

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

Exécutez ce code dans votre bureau, puis pointez la flèche de la souris sur (panneau gauche de colabs - section fichier) sur n'importe quel répertoire ce code continuera à cliquer sur le répertoire toutes les 30 secondes pour qu'il s'étende et se rétrécisse toutes les 30 secondes pour que votre session ne se termine pas. expiré Important - vous devez exécuter ce code sur votre PC

4
Seyon Seyon

Pour moi les exemples suivants:

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

lançaient des erreurs.

J'ai dû les adapter aux éléments suivants:

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

Version 2: Si vous souhaitez pouvoir arrêter la fonction, voici le nouveau code:

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

Pour vous arrêter, appelez:

stopClickConnect();
3
barbossusus

Je ne pense plus que les solutions JavaScript fonctionnent. Je le faisais depuis mon cahier avec:

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

Lorsque vous effectuez un Exécuter tout pour la première fois (avant le JavaScript ou Python a démarré), la console affiche:

Connected to 
wss://colab.research.google.com/api/kernels/0e1ce105-0127-4758-90e48cf801ce01a3/channels?session_id=5d8...

Cependant, chaque fois que JavaScript s'exécute, vous voyez la partie console.log, mais la partie clic donne simplement:

Connect pushed

Uncaught TypeError: Cannot read property 'click' of null
 at ConnectButton (<anonymous>:1:92)

D'autres ont suggéré que le nom du bouton est devenu # colab-connect-button, mais cela donne la même erreur.

Après le démarrage de l'exécution, le bouton est modifié pour afficher RAM/DISK et une liste déroulante s'affiche. Cliquer sur le menu déroulant crée un nouveau <DIV class=goog menu...> qui n'était pas affiché dans le DOM précédemment, avec 2 options "Se connecter au runtime hébergé" et "Se connecter au runtime local". Si la fenêtre de la console est ouverte et affiche des éléments, vous pouvez voir ce DIV apparaître lorsque vous cliquez sur l'élément déroulant. Le simple fait de déplacer le focus de la souris entre les deux options dans la nouvelle fenêtre qui apparaît ajoute des éléments supplémentaires au DOM, dès que la souris perd le focus, ils sont supprimés du DOM complètement, même sans cliquer.

3
M. Fuller

Celui-ci a fonctionné pour moi (il semble qu'ils aient changé le nom de classe du bouton ou l'identifiant):

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

Essaye ça:

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

setInterval(ClickConnect,60000)
3
Amit Modi

J'ai essayé les codes ci-dessus mais ils ne fonctionnaient pas pour moi. Voici donc mon code JS pour me reconnecter.

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

Vous pouvez l'utiliser de la même manière (exécutez-le sur la console de votre navigateur) pour l'exécuter. Si vous voulez arrêter le script, vous pouvez entrer clearInterval(interval) et vouloir relancer setInterval(interval).

J'espère que ceci vous aide.

3
esr

Je recommanderais d'utiliser JQuery (il semble que Co-lab inclut JQuery par défaut).

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

Vous pouvez également utiliser Python pour appuyer sur les touches fléchées. J'ai également ajouté un peu d'aléatoire dans le code suivant.

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('left')
    press('right')
    press('up')
    press('down')
1
Jinhua Wang