source

Google Colab의 연결을 끊는 것을 방지하는 방법

factcode 2022. 12. 5. 21:13
반응형

Google Colab의 연결을 끊는 것을 방지하는 방법

Q: Google Colab이 타임아웃 시 연결 해제되는 것을 프로그래밍 방식으로 방지할 수 있는 방법이 있습니까?

다음은 노트북의 연결이 자동으로 끊어지는 상황에 대해 설명합니다.

Google Colab 노트북의 아이돌 타임아웃은 90분, 절대 타임아웃은 12시간입니다.즉, 사용자가 Google Colab 노트북과 90분 이상 대화하지 않으면 해당 인스턴스가 자동으로 종료됩니다.또한 Colab 인스턴스의 최대 라이프 타임은 12시간입니다.

당연히 인스턴스의 최대값을 자동으로 압축하여 항상 수동으로 조작할 필요가 없습니다.여기에서는 일반적인 시스템 요건을 가정합니다.요건을 상정합니다.

  • Ubuntu 18 LTS / Windows 10 / Mac 운영체제
  • Linux 기반 시스템의 경우 Gnome 3 또는 Unity와 같은 일반적인 DE 사용
  • 파이어폭스 또는 크롬 브라우저

이러한 행동은 Google Colab의 이용약관을 위반하는 은 아니지만, FAQ에 따르면 권장되지 않습니다(요컨대, 실제로 필요하지 않은 GPU를 모두 사용하는 것은 도덕적으로 좋지 않습니다).


현재의 솔루션은 매우 어설프다.

  • 우선 스크린세이버를 끄면 화면이 항상 켜집니다.
  • 저는 Arduino 보드를 가지고 있기 때문에 고무 재질의 usb로 만들어 잠자는 동안 원시적인 사용자 상호작용을 에뮬레이트했습니다(다른 사용 사례용으로 가지고 있기 때문에).

더 좋은 방법은 없을까?

편집 2: 2021년 3월 시점에서는 Google이 시간이 지나면 무작위로 나타나는 캡차 버튼을 추가했기 때문에 이러한 방법 중 어느 것도 작동하지 않습니다.

편집 1: 이 솔루션은 매우 쉽고 JavaScript도 필요 없는 것 같습니다.맨 아래에 다음 행으로 새 셀을 만듭니다.

while True:pass

이제 무한 루프가 중지되지 않도록 셀을 실행 시퀀스로 유지하여 세션을 활성 상태로 유지합니다.

이전 방법:60초마다 접속버튼을 클릭할 수 있는 Javascript 간격을 설정합니다.Ctrl+Shift를 사용하여 개발자 설정 열기(웹 브라우저)+콘솔 탭을 클릭하고 콘솔 프롬프트에 입력합니다(Mac의 경우 Option+Command+를 누릅니다).나)

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

연결 버튼의 ID가 "colab-connect-button"으로 변경되었으므로 다음 코드를 사용하여 버튼을 계속 클릭할 수 있습니다.

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

그래도 동작하지 않는 경우는, 다음의 순서에 따릅니다.

  1. 연결 버튼(콜라브 오른쪽 상단)을 오른쪽 클릭합니다.
  2. inspect를 클릭합니다.
  3. 버튼의 HTML ID를 가져와 다음 코드로 대체하십시오.
function ClickConnect(){
    console.log("Clicked on connect button"); 
    document.querySelector("Put ID here").click() // Change id here
}
setInterval(ClickConnect,60000)

저에게는 다음과 같은 예가 있습니다.

  • document.querySelector("#connect").click() or or or openicle.
  • document.querySelector("colab-toolbar-button#connect").click() or or or openicle.
  • 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();

이건 나한테 효과가 있어

콘솔에서 다음 코드를 실행하면 연결이 끊어지지 않습니다.Ctrl+Shift+i를 눌러 인스펙터 뷰를 엽니다.그런 다음 콘솔로 이동합니다.

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

Google Collab의 연결을 끊는 것을 방지하는 방법

pynput을 사용하여 PC에 파이썬 코드 생성

from pynput.mouse import Button, Controller
import time

mouse = Controller()

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

바탕화면에서 이 코드를 실행한 후 마우스 화살표 포인트로 임의의 디렉토리의 (왼쪽 패널 - 파일 섹션)디렉토리를 30초마다 클릭하기 때문에 이 코드는 30초마다 확장 및 축소되므로 세션이 만료되지 않습니다.중요합니다.이 코드를 PC에서 실행해야 합니다.

접속 버튼을 클릭하는 대신 댓글 버튼을 클릭하면 세션이 계속 진행됩니다. (2020년 8월)

