【GCP+Bitbucket】kaggleのための環境構築
先日,kaggle(http://kaggle.io)のための環境を構築しました.その時の作業をまとめておきます. 計算機環境としてのGoogle Cloud Platform(GCP)と,バージョン管理のためのBitbucketを使っています.これらは
- GCP : 見た目がおしゃれ,300USDのクレジットがついててしばらく無料で使える
- Bitbucket:プライベートレポジトリが無料で使える,こちらもおしゃれ
ってことで選びました.
構築にあたっては,Takumi Satoさんの動画を参考にしました.Youtubeで説明してくださっていて,とてもわかりやすかったです.
細かい手順は上の動画を参考にしてください.
GCPを準備する
上のGCPのリンクから,VMインスタンスを作成します.けちってあまり豪華な構成にはしていないです.
OSは仕事でも使うことの多いUbuntuを使ってみました.セキュリティは大事なので,公開鍵認証にしています.
Bitbucketを準備する
Githubを使うと,kaggleの利用規約には「チーム内の情報シェアなどを除き,kaggleのフォーラムを通して情報をシェアしなければならない」というものがあるらしく,Githubの公開レポジトリを使うと,この規約に違反する可能性があります.そのため,無料でプライベートレポジトリが使えるBitbucketを使います. 普通にIDをを取得してレポジトリを作成しておきましょう.
GCPへの接続
毎度GCPのページにアクセスして,そこからターミナルを立ち上げてログインすることもできますが
- 微妙にレイテンシがある
- ログインに時間がかかる
といった理由があるので,ターミナルから接続することをおすすめします.ターミナルでつぎのようにしましょう.
ssh -i (秘密鍵のパス) (ユーザ名)@(VMインスタンスの外部IPアドレス) -p (ポート番号,あれば)
こうすれば,ターミナルから接続できて便利です.
Jupyter notebookを使えるようにする
データサイエンスでは,対話的にコードが書けるJupyter Notebookを使う人が多いんじゃないかと思います.僕もそうなので,kaggle用の環境には,Jupyter notebookが必須です.
GCPでインスタンスを立ち上げたあと,Anacondaを以下のようにしてインストールします.
wget = https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh sh Anaconda3-5.2.0-Linux-x86_64.sh
これでJupyter notebookのインストールは完了です.
あとはこの記事に従って,ポートを開放したりすれば,Jupyter notebook環境の出来上がりです.
ディレクトリ構成
データサイエンスプロジェクトのディレクトリ構成をどうするか問題に関して,今回は以下の様な構成をとっています.
├── README.md ├── input: データセットを入れておく.ファイルは絶対に編集しない. │ ├── train.csv │ ├── test.csv │ └── ... ├── notebooks: 実験したnotebookを入れておく │ ├── 20180901_EDA.ipynb │ └── ... ├── results: 予測結果とか,submit用のcsvを入れておく │ ├── 20180901_predict_LASSO.csv │ └── ... └── trained_models: 訓練済みのモデルを.pklで入れておく ├── 20180901_LASSO.pkl └── ...
まずinput/には,kaggleなどからDLしたデータそのものを入れておきます.特徴量エンジニアリングなんかでいろいろとデータを弄る場合は,このファイルをいじるのではなく,別のディレクトリを作って編集して,もとのデータセットを編集しないことをおすすめします(あとで元データが何なのかわからなくなるため).また,trained_modelsには,joblib.dumpで保存したモデルを入れておきます.CVなどですごく時間がかかる場合,結果を保存しておくといろいろとあとで時間の節約になるので.
こういったディレクトリ構成ではcoockiecutterというモジュールを使うと良いっぽいですが,そこまで細かいディレクトリ構成は必要ないと感じたので(今のところは),今回はオリジナルの構成で組んでいます.
今取り組んでるコンペ
今は,不動産の特徴からその価格を予測する,House Pricesというコンペに取り組んでいます.データセットはある程度構造化されていて(欠損値などはもちろんありますが),回帰をいろいろと試してみる問題です.なにかいい結果が出たら,Kernelでも書こうかなと思っています.
https://www.kaggle.com/c/house-prices-advanced-regression-techniques
追記
gsutil -m cp gs://ストレージ上のパス VM上のパス
はじめてのエントリー
はじめまして,はてなブログでブログを始めてみました.
ブログで書いていくこと
以下のことについて,不定期で書いていきます.
- データサイエンス関連の技術の話:Python, R, Kaggle...
- 仕事の話:研究や開発,転職のことなど
- 育児の話
- 趣味の話 今後追加したり削除したりするかもしれません.
ブログを書こうと思い立ったきっかけ
現在僕はとあるメーカーの研究所で働いています.研究所内でデータサイエンティスト的なことをしています.しかしいろいろと思うところもあり(この辺の事情はまた別のエントリーで書こうと思います),2019年の1月からテック系に転職して,本格的にエンジニアとして仕事を始めることにしました.
「エンジニアってなんとなくブログを書くもの」とぼんやり思っていたのですが,セルフブランディングとか,アウトプットの場を持つことで勉強が捗るなど,いろいろとエンジニアにとっていいことがあるということなので,これを機にはじめてみることにしました.
続くかもしれないし続かないかもしれませんが,よろしくおねがいします!