Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

google cloudの機械学習用gpuインスタンスでjupyterlab_vim拡張機能を使えるようにするまで

$
0
0

来年から仕事で関わる2つのプロジェクトがそれぞれ

  • pytorchを使う
  • jupyterlabを使う

ことがわかって、google cloudでjupyterlab+vim環境を構築してみたらいろいろ詰まった。そのメモ(2018年12月)。

前提

  1. google cloudのユーザ登録
  2. gpuインスタンスを使用可能な状態にする
  3. プロジェクト作成
  4. 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

最後の行はsshLオプションを使って、リモート(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 ~/.bashrcllが使えるようになる

残留課題、インスタンス切り忘れ問題があるので、毎日定時にインスタンスを落とすスクリプトを仕組みたい(ごおごるふぁんくしょんかな)。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>