function ClickConnect(){

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

매크로 프로그램을 사용하여 RAM/Disk 버튼을 주기적으로 클릭하여 밤새 모델을 교육합니다.Ram/Disk Colab 툴바버튼을 두 번 클릭하도록 매크로 프로그램을 설정하여 실행 시 연결이 끊어져도 다시 연결되도록 합니다.(첫 번째 클릭은 대화상자를 닫는 데 사용되고 두 번째 클릭은 RENNECT에 사용됩니다).단, 노트북은 밤새 열어두고 Colab 탭을 고정해야 합니다.

위의 답변은 일부 스크립트의 도움을 받아 올바르게 동작할 수 있습니다.스크립트가 없는 성가신 절단을 위한 솔루션(또는 일종의 트릭)이 있습니다.특히 프로그램이 딥 러닝 네트워크 모델 훈련과 같이 구글 드라이브에서 데이터를 읽어야 할 경우 스크립트를 사용하여 작업을 수행할 수 있습니다.reconnect을 끊으면 를 다시 수 이 .collab은 이 작업을 수행하지 않습니다.

이미 여러 번 테스트를 해봤는데 잘 작동해요.

브라우저로 콜라브 페이지에서 프로그램을 실행하는 경우(Chrome 사용), 프로그램 실행이 시작되면 브라우저 조작을 하지 마십시오.예를 들어 다른 웹 페이지로 전환하거나 다른 웹 페이지를 열거나 닫거나 하는 등의 조작은 하지 마십시오.프로그램이 실행될 때까지 그대로 두고 다른 소프트웨어로 전환할 수 있습니다.ike pycharm을 사용하여 코드를 계속 쓰지만 다른 웹 페이지로 전환하지 않습니다.왜 열리거나 닫히거나 다른 페이지로 전환하면 구글 콜라브 페이지의 접속에 문제가 생기는지는 모르겠지만, 검색 작업을 하는 등 브라우저를 귀찮게 할 때마다 콜라브와의 접속이 곧 끊어집니다.

이것을 시험해 보세요.

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

setInterval(ClickConnect,60000)

아마도 이전 솔루션 중 많은 부분이 더 이상 작동하지 않을 것입니다.예를 들어, 이 벨로우 코드는 계속해서 Colab에서 새로운 코드 셀을 생성하지만 작동합니다.의심할 여지 없이, 많은 코드 셀을 만드는 것은 불편합니다.몇 시간 동안 너무 많은 코드 셀이 생성되고 RAM이 부족하면 브라우저가 프리즈될 수 있습니다.

이것에 의해, 코드 셀이 반복적으로 작성됩니다.

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

하지만 아래 코드가 작동한다는 것을 알게 되었고, 아무런 문제가 없습니다.[ 에서 [Colab ]을 합니다.Ctrl + Shift + i충분합니다.12월 12일

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

2020년 11월 파이어폭스에서 이 코드를 테스트했습니다.크롬에서도 동작합니다.

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를 표시하고 드롭다운을 표시합니다.하면 새로운 new운운운운운운운 a a a a a a a a가 생성됩니다.<DIV class=goog menu...>"호스트된 런타임에 연결" 및 "로컬 런타임에 연결"의 두 가지 옵션을 사용하여 이전에는 DOM에 표시되지 않았습니다.콘솔 창이 열려 있고 요소가 표시되어 있는 경우 드롭다운 요소를 클릭하면 이 DIV가 나타납니다.마우스의 포커스를 새 창에 있는 두 옵션 간에 이동하기만 하면 DOM에 추가 요소가 추가됩니다. 마우스의 포커스가 사라지면 클릭을 하지 않아도 DOM에서 완전히 삭제됩니다.

비단뱀 셀레늄 사용

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

업데이트 중(jul 21).

function ConnectButton(){ 
    console.log("Working"); 
    document.querySelector("#connect").click() 
}
setInterval(ConnectButton,60000);

위의 코드를 시험해 봤지만 작동하지 않았습니다.재접속을 위한 JS코드입니다.

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

동일한 방법으로(브라우저의 콘솔에서 실행) 실행할 수 있습니다.하려면 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , .clearInterval(interval) setInterval(interval).

도움이 됐으면 좋겠네요.

이것은 나에게 효과가 있었습니다(클래스명 또는 ID 버튼을 변경한 것 같습니다).

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

업데이트 완료.나한테는 효과가 있어

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

문제가 해결되지 않는 경우 실행함으로써 해결하십시오.

clearInterval(myjob)

노트북을 북마크하여 연결 상태를 유지할 수 있습니다.

function ClickConnect(){
    console.log("Clicked on star button"); 
    document.querySelector("iron-icon#star-icon").click()
}
setInterval(ClickConnect,60000) 

이제 별이 1분 간격으로 깜박이는 것을 볼 수 있다.

가장 많이 투표된 답변은 분명 유효하지만, 이 답변은 세션 관리 창을 반복해서 띄웁니다.
브라우저 하여 새로 고침 버튼을

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

이 요지 https://gist.github.com/Subangkar/fd1ef276fd40dc374a7c80acc247613e에서 더 많은 스니펫을 투고해 주십시오.

GNU Colab을 사용하면 Collaboratory 인스턴스 위에서 표준 영구 데스크톱 환경을 실행할 수 있습니다.

실제로 그것은 기계가 공회전하여 죽지 않도록 하는 메커니즘을 포함하고 있다.

여기 비디오 데모가 있습니다.

좋아, 내가 좋은 해결책을 찾아냈어

활성 세션

자동으로 나타납니다.그러기 위해서는 두 가지 기능이 필요합니다.

이전과 같은 절차입니다.Inspect > console > 기능을 하나씩 붙여넣습니다.

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 Extension을 사용하여 완료됨

또는

Way_2.

  1. Page-Manage-Manipulator extension 사용
  2. 클릭 후 [Add Java Script]버튼 > + [ New ]+ > [ filename ]을 클릭합니다.
  3. 파일명은 ColabAlive > Make 입니다.
  4. 웹 사이트 = 성성 active active active= active active active active active active =colab.research.google.com
  5. 일치하는 페이지 = 재귀
  6. 그런 다음 아래 코드를 사용합니다.

// 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. [ Active ]를 클릭하여 [reload]> [ done ]을 클릭합니다

오샤이어, 알버트 아인슈타인 그리고 여기에 그들의 해결책을 게시한 모든 사람들에게 공로를 돌린다.

아래 유튜브 링크에 있는 이 솔루션은 나에게 효과가 있었습니다. 입력 장치를 제어하고 모니터링할 수 있는 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)

https://youtu.be/78rSqtkw3Gk

JQuery를 사용하는 것을 추천합니다(Co-Lab에는 기본적으로 JQuery가 포함되어 있는 것 같습니다).

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

다음 javascript 함수에 문제가 있습니다.

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

버튼을 실제로 클릭하기 전에 콘솔에 "클릭된 연결 버튼"을 인쇄합니다.이 스레드의 다른 답변에서 알 수 있듯이 연결 버튼의 ID는 Google Colab이 출시된 이후 여러 번 변경되었습니다.그리고 그것은 미래에도 바뀔 수 있다.따라서 이 스레드에서 오래된 답변을 복사할 경우 "연결 버튼 클릭"이라고 표시될 수 있지만 실제로는 그렇지 않을 수 있습니다.물론 클릭이 작동하지 않으면 콘솔에 오류가 표시되지만 실수로 표시되지 않을 수 있습니다.그러니 이렇게 하는 게 좋을 거야

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

그리고 당신은 그것이 정말 효과가 있는지 없는지를 확실히 보게 될 것이다.

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

이것은 나에게 효과가 있었지만 현명하게 사용한다.

행복한 학습 :)

