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:
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:
Y a-t-il de meilleures façons?
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);
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)
É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:
function ClickConnect(){
console.log("Clicked on connect button");
document.querySelector("Put ID here").click() // Change id here
}
setInterval(ClickConnect,60000)
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.
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.
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()
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
Pour moi les exemples suivants:
document.querySelector("#connect").click()
oudocument.querySelector("colab-toolbar-button#connect").click()
oudocument.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();
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.
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)
Essaye ça:
function ClickConnect(){
console.log("Working");
document
.querySelector("#top-toolbar > colab-connect-button")
.shadowRoot
.querySelector("#connect")
.click()
}
setInterval(ClickConnect,60000)
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.
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);
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')