Kaggle notebook上で作業していると、時々インポートしたライブラリ内で発生したエラーに遭遇する。これは必ずしもライブラリ内の実装に問題があるわけではなく、自分の書いたコードに問題があることが多い。しかし、デバッグする上ではライブラリの中のコードにコメントアウトを挟み込むことで原因を究明することが有効なこともある。このような場合、Kaggle notebook上ではファイルを編集することは非常に手間である。
ライブラリ内のファイルを編集しながらデバッグするには、ローカルのマシンを使うのが最も簡単ではあるが、Kaggleと似たような環境でデバッグを行うにはGoogle Colabを使うのが便利である。Google ColabではKaggleと同様にGPUを使うこともできるので、GPUとのデータのやり取りに関する部分のデバッグも行うことができる。
で、問題となるのはそれぞれのプラットフォーム間でのデータ連携であり、今回はこちらについてメモを残すことにする。
Kaggle -> Google Colab
KaggleのデータにGoogle Colabからアクセスするには、Kaggleで発行したアクセスキーを読み込み、Colabからデータにアクセス、コピーすることで行う。
まずはKaggleの自分のAccountページに移動し、'Create New API Token'を押してトークン'kaggle.json'をダウンロードする。
ダウンロードしたトークンをgoogle driveにアップロードする。以下、トークンを'My Drive'配下に格納した場合を書く。
Google Colab notebookに移動し、まずはGoogle DriveをColabのデータとしてマウントする。以下の例では、Colabの'/content/drive/'上にgoogle driveのMy Driveがマウントされ、'/content/drive/MyDrive'が生成される。
from google.colab import drive
drive.mount('/content/drive')
続いて、下記コマンドを実行する。
import os
import json
f = open("/content/drive/MyDrive/kaggle.json")
json_data = json.load(f)
os.environ['KAGGLE_USERNAME'] = json_data['username']
os.environ['KAGGLE_KEY'] = json_data['key']
あとはKaggle用のパッケージをインストールすれば、アクセスが可能になる。
!pip install kaggle
データのダウンロード手順は次のようにする。まずはデータがあるページまで移動する。下の方に行くと、APIコマンドが書いてあるのでコピーする。
Google Colab notebookに戻り、こちらをペーストして実行する。
!kaggle competitions download -c siim-covid19-detection
データは80G超なので途中でストップした。
コンペのデータは大容量なので、データを使ったテストはKaggle notebook上で行い、データの一部を使った実験や、他の方が提供している改造版のパッケージを試すときなどは、上記の方法でGoogleにもってきてテストするようにしている。
Google Colab -> Kaggle
残念ながら、私の調べた限りGoogle ColabからKaggleへ直接データを移す手段は見つからなかった。そのため、Google Colabから一度データをダウンロードし、KaggleのDatasetとしてアップロードし、notebookからそのDatasetを追加することで使うようにしている。
なお、データはzipやtar.bzで圧縮してアップロードすることが推奨されており、アップロードされたデータのうち、圧縮ファイルと認識されたものは自動的に解凍される。tar.bzなどはそのまま使いたいときもあるので、便利なようで不便なのかもしれない。