programing

Google Colab의 연결 해제를 방지하려면 어떻게 해야 합니까?

javamemo 2023. 6. 4. 10:14
반응형

Google Colab의 연결 해제를 방지하려면 어떻게 해야 합니까?

Google Colab이 시간 초과 시 연결이 끊기지 않도록 프로그래밍 방식으로 방지하는 방법이 있습니까?

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

Google Colab 노트북의 유휴 시간 제한은 90분이고 절대 시간 제한은 12시간입니다.즉, 사용자가 Google Colab 노트북과 90분 이상 상호 작용하지 않으면 인스턴스가 자동으로 종료됩니다.또한 Colab 인스턴스의 최대 수명은 12시간입니다.

당연히, 우리는 끊임없이 수동으로 상호 작용할 필요 없이 인스턴스에서 최대치를 자동으로 짜내고자 합니다.여기서는 일반적으로 볼 수 있는 시스템 요구 사항을 가정하겠습니다.

저는 이러한 행동이 Google Colab의 사용 약관을 위반하지 않는다는 것을 여기서 지적해야 합니다. 비록 그들의 FAQ에 따라 권장되지는 않지만(요약하자면: 도덕적으로 GPU가 정말 필요하지 않다면 모든 GPU를 사용하는 것은 괜찮지 않습니다.)


현재의 솔루션은 매우 바보같습니다.

  • 먼저 화면 보호기를 꺼서 화면이 항상 켜져 있습니다.
  • 저는 Arduino 보드를 가지고 있어서 그냥 고무 오리 같은 USB 장치로 바꾸고 자는 동안 원시적인 사용자 상호 작용을 모방하게 했습니다(다른 사용 사례를 위해 가지고 있기 때문에).

더 좋은 방법이 있습니까?

2021년 3월 현재, 구글이 일정 시간 후 무작위로 팝업되는 캡차 버튼을 추가했기 때문에 이 방법들 중 어느 것도 작동하지 않을 것입니다.

그 이전에는 솔루션이 매우 쉬웠으며 JavaScript가 필요하지 않았습니다.아래에 다음 줄이 있는 새 셀을 만듭니다.

while True:pass

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

이전 방법:

60초마다 연결 버튼을 클릭하도록 JavaScript 간격을 설정합니다.

Ctrl+Shift를 사용하여 웹 브라우저에서 개발자-설정 열기+ 그런 다음 콘솔 탭을 클릭하고 콘솔 프롬프트에 입력합니다. (mac의 경우 Option+Command+를 누릅니다.)I)

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. 검사 클릭
  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()또는
  • 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();

제게 효과가 있습니다.

콘솔에서 다음 코드를 실행하면 연결이 끊어지지 않습니다.

Ctrl + 검사자I 보기를 엽니다.그런 다음 콘솔로 이동합니다.

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

공동작업실의 연결 해제를 방지하는 방법

pinput으로 PC에 Python 코드 생성:

from pynput.mouse import Button, Controller
import time

mouse = Controller()

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

바탕 화면에서 이 코드를 실행합니다.그런 다음 마우스 화살표를 디렉토리의 디렉토리 구조(Collaboratory 왼쪽 패널 - 파일 섹션) 위에 놓습니다.

이 코드는 30초마다 디렉터리를 계속 클릭하므로 30초마다 확장 및 축소됩니다.따라서 세션이 만료되지 않습니다.

중요 - PC에서 이 코드를 실행해야 합니다.

버튼을 클릭하는 대신 세션을 활성화하기 위해 버튼을 클릭합니다(2020년 8월).

