#背景
kaggleにはkernelというjupyter-notebookみたいな環境が用意されていてそれなりに便利なのですが、やはり制約も結構あったりでガッツリやるには専用の環境を用意したほうがいいなと思い色々と調べてGCPとDockerで環境構築をしようと思い立ちやってみました。
#概要
kaggle用の環境をGCP+Dockerで構築しようしたけど色々と詰まったのでつまずきポイントを備忘録としてまとめました。
基本的には下記記事を参考に進めていましたが、いくつかつまずいたところがあったのでその部分の説明をメインにしています。
http://scitaku.hatenablog.com/entry/2019/06/09/005657
ちなみに自分はGCPもDockerも今まで触ったこともない初心者ですのであしからず。
#つまずきポイント①
GCPでVMインスタンスを作成するのですが、いざ作成してみると何故か失敗してしまいます。
下記のような通知が出るのですが、選択したゾーンのリソースが不足しているようで作成が出来ませんとのことです。取り敢えず別のゾーン選択したら作成出来ました。ただ別の日に再度同じゾーンで作成したら問題なく出来たのでどうしても東京を選択したい!という思いがあるのであれば別日時を試してみると良いです。
The zone 'projects/kaggle-272812/zones/asia-northeast1-b' does not have enough resources available to fulfill the request. Try a different zone, or try again later.
#つまずきポイント②
VM作成時にkaggle公式のDocker Imageを導入してくれる設定があるのですが、これがなかなかDLされませんでした。
参考にした記事にもしばらく待ってくださいとあったので1時間ほど待ったのですがだめでした。
色々と調べたところkaggleのDockerのイメージが24GBくらいだそうで、私が作成したVMのストレージが10GBだったのでそれが原因かなと思い再度VMを作り直ししてストレージも100GB(参考にしたサイトも100GBだったので)にしたところ無事導入出来ました。
ただ、やり直した時もすぐにDLされたわけではなく、一旦諦めて自分で導入するかと色々と弄っている時にふと見たらあったので結構時間はかかりそうです。まあ24GBあるので当たり前かもしれませんが。
#つまずきポイント③
コンテナも無事作成できてあと少しというところでしたが最後にもう一つ問題が発生しました。
コンテナに入って
jupyter notebook --ip=0.0.0.0 --allow-root
と打つとjupyter notebookが起動してtokenが表示されるまでは良いのですがVMにsshしている状態だとsdkのshellが操作出来ません。
なのでVMに入る段階で
gcloud compute ssh "インスタンス名" -- -L 8888:localhost:8888
にしておくと良いです。
あとはローカルPCのブラウザで http://localhost:8888 に繋げばリモートホスト側のJupyter Notebookにアクセスできるようになります。
ちなみ
gcloud compute ssh "インスタンス名" -- -L 8888:localhost:8888
の意味としては localhost:8888 に繋げばリモートホストの 8888 にポートフォワードするよということらしです。
ポートフォワードせずにSSHでログインすると http://localhost:8888 に繋げた時にローカル側にアクセスしてしまうので、ポートフォワードによりリモートホスト側の8888に転送してあげる必要があるようです。
https://kuune.org/text/2017/05/14/use-jupyter-notebook-on-server-through-ssh-port-forwarding/
https://blog.mosuke.tech/entry/2014/12/31/170545/
#最後に
なんとか環境構築が出来てひとまず安心しました。
と言ってもまだ本命のkaggleには手を出せていないのでやっとスタートラインに立てたところですが。。。
ただ、今回の構築でGCPとかDockerとか流行りのものに触れてみたりできてい色々と勉強になりました。
あと個人的にはSSHのポートフォワードについて知っているようで全然しらなかったので、その点の理解が深まったのがよかったです。
取り敢えず環境構築は完了したのkaggleでばしばし機械学習していきたいです。