概要
colaboratoryをkaggleのnotebookみたいに扱って, kaggleのkernelコンペに挑戦する際にできるだけ快適に過ごしたい.
僕が実践している方法を紹介します.
kaggleのkernelここがつらい
kaggleのkernel(notebookの方)使っててここがつらいなーと感じます. 逆に僕が無知でここらへんがふつうにkernelでできるならもうこの記事の意味がないので, 解決法あったら教えてほしいです.
- 処理に時間がかかる前処理をpickle化して置いておけない(またkernel再開するとき消えちゃう)
- セルのコピペやマージができない
大きくはこの二点です.
別にGPU使わないコンペとかなら手元とかでjupyterで作ったものをuploadすればいいだけなのですが, GPU使いたいからkernelで...と思っても上記の理由でしんどかったのです.
そんなときに「あ, colaboratory使えばいいじゃん」ってなったわけです.
colaboratoryとは?
- google driveに保存されるjupyter notebookだよ
- google様の力でGPUも使えるよ
- RAMは13GBくらいでオーバーするとセッションがリセットされるよ
- くわしくはこちらの動画を見てね
kernelのnotebooksと似たような環境(若干colaboratoryのほうが強いのかな?)なのでcolaboratoryで死ぬとか, 実行時間が足りないならkernelの方もだめって考えてます.
手元のjupyterとまではいかなくてもセルの操作のショートカットとかもあるし, google driveにpickleを保存すればあとから呼び出して, 前処理の時間等を削減できるしいいかんじです.
あとダークモードもあるよ.みんなダークモード好きだよね.
実践
データの準備とディレクトリ構成
google driveにディレクトリを作ります.
僕はkaggleというディレクトリの配下にコンペごとにディレクトリを用意しています.
hogeコンペとfugaコンペがあったらこんな感じです.
My Drive/
├─ kaggle/
├─ hoge_competition/
│ ├─ input/
│ └─ working/
└─ fuga_competition/
├─ input/
└─ working/
今回はhogeコンペに参加することを想定してさらに詳しくディレクトリ構成を説明します.
ノートブックとinputはこんな感じ.
My Drive/
├─ kaggle/
└─ hoge_competition/
├─ input/
│ ├─ hoge_competition
│ │ ├─ train.csv
│ │ ├─ test.csv
│ │ └─ sample_submission.csv
│ └─ other_datasource/
│ └─hogehoge.vec
└─ working/
└─ hoge.ipynb
input配下は外部のdatasetを使うかどうかで少し変わりますので注意してください(使わない場合input配下にtrainやらがいるようになる).
notebookはinputと同じ階層にあるworking
配下にできるようです.
以上でディレクトリ構成が完成です.
Google Driveをマウントする
colaboratory側から自分のgoogle driveを認識できるようにします.
これはcolaboratoryで,
use_colaboratory = True
if use_colaboratory:
import os
from google.colab import drive
drive.mount('/content/drive')
os.chdir('drive/My Drive/kaggle/hoge_competition/working')
このセルを実行すると「どのアカウントのgoogle drive使うか」ってのを聞かれて, 選んで認証すると, 認証コードが画面に表示されます.
それをコピペして, 上記のセルに戻ると実行待ちになっているので, そこに認証コードを貼り付けてエンターキーでマウントされて, working配下のnotebookと認識されます.
毎日この認証しなきゃいけないのなんとかならないかなぁと若干思っております.
use_colaboratory
フラッグをオフにすれば, kernelでも使えます.
他にpickle等からロードするかどうかのフラッグも使うようにして, kernelではオフにして使っています.
kernelにupload
kernelのnotebookを開いて, 左上のFile
からuploadできます
注意点
- 繰り返しになりますが, 外部ソースを使う場合
input
配下のディレクトリ構成が変わるのは注意してください - けっこう大きなデータセットを使う場合, あっという間にgoogle drive無料の範囲の15GBまで行くので注意してください(gmailが届かなくなるかもとか怖いこと言われます)
まとめ
以上が現在僕が実践しているkernelコンペを快適に過ごす方法です.
他にもいい方法があったら教えてほしいです!
kernelコンペがんばるぞ!