google colaboratoryはgpuやtpuを無料で使うことができ大変便利だが、gpu関連の処理をデバッグしたい場合などは多少手間がかかる
colab上での実行が必須のコードのデバッグ時に私が行っていた手順は以下
- ローカルでコードを変更
- 適当にコミット
- colab上でgitコマンドによりコードを更新
- colab上で実行
3.の際は以下のようなコマンドを使っていた
!git reset --hard HEAD~3 !git pull !git log -n1
resetはコミットをまとめ直したとき用、logはちゃんと意図どおりに更新されたかの確認用
慣れてしまえば小さな手間なので気にしてなかったがちょっと調べてみたらもっとよいやり方を見つけたのでメモ
以下のどちらかを使うというのが答え
どちらのツールもローカルPCのファイルシステム経由でgoogle driveにアクセスできるようにするもの
各機能の比較はこちらがわかりやすかった
https://www.cloud-ace.jp/column/detail82/
これらはgoogle colaboratoryを使うか否かに関係なく、そもそもgoogle driveとのやり取りが効率よくできるようになるためdriveを使うなら入れておいた方がよい類のものだった
google-drive-file-stream
企業用のgoogleアカウントを持っている場合のみ使えるツールで基本的にgoogle-backup-and-syncより高機能
brew install google-drive-file-stream
google driveをローカルPC上にマウントする形のため、実際にローカルにあるファイルやディレクトリと同様の扱いで操作できるため作業効率がとても上がる
driveへのdownload, uploadはcliなら cp
などで済むし当然finder経由でも操作できる
これ経由で冒頭にあったcolab上でのデバッグを行う場合、まず前提として
- ローカルPC上でマウントされたdriveの任意の場所にrepoをclone
- colab上でもgoogle driveをマウントしておく
デバッグする場合は
- ローカルPCで上記cloneしたrepoのコードを変更
- colab上でマウントしたdrive上のrepoのコードを実行
で済むため、pushしてpullしての部分がなくなる(=ローカルで実行する場合とまったく同じ手数でよくなる)
ただし、当然だがローカルPCでの変更をcolab上から読めるようになるまでに若干のラグがある(私の環境では数秒程度)
なので注意点としては
- colab上で実行する前に数秒待つ必要がある
git status
などrepoの情報を集計する操作も数秒のラグが発生する- 参照が必要なファイルが多いほど時間がかかるようになることに注意
google-backup-and-sync
個人のアカウントでも利用可能なツールで任意のディレクトリをdriveとローカルで同期しておくことができる
brew install google-backup-and-sync
必要なrepoをdriveとローカルで同期する設定を入れておけば、file-streamで書いたことと同様のことが可能でデバッグの手間を削減できる。ただし、若干こちらの方が同期されるまでの時間が長いかも(10秒程度?)
そんなことありませんでした。意図せず複数ファイルが同期されていたから遅いように見えただけで1ファイルあたりの同期にかかる時間は体感として特に変わらず