google colaboratoryで効率よくデバッグしたい

google colaboratoryはgpuやtpuを無料で使うことができ大変便利だが、gpu関連の処理をデバッグしたい場合などは多少手間がかかる

colab上での実行が必須のコードのデバッグ時に私が行っていた手順は以下

  1. ローカルでコードを変更
  2. 適当にコミット
  3. colab上でgitコマンドによりコードを更新
  4. 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より高機能

macならbrewでインストール可能

brew install google-drive-file-stream

google driveをローカルPC上にマウントする形のため、実際にローカルにあるファイルやディレクトリと同様の扱いで操作できるため作業効率がとても上がる

driveへのdownload, uploadはcliなら cp などで済むし当然finder経由でも操作できる

これ経由で冒頭にあったcolab上でのデバッグを行う場合、まず前提として

  • ローカルPC上でマウントされたdriveの任意の場所にrepoをclone
  • colab上でもgoogle driveをマウントしておく

デバッグする場合は

  1. ローカルPCで上記cloneしたrepoのコードを変更
  2. colab上でマウントしたdrive上のrepoのコードを実行

で済むため、pushしてpullしての部分がなくなる(=ローカルで実行する場合とまったく同じ手数でよくなる)

ただし、当然だがローカルPCでの変更をcolab上から読めるようになるまでに若干のラグがある(私の環境では数秒程度)

なので注意点としては

  • colab上で実行する前に数秒待つ必要がある
  • git status などrepoの情報を集計する操作も数秒のラグが発生する
    • 参照が必要なファイルが多いほど時間がかかるようになることに注意

google-backup-and-sync

個人のアカウントでも利用可能なツールで任意のディレクトリをdriveとローカルで同期しておくことができる

macならbrewでインストール可能

brew install google-backup-and-sync

必要なrepoをdriveとローカルで同期する設定を入れておけば、file-streamで書いたことと同様のことが可能でデバッグの手間を削減できる。ただし、若干こちらの方が同期されるまでの時間が長いかも(10秒程度?) そんなことありませんでした。意図せず複数ファイルが同期されていたから遅いように見えただけで1ファイルあたりの同期にかかる時間は体感として特に変わらず