LoginSignup
0
1

More than 1 year has passed since last update.

SSHの使用を禁じられたColaboratoryへの想いは変わらず(Localで開発した.pyをColab上で楽実行できた報告)

Last updated at Posted at 2022-08-16

前置き(急ぐ方はSKIP)

Google Colaboratory(以下、colabo)上でSSHの使用が禁じられてしまいました。
つまり、そのまま.pyでの実行が禁じられてしまったと判断します。
これからは、Colabo=Jupyterノートブックから開発コードを呼び出さねばならず、手間が増える事が懸念でした。

ColaboProを使用する前だったので、他の手段(別:HPC提供サービス)も検討しましたが、コスパではcolaboがよさそうです。
GPUマシンが壊れたり、買い替え先にNVidia-GPUが無い場合に、Colaboが使えるかどうか確認が必要でしたので、次の通り試しました。

結論 : RemoteDebug不可は痛いが、十分使える

  1. 結論: LocalPCで開発した.pyは楽実行可。
  2. ただし、SSH無しはPyCharmやらから実行不可は不便
  3. 予備策として。ただし、RTX2080より遅い?1,072円/月はコスパ良いかな。
  4. 変更を要するかもしれない点
    1. Pyhon3.7互換コードへと修正
      1. 2022.8.19現在, ColaboのPyは3.7.13。
    2. PoetryがColabo上で使えない
      1. 私はrequirements.txtへ切り替えた
      2. pipenvも使えないかも。
  5. ソースコードの同期方法
    1. GitHub経由 : Colab 上で GitHub を使用する
    2. GoodSync, RealTimeSyncなどからLocalPC<->GoogleDrive(以下GDrive)経由。 ←こちらを説明します。
  6. 生成物の保存(セッション切れ問題)
    2. GDriveへ保存されるのでセッション切れになっても、出力ファイルは全てGDriveへ保存される

手順 : コード同期

  1. 私はGoodSyncでLocalPCからGDriveへプロジェクトフォルダをコピーします。
    1. 代替手段
      1. RealTimeSync
      2. Googleの純正Client
  2. 以下はGDriveの話
  3. プロジェクト内でColaboノートブックを生成
  4. 下記コードをセル内に記載して行く。
  • 各変数の設定
    Colaboratory/JupyterNotebookでは!から開始して定義した変数をPython内でそのまま使える事を利用して、冒頭にプロジェクトPATHなどを定義して、残りのコードが使い回せるようにします。
# GDrive上のProject FolderへのPATH
prj_path_on_gdrive = "/path/project/on/gdrive"

# requirements.txtへのPATH(ただし、Projects上)
req_txt_rpath="requirements4colabo.txt"

# 実行時のCWD
cwd_run="src"

# 実行する.py
main_py_rpath="main.py"

# 上記実行.pyへのパラメータ
param4py="
  • GDriveのマウント
# mount Google Drive
from google.colab import drive
drive.mount('/content/gdrive'
  • projectのCWD変更
myprj_abs_path="/content/gdrive/MyDrive"+prj_path_from_gdrive
%cd $myprj_abs_path
%ls
  • シンボリックリンクを張る
#
# ProjectExplorerにプロジェクトDirへのシンボリックリンクを生成
import os
# 末尾のFolderNameを取り出し、そのフレーズを仮想フォルダ名としてシンボリックリンクを張る
last_dir=os.path.basename(os.path.normpath(myprj_abs_path))
print(last_dir)
!ln -s $myprj_abs_path /content/$last_dir
  • 必要なパッケージをインスト
!pip install -U -r $req_txt_rpath
  • main.pyを呼び出す
%cd $cwd_run
# [パラメータ] ※パラメータはargparse/clickを使って指定できるようにしておくのが良い。
if param4py=="":
    # パラ無し
    # param4py2=""
    !python $main_py_rpath
else:
    # パラ有り
    # param4py2="-m "+param4py
    !python $main_py_rpath param4py

以上。

poetryが使えない事でハマってしまった以外は、代替GPUとして有用そうです。

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1