다음과 같은 최신 솔루션을 사용할 수 있습니다.

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)

아래 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);

Ctrl + + Colab 을 클릭합니다.i키를 동시에 누릅니다.스크립트를 복사하여 프롬프트 행에 붙여넣습니다.그럼 때려요Enter츠요시

대화상자가되는지 여부를 이마다 를 합니다.ok자동으로 단추를 잠급니다.

실행할 셀 다음에 다음 코드를 실행하여 데이터 손실을 방지합니다.

!python

또한 이 모드를 종료하려면

exit()

음, 저는 비단뱀도 아니고, 이 'Colab'의 실제 용도를 알고 있습니다.빌드 시스템으로 사용하고 있습니다(웃음).ssh forwarding을 셋업하고 이 코드를 삽입하고 실행 상태로 두면 동작합니다.

import getpass
authtoken = getpass.getpass()

이 코드는 파일 탐색기 창에서 "폴더 새로 고침"을 계속 클릭합니다.

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

툴바 연결 버튼을 1분 간격으로 클릭하려고 할 때 작업 중에 귀찮은 대화상자가 나타나지 않도록 하려면 이 방법을 사용합니다.이것을 콘솔에 복사하여 붙여넣기하고 메서드를 호출하면 노트북에서 작업할 수 있습니다.

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

언급URL : https://stackoverflow.com/questions/57113226/how-to-prevent-google-colab-from-disconnecting

반응형