Google Colabが切断されないようにするにはどうすればよいですか?


136

Q:Google Colabがタイムアウト時に切断されないようにプログラムで防ぐ方法はありますか?

次に、ノートブックが自動的に切断される条件について説明します。

Google Colabノートブックのアイドルタイムアウトは90分、絶対タイムアウトは12時間です。つまり、ユーザーがGoogle Colabノートブックを90分以上操作しなかった場合、そのインスタンスは自動的に終了します。また、Colabインスタンスの最大有効期間は12時間です。

当然のことながら、インスタンスを常に手動で操作しなくても、インスタンスから最大値を自動的に絞り出します。ここでは、一般的に見られるシステム要件を想定します。

  • Ubuntu 18 LTS / Windows 10 / Macオペレーティングシステム
  • Linuxベースのシステムの場合、Gnome3やUnityなどの一般的なDEを使用します
  • FirefoxまたはChromiumブラウザ

このような動作 GoogleColabの利用規約に違反していないことをここで指摘する必要がありますが、FAQによると推奨されていません(つまり、本当に必要ない場合は、道徳的にすべてのGPUを使い切ることはできません。 )。


私の現在の解決策は非常に馬鹿げています:

  • まず、スクリーンセーバーをオフにして、画面が常にオンになるようにします。
  • 私はArduinoボードを持っているので、それをゴム製のアヒルのUSBに変えて、睡眠中の基本的なユーザーインタラクションをエミュレートします(他のユースケースで手元にあるからです)。

より良い方法はありますか?


1
私も同じ質問を考えていました。彼らの論文防衛の時間の間に学生のために役立つでしょう。
Dmitrii

2
「90分のアイドルタイムアウト...ユーザーがGoogleColabノートブックを90分以上操作しなかった場合、そのインスタンスは自動的に終了します。」kerastunerは使用できないので、それは悪いことです。Googleのスタッフは、一般の人々にkerastunerを本当に使用してもらいたいのであれば、もっと深く考える必要があります。
ジェフリーアンダーソン

1
このスクリプトの実行を停止するにはどうすればよいですか?
ムルタザカマル

1
コードではなく、システム上の小さな重みとバックスペースキーでうまくいくことができます。ご理解いただければ幸いです。
VikalpJain20年

回答:


117

編集: どうやら解決策は非常に簡単で、JavaScriptを必要としません。下部に次の行を持つ新しいセルを作成するだけです。

while True:pass

ここで、セルを実行シーケンスに保持して、無限ループが停止しないようにし、セッションを存続させます。

古い方法: javascriptの間隔を設定して、60秒ごとに接続ボタンをクリックします。Ctrl + Shift + Iを使用して(Webブラウザーで)開発者設定を開き、コンソールタブをクリックして、コンソールプロンプトにこれを入力します。(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
それは言うキャッチされない例外TypeErrorを:ConnectButtonでヌルのプロパティ「をクリック」を読み取ることができません
Shaidaムハンマド

1
あなたが古い答えているようだ
jgauth

1
JSセレクターを更新して修正
TanayKarve20年

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私は(私は10時間以上のトレーニングモデルしてきた)、それはまだあなたが別のタブ上にある場合でも動作します、またはあなたのスクリーンが原因スクリーンセーバーにオフになっていることが判明
FalconUA

49

接続ボタンのIDが「colab-connect-button」に変更されたため、次のコードを使用してボタンをクリックし続けることができます。

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

それでも機能しない場合は、以下の手順に従ってください。

  1. (コラボの右上にある)接続ボタンを右クリックします
  2. 検査をクリックします
  3. ボタンのHTMLIDを取得し、次のコードに置き換えます
function ClickConnect(){
    console.log("Clicked on connect button"); 
    document.querySelector("Put ID here").click() // Change id here
}
setInterval(ClickConnect,60000)

5
これは、新しいボタンID(2020年2月)による現在のソリューションです
Kaushal28 2010

グーグルがこれを機能させようとしない場合(例:それをクラスにし、同じクラスで複数の偽の非表示ボタンを持っている)、ステップ3の代わりにいつでもできます:右クリック->コピー-> JSパスのコピー
Banjer_HD

それでも同じ問題が発生するランタイムが切断されました、非
アクティブの

5
このスクリプトの実行を停止するにはどうすればよいですか?
ムルタザカマル

2
@MurtazaKamal Crtl + Shift + I、ソースに移動し、一時停止ボタンをクリックします。
FaisalMaqbool20年

19

まあこれは私のために働いています-

コンソールで次のコードを実行すると、切断できなくなります。Ctrl + Shift + iを押して、インスペクタービューを開きます。次に、コンソールに移動します。

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

グーグルコラボが切断されないようにする方法


1
おかげでこれは私にとってもうまくいきます。(私は先週ここに同じコメントを残しましたが、それは消えました。仕事を失わないことが重要なので、この答えは正のフィードバックに値します。)
GeoffreyAnderson19年

動作していませんが、接続が切断されます。(Firefox Browser 74.0(64ビット)を使用)。
hafiz0 3120年

これは、ブラウザウィンドウを最小化したままにして、他のアプリケーションで動作する場合でも機能しますか?
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();

私にとって、これはエラーをスローしない唯一の解決策です。ありがとう
ペアロン

私は上記の方法と他のいくつかのブログを試しました。はるかに、そして今日に関連して、あなたのコードは両方ともエラーなしで動作します。ありがとう:)
HarryS20年

