来年から仕事で関わる2つのプロジェクトがそれぞれ
- pytorchを使う
- jupyterlabを使う
ことがわかって、google cloudでjupyterlab+vim環境を構築してみたらいろいろ詰まった。そのメモ(2018年12月)。
前提
- google cloudのユーザ登録
- gpuインスタンスを使用可能な状態にする
- プロジェクト作成
- gcloud SDKをインストールして認証する
ところまではできているものとする
google cloudでgpuインスタンスを立ち上げる
やり方はこちらの記述通り、慣れるとGUIじゃなくてCUIでやりたくなるが、掲載のコマンドそのままだとCPUとメモリーがデフォルト値で結構貧弱なので、CPU数とメモリーを指定するには下記のように書く。
#!/bin/sh
export IMAGE_FAMILY="pytorch-latest-cu92"
export ZONE="asia-east1-a"
export INSTANCE_NAME="pytorch"
export CLOUDSDK_CORE_PROJECT='xenon-chain-217906'
gcloud compute instances create $INSTANCE_NAME \
--zone=$ZONE \
--image-family=$IMAGE_FAMILY \
--image-project=deeplearning-platform-release \
--maintenance-policy=TERMINATE \
--custom-cpu=4 \
--custom-memory=15 \
--accelerator="type=nvidia-tesla-k80,count=1" \
--metadata="install-nvidia-driver=True"
CLOUDSDK_CORE_PROJECT
はプロジェクトIDを入れる。これ実行するとしばらくしてインスタンスが作られる。
ログインしてjupyterlabを使う
pytorch用のマシンイメージはデフォルトで立ち上がるときにjupyterlabが起動するが、このままだと外からアクセスするのが面倒なので、ポートフォワードを使うと気軽にローカルからpytorchインスタンスのjupyterlabにアクセスできる。
#!/bin/sh
export IMAGE_FAMILY="pytorch-latest-cu92"
export ZONE="asia-east1-a"
export INSTANCE_NAME="pytorch"
export CLOUDSDK_CORE_PROJECT='xenon-chain-217906'
gcloud compute ssh "pytorch" -- -L 8887:localhost:8080
最後の行はssh
のL
オプションを使って、リモート(google cloud)側の8080ポートをローカル側の8887にバインドしているので、これでブラウザからlocalhost:8887
にアクセスするとjupyterlabが立ち上がるはず。
jupyterlab_vim
jupyterlabそのままでも結構使いやすそうだが、試行錯誤が多い機械学習案件なのでやっぱり編集ツールを整備しておきたい。jupyterlab(version:0.35.4)のSettings
をクリックするとText Editor Key Map
項目にvim
の選択肢を見つけ、「設定無しで使えるか、さすがlabだ」と喜んで選択するものの変化なし。やっぱ拡張機能をインストールしないと使えない。ターミナルで
jupyter-labextension list
とjupyterlabの拡張機能の状況を確認できる。何もインストールされていなかった。こちらを参考に
jupyter labextension install jupyterlab_vim
でインストールするが、権限の問題でエラーになる。どうやらただsshでログインするとインスタンス側で勝手にローカルユーザと同じ名前のユーザが作成されてそちらでログインするようです。/home
ディレクトリ下にjupyter
のフォルダがあったので、ログインコマンドを次のように変更して
gcloud compute ssh jupyter@pytorch -- -L 8887:localhost:8080
jupyter
ユーザでログインし直せば権限の問題は解決。が、今度はnodejsがインストールされていないとエラーになる。
nodejsのインストール
nodejsなんぞ、sudo apt install nodejs
でイケるっしょ、と思いきや、それだとインストールされるのはバージョン4.x.x、それだと低すぎるとjupyterlabに怒られる(jupyterlab殿は6以上でないと承知しないのだ)。sudo apt update
してからでもだめ。うぬ。。。
cat /etc/os-release
で調べてみるとLinuxが
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
になっているらしい、このディストリビューションは確か必要最小限のものしか入っていないらしい。。。うぬぬ。。。こちらを参考に
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
でやっとnodejsをインストールでけた。
あれからjupyter_vimを無事インストールし、jupyterlabの画面からSettings->Advaced Settings Editor->Extension Manager
で拡張機能を有効にして、そしてようやく僕の快適jupyterlab_vimライフが始まるのだった。
おまけ
- google cloudのお代は使ったリソースの時間分だけ課金されるので、〇〇gpu1個1時間xxx円、CPU1個1時間xx円、メモリー1ギガ1時間x円、という具合になっているので、使わないときはインスタンスを止めて置いたほうが幸せになれる。K80を1個、cpuを4個、メモリーを16ギガで使って1時間合計100円弱だった。
gcloud compute instances stop pytorch
とかgcloud compute instances start pytorch
とかでインスタンスを起動・停止できるので、これで次からはほしいときにgpuインスタンスを簡単に召喚できる。Debian Stretch
君はデフォルトの状態でll
エイリアスがない、.bashrc
に該当設定がコメントアウトされているので、そこを外してsource ~/.bashrc
でll
が使えるようになる
残留課題、インスタンス切り忘れ問題があるので、毎日定時にインスタンスを落とすスクリプトを仕組みたい(ごおごるふぁんくしょんかな)。