kaggleやSIGNATEのようなデータ分析コンペでは時に大容量データを扱うことがあるので、ラップトップPCではメモリが足りなくなることがあります。そういう場合はつよつよPCを購入するかGCPやAWSのようなクラウド環境を利用するのですが、後者はプログラミング初心者には難しい面があります。Google CloudのAI Platform Notebooksを使うと簡単にコンペの分析環境を作れるため紹介したいと思います。
AI Platform Notebookのインスタンスを作成する
- Google Cloud Platformで新しいプロジェクトを作成する。(typoでpropjectになってしまいました)
- ナビゲーションメニュー > 人工知能 > AI Platform > ノートブック を選択する。
- APIを有効にしていない場合は有効にする。
- 新しいインスタンスから好きな環境を選ぶ。(今回はCustomize instanceを選択します)
- 環境を設定する。(今回はコンペに必要なライブラリが一通りインストールされているKaggle Pythonを選択します)
- 保存してしばらくするとインスタンスが作成されるので、JUPYTER LABを開くとJUPYTER LABが開ける。
スワップ領域を設定する
pandasで集約操作を行うときや、LightGBMで訓練前にbinを良い感じに設定する時等、瞬間的にメモリが必要になる場合があります。普段はそんなにメモリを使わないのに、ピークの時だけメモリが必要だからという理由でメモリの大きなインスタンスを立てたくはないですよね。そういう場合はスワップ領域を設定すると解決できる場合があります。
- ノートブックインスタンス一覧から設定したいインスタンスの名前をクリックする。
- リモートアクセス > SSH を押下する。
- 次のコマンドを入力する。(今回は32GiBのスワップ領域を設定しています)
sudo dd if=/dev/zero of=/swapfile bs=1M count=32768
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Google Cloud Storageからデータを転送する。
JUPYTER LABから直接データをアップロードすることもできますが、大容量のデータを複数インスタンスにアップロードしたいときはGoogle Cloud Storageを中継すると便利です。
- ノートブックインスタンス一覧からインスタンスの名前をクリックし、サービスアカウント名をメモしておく。
- ナビゲーションメニュー > ストレージ > Storage > ブラウザ を選択する。
- バケットを作成する。
- ナビゲーションに従ってストレージの設定を行う。(よくわかっていませんがアクセス制御を均一にしています)
- バケットが作成出来たら、権限のタブに移動し、先ほどメモしたサービスアカウントに権限を付与する。
- バケットに転送したいファイルをアップロードする。(フォルダを作成してまとめておくと便利です)
- JUPYTER LABを開きterminalを開いて以下のコマンドで転送を行う。(-rは複数ファイルを送るときのプロパティです)
gsutil cp -r [転送したいディレクトリ] [転送先のディレクトリ]
おわりに
コンペに参加してみたいけど高いPCを買うのはちょっと……という人はAI Platformを利用すると手軽にコンペに参加できます。
最初の300$は無料なのでぜひ使ってみてください。