15

pynputを使用してPCにPythonコードを作成します

from pynput.mouse import Button, Controller
import time

mouse = Controller()

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

デスクトップでこのコードを実行し、任意のディレクトリのディレクトリ構造にマウス矢印を向けます(左パネルのコーラ-ファイルセクション)このコードは30秒ごとにディレクトリをクリックし続けるため、セッションが30秒ごとに拡大および縮小します。期限切れになる重要-このコードをPCで実行する必要があります


これを試しましたが、pynputをインポートするとDisplayNameErrorが発生しました。これはおそらく、ブラウザ(ホストされたランタイムセッション内)からのみcolabにアクセスでき、キーボード/マウスなどにはアクセスできないためです。
HasnainMamdani20年

あなたはその考えを誤解していると思います。ColabはPythonではアクセスされません。上記のコードによって制御されるだけでマウスローカルPCで(なぜなら、シミュレーション、ブラウザでのマウス操作に).Fixライブラリの問題
Seyon Seyon

13

接続ボタンをクリックする代わりに、コメントボタンをクリックするだけでセッションを維持できます。(2020年8月)

function ClickConnect(){

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

11

マクロプログラムを使用して、RAM /ディスクボタンを定期的にクリックし、モデルを一晩中トレーニングします。秘訣は、Ram / Disk Colabツールバーボタンを2回クリックする間隔を短くして、ランタイムが切断されても再接続するようにマクロプログラムを構成することです。(最初のクリックでダイアログボックスを閉じ、2番目のクリックで再接続します)。ただし、ラップトップを一晩中開いたままにして、Colabタブを固定する必要があります。


8

いくつかのスクリプトの助けを借りた上記の答えはおそらくうまくいくでしょう。特に、ディープラーニングネットワークモデルのトレーニングのように、プログラムがGoogleドライブからデータを読み取る必要がある場合は、スクリプトを使用してreconnect操作を行うことが役に立たないため、スクリプトなしでの厄介な切断に対する解決策(または一種のトリック)があります。colabとの接続を切断すると、プログラムが停止します。モデルがデータセットを再度読み取れるようにするには、手動でGoogleドライブに再度接続する必要がありますが、スクリプトはそのことを行いません。
私はすでに何度もそれをテストしました、そしてそれはうまくいきます。
colabページでブラウザ(私はChromeを使用)を使用してプログラムを実行する場合、プログラムの実行が開始されたら、他のWebページに切り替えたり、別のWebページを開いたり閉じたりするなど、ブラウザに対して操作を行わないでください。など、そのままにしてプログラムの実行が終了するのを待つだけで、pycharmなどの別のソフトウェアに切り替えてコードを書き続けることができますが、別のWebページに切り替えることはできません。なぜ開いたり閉じたり、他のページに切り替えたりすると、グーグルコラボページの接続の問題が発生するのかわかりませんが、検索ジョブを実行するなど、ブラウザを煩わせるたびに、コラボへの接続がすぐに切断されます。


Firefoxがこのトリックでうまく機能していることをあなたの答えに追加します。しかし、私にとっては、Macでスリープモードをオフにし、ブラウザウィンドウを他のすべてのウィンドウの前に置いて、積極的に作業しているかのようにしました。私はそれを一晩中保管しました、そしてそれは働きます。javascriptのトリックはどれも機能していません。1つの注意点は、私がGoogle Colab Proを使用していることです。したがって、これが無料のcolabで機能するかどうかはわかりません。
YasserSinjab20年

@Yasser Sinjab追加していただきありがとうございます。無料バージョンを使用しており、問題なく動作します。
HuXixi20年

8

これを試して:

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

setInterval(ClickConnect,60000)

6

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

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が表示されます。表示される新しいウィンドウで2つのオプション間でマウスのフォーカスを移動するだけで、DOMに要素が追加されます。マウスがフォーカスを失うとすぐに、クリックしなくても、それらはDOMから完全に削除されます。


同意します、解決策はありますか
TalhaAnwar20年

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

1つを更新しました。わたしにはできる。

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

あなたのために働いていない場合は、実行してそれをクリアしてみてください:

clearInterval(myjob)


4

これは私のために働いた(彼らはボタンのクラス名またはIDを変更したようです):

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


4

おそらく、以前のソリューションの多くはもはや機能していません。たとえば、この次のコードはColabで新しいコードセルを作成し続けますが、機能します。間違いなく、コードセルの束を作成することは不便です。数時間の実行で作成されるコードセルが多すぎてRAMが不足していると、ブラウザがフリーズする可能性があります。

これにより、コードセルが繰り返し作成されます—

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)

