オムライスの備忘録

数学・統計学・機械学習・プログラミングに関することを記す

【ライフハック】CloudRun + PythonSelenium で GoogleColaboratory を実行する #01

目的

  • 手動でColaboratory上のコードを実行させる
  • Colaboratory の制限を回避する

参考

課題

  • Colaroboratory には2の制約がある
    1. 12時間ルール : 新しいインスタンスを起動してから12時間経過
    2. 90分ルール : ノートブックのセッションが切れてから90分経過

対策

  • 以下参考から抜粋(詳しいロジックは記載したサイトを参照)
  • Colaboratory内でSeleniumを用いて以下のように対応する
    1. データ保存・読み込み, ファイル実行を自動で行う
      • これまで避けられなかった12時間リセット問題を気にせず, 12時間以上かかるようなプログラムを実行できる
    2. 実行ファイル自ら, 定期的に自らのページにアクセスする
      • 90分セッション切れが起こらない
      • ローカルPCでスクリプトを常時起動させる必要がなくなる

手順

  1. Google Colabratory へアクセスできる User Agentを準備
  2. UAgithub に push
  3. Colaboratory file を準備(FileA, FileB)
  4. Colaboratory file に設定項目を記入
  5. Colaboratory file へアクセスし、起動
  6. log の確認
  7. 【おまけ】model, data, tf-log のup

Google Colaboratory へアクセスできる User Agentを準備

UAgithub に push

  • UA管理用に github のレポジトリを作成した
    • レポジトリ名を控えておく ( 1 )
  • githubaccess tokenを発行しておく ( 2 )
  • Colaboratory での処理のlog もここに push する

Colaboratory file を準備(FileA, FileB)

  • 参考のサイトから Colaboratory file を自分のドライブ環境へコピーする(FileAとFileB)
  • 2つのfile の URLを控えておく ( 3 )

Colaboratory file に設定項目を記入

  • github の レポジトリ名 ( 1 )
  • (git clone されたときの) UAのpath
  • Colaboratory file の URL (FileA, FileB)
  • パラメータの修正 (2020/01時点では html の id の値が参考にしていた値と変わっていた)
    def click_runall(self):
        """
        「すべてのセルを実行」をクリックする関数
        """
        select_dropdown = WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((By.ID,"runtime-menu-button")))
        select_dropdown.click()
        time.sleep(1)
        select_dropdown = WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((By.ID,":1u")))
        select_dropdown.click()
    def click_change_runtime(self):
        """
        ランタイムのタイプを変更する関数
        """
        # ランタイムクリック
        select_dropdown = WebDriverWait(self.driver, 30).until(EC.element_to_be_clickable((By.ID,"runtime-menu-button")))
        select_dropdown.click()
        # ランタイムのタイプ変更クリック
        select_dropdown = WebDriverWait(self.driver, 30).until(EC.element_to_be_clickable((By.ID,":25")))

Colaboratory file へアクセスし、起動

  • 「ランタイム」 > 「すべてのセルを実行」

log の確認

  • うまくいっていれば、log file が githubにpush されている

【おまけ】model, data, tf-log のup

  • 基本的にlogはgithubを使って残していく作りになっている
  • しかし、github にpush できないものを継続的に使いたい場合は google cloud storage等の cloud storage サービスを利用する
  • 対象となるもの
    • model
    • train data
    • result data
    • tensorboard 等を利用していたら、tensorflow の log
  • タイミング
  • タイミングは git clone / git push のタイミングのどちらか
対象 up/down 処理タイミング
model (pre training するなら) download git clone
model (できたもの) upload git push
train data download git clone
result data upload git push
tf log upload git push