前置き(急ぐ方はSKIP)
Google Colaboratory(以下、colabo)上でSSHの使用が禁じられてしまいました。
つまり、そのまま.pyでの実行が禁じられてしまったと判断します。
これからは、Colabo=Jupyterノートブックから開発コードを呼び出さねばならず、手間が増える事が懸念でした。
ColaboProを使用する前だったので、他の手段(別:HPC提供サービス)も検討しましたが、コスパではcolaboがよさそうです。
GPUマシンが壊れたり、買い替え先にNVidia-GPUが無い場合に、Colaboが使えるかどうか確認が必要でしたので、次の通り試しました。
結論 : RemoteDebug不可は痛いが、十分使える
- 結論: LocalPCで開発した.pyは楽実行可。
- ただし、SSH無しはPyCharmやらから実行不可は不便。
- 予備策として。ただし、RTX2080より遅い?1,072円/月はコスパ良いかな。
- 変更を要するかもしれない点
- Pyhon3.7互換コードへと修正
- 2022.8.19現在, ColaboのPyは3.7.13。
-
PoetryがColabo上で使えない。
- 私はrequirements.txtへ切り替えた。
- pipenvも使えないかも。
- Pyhon3.7互換コードへと修正
- ソースコードの同期方法
- GitHub経由 : Colab 上で GitHub を使用する
- GoodSync, RealTimeSyncなどからLocalPC<->GoogleDrive(以下GDrive)経由。 ←こちらを説明します。
- 生成物の保存(セッション切れ問題)
2. GDriveへ保存されるのでセッション切れになっても、出力ファイルは全てGDriveへ保存される。
手順 : コード同期
- 私はGoodSyncでLocalPCからGDriveへプロジェクトフォルダをコピーします。
- 代替手段
- RealTimeSync
- Googleの純正Client
- 代替手段
- 以下はGDriveの話
- プロジェクト内でColaboノートブックを生成
- 下記コードをセル内に記載して行く。
- 各変数の設定
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として有用そうです。