function ClickConnect(){

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

저는 매크로 프로그램을 사용하여 RAM/Disk 버튼을 주기적으로 클릭하여 밤새 모델을 교육합니다.이 방법은 두 번의 클릭 사이에 짧은 간격으로 Ram/Disk Colab Toolbar Button을 두 번 클릭하도록 매크로 프로그램을 구성하여 런타임의 연결이 끊어져도 다시 연결되도록 하는 것입니다.(첫 번째 클릭으로 대화 상자를 닫고 두 번째 클릭으로 다시 연결합니다.)하지만 밤새 노트북을 열어두고 콜라브 탭을 고정해야 합니다.

일부 스크립트의 도움을 받아 이전 답변이 잘 작동할 수 있습니다.

특히 딥러닝 네트워크 모델 교육과 같이 프로그램이 구글 드라이브에서 데이터를 읽어야 하는 경우 스크립트를 사용하여 작업을 수행하는 등 스크립트 없이 성가신 연결 끊기에 대한 해결책(또는 일종의 속임수)이 있습니다.reconnect공동 연구소와의 연결을 끊으면 프로그램이 종료되기 때문에 작업은 아무 소용이 없습니다.모델이 데이터 집합을 다시 읽을 수 있도록 하려면 Google 드라이브에 수동으로 다시 연결해야 하지만 스크립트는 이 작업을 수행하지 않습니다.

저는 이미 여러 번 테스트해 보았는데 잘 작동했습니다.

브라우저를 사용하여 공동 작업 페이지에서 프로그램을 실행할 때(Chrome 사용) 프로그램이 실행되기 시작하면 다른 웹 페이지로 전환, 다른 웹 페이지 열기 또는 닫기 등과 같은 작업을 브라우저에서 수행하지 마십시오.프로그램 실행이 완료될 때까지 그대로 두고 기다리면 됩니다.PyCharm과 같은 다른 소프트웨어로 전환하여 코드를 계속 작성할 수 있지만 다른 웹 페이지로 전환할 수는 없습니다.

다른 페이지를 열거나 닫거나 다른 페이지로 전환하면 공동작업 페이지의 연결 문제가 발생하는 이유를 알 수 없지만 검색 작업을 수행하는 등 브라우저를 방해할 때마다 공동작업에 대한 연결이 곧 끊어집니다.

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

이것은 반복적으로 코드 셀을 만듭니다.

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

하지만 아래 코드는 작동하고 있고, 문제가 없다는 것을 발견했습니다.에서 Colab 노트북을 합니다.Ctrl + Shift + i키를 동시에 누르고 아래 코드를 콘솔에 붙여넣습니다.12만 간격이면 충분합니다.

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

저는 2020년 11월에 파이어폭스에서 이 코드를 테스트했습니다.그것은 크롬에서도 작동할 것입니다.

사용해 보십시오.

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

setInterval(ClickConnect,60000)

저는 자바스크립트 솔루션이 더 이상 작동하지 않는다고 생각합니다.노트북에서 다음 작업을 수행했습니다.

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

처음 Run all(모두 실행)을 수행할 때(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에 표시되지 않았지만 "호스트 런타임에 연결" 및 "로컬 런타임에 연결" 옵션이 두 개 있습니다.콘솔 창이 열려 있고 요소를 표시하는 경우 드롭다운 요소를 클릭하면 이 DIV가 나타나는 것을 볼 수 있습니다.나타나는 새 창에서 마우스 포커스를 두 옵션 사이로 이동하기만 하면 DOM에 추가 요소가 추가됩니다. 마우스 포커스가 사라지면 클릭하지 않아도 DOM에서 요소가 완전히 제거됩니다.

Selenium과 함께 Python 사용:

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

업데이트 중(2021년 7월).

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

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

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

이제 여러분은 매 분마다 별이 깜박이는 것을 볼 수 있습니다.

이전 답변에서 코드를 사용해 보았지만 작동하지 않았습니다.이것이 재연결을 위한 제 자바스크립트 코드입니다.

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

동일한 방법으로 사용할 수 있습니다(브라우저의 콘솔에서 실행).

스립트를중다입수있력다습니할음을면려지하크다있을 하면 됩니다.clearInterval(interval) 다시 를 원합니다.setInterval(interval).

이것은 나에게 도움이 됩니다.

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

가 작동하지 않으면 다음을 실행하여 삭제합니다.

clearInterval(myjob)

이것은 저에게 효과가 있었습니다(버튼 클래스 이름이나 ID를 변경한 것 같습니다).

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

"Google Colab의 연결 해제를 방지하는 방법 | 간단한 솔루션"이라는 YouTube 동영상의 솔루션이 저에게 효과가 있었습니다.

입력 디바이스를 제어하고 모니터링할 수 있는 pnput 라이브러리를 설치합니다.

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)

가장 많이 투표된 답변은 확실히 저에게 도움이 되지만 세션 관리 창이 계속해서 나타납니다.
와 같은

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

이 요지 https://gist.github.com/Subangkar/fd1ef276fd40dc374a7c80acc247613e 에서 이에 대한 더 많은 스니펫을 자유롭게 기고하십시오.

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

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

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

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

여기 비디오 시연이 있습니다.

좋아요. 저는 그것을 없앨 멋진 해결책을 찾았습니다.

활성 세션

자동으로 팝업됩니다.그러기 위해서는 두 가지 기능이 필요합니다.

이전과 동일한 절차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. 페이지 조작기 확장 사용
  2. 클릭 후 Java Script 추가 버튼 > + New + > filename 을 클릭합니다.
  3. 파일 이름이 ColabAlive > Make라고 합니다.
  4. 웹사이트 = 활성웹사트이 =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. 활성을 클릭한 다음 다시 로드 > 완료

Oshayr, Albert Einstein 그리고 그들의 해결책을 여기에 게시한 모든 사람들에게 공로가 있습니다.

아래 자바스크립트 코드는 저에게 잘 맞습니다.@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 노트북에서 + + 키를 동시에 누릅니다.스크립트를 복사하여 프롬프트 줄에 붙여넣습니다.그런 다음 편집기를 닫기 전에 누릅니다.

이렇게 하면 60초마다 기능이 화면 연결 대화 상자가 표시되는지 확인하고 표시되면 자동으로 버튼을 클릭합니다.

데이터 손실을 방지하기 위해 실행할 셀 다음에 아래 코드를 실행하기만 하면 됩니다.

!python

또한 이 모드를 종료하려면 다음과 같이 기록합니다.

exit()

매 분마다 도구 모음 연결 단추를 클릭하는 시뮬레이션을 시도할 때 작업 중에 모든 성가신 대화 상자가 나타나지 않도록 하려면 이 작업을 수행합니다.이것을 콘솔에 복사하여 붙여넣고 메소드를 호출하면 노트북에서 작업할 수 있습니다.

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

jQuery를 사용하는 것이 좋습니다(Collaboratory에는 기본적으로 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(){
  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)

글쎄요, 저는 파이썬 사람도 아니고 이 '콜라브'의 실제 용도가 무엇인지도 모릅니다.빌드 시스템으로 사용하고 있어요, ㅋㅋㅋ.그리고 저는 ssh 포워딩을 설정한 다음 코드를 넣고 실행 상태를 유지하면 작동합니다.

import getpass
authtoken = getpass.getpass()

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

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

반응형