私は2020年11月にFirefoxでこのコードをテストしました。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)
KelSolaar20年

3

これらのJavaScript関数に問題があります。

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

ボタンが実際にクリックされる前に、コンソールに「クリックされた接続ボタン」が印刷されます。このスレッドのさまざまな回答からわかるように、Google Colabが起動されてから、接続ボタンのIDが数回変更されています。また、将来的にも変更される可能性があります。したがって、このスレッドから古い回答をコピーする場合は、「接続ボタンをクリックしました」と表示される場合がありますが、実際にはそうではない場合があります。もちろん、クリックが機能しない場合はコンソールにエラーが表示されますが、誤って表示されない場合はどうなりますか?したがって、これを行う方がよいでしょう。

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)

あなたの答えの説明を含めることを検討してください。
SurajSubramanian20年

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

私はPythonの人ではなく、この「Colab」の実際の使用法もわかりません。ビルドシステムとして使用しています(笑)。そして、私はそれにssh転送を設定し、このコードを入れて実行したままにしておくと、うまくいきます。

import getpass
authtoken = getpass.getpass()

3

最も投票された回答は確かに私にとってはうまくいきますが、それは[セッションの管理]ウィンドウを何度もポップアップさせます。
以下のようなブラウザコンソールを使用して更新ボタンを自動クリックすることで、これを解決しました

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

この要点で、このためのスニペットを追加してくださいhttps://gist.github.com/Subangkar/fd1ef276fd40dc374a7c80acc247613e


3

このコードは、ファイルエクスプローラーペインで[フォルダーの更新]をクリックし続けます。

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

1
これを機能させるには、ファイルエクスプローラー/フォルダーペインを展開する必要があることに注意してください。
KelSolaar20年


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を押すように完全に決定されているようです
MarcLaugharn20年

なぜfor key in array: press(key)
PixelZerg

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(マウスを制御するため)で実行するだけで、Colabの12時間のセッションを最大限に活用できるようになります。

クレジット: Colab(Pro)を使用している場合非アクティブによるセッションの切断の防止


私は、あなたが同様に別のスレッドでそれを置きたいと思うでしょう疑い:D
FalconUA

@FalconUA、昨夜PCでColabを実行したままにしましたが、朝起きたとき、まだ実行されていることがわかりました。スクリプトはうまく機能していると思いますが、スレッドに関する警告がいくつか表示されました。その通りです。
singrium

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

上記のコードを試してみてください:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.