Cloud ML Engineへ学習JobをJupyterから簡単に投げたいなぁと思い、そんなJupyter用 Magic Command Extensionを作りました。
Jupyterで書いたモデルを、Runすればクラウド上で実行することができます。
Cloud ML Engineとは
簡単に言えばTensorFlowの学習や予測JobをCloud上で実行できるマネージドな環境です。一般的にはDistributed TensorFlowで大規模に学習をさせるケースが多いかと思いますが、私のようにメインマシンがMacBookでGPUも使えない環境の場合は、GPUを気軽に使えるリモートの環境として重宝しています。
また、GCEとは違ってJobが終われば自動で立ち下がるため、インスタンス落とし忘れで課金が大変な事になる心配もありません。
準備
Google Cloud SDKの設定は終わっている前提で進めます。
また、gsutil
やAPIをApplication Default Credentialsで使用しているため、以下のコマンドで設定をしておく必要があります。
gcloud auth application-default login
Jupyter用のExtensionをインストール
pipでインストールできます。
$ pip install cloudmlmagic
他にCloud ML Client Libraryをインストールする必要がありますが、上記pipでインストールされるはずです。
ソースからpython setup.py install
でもインストール可能です。
https://github.com/hayatoy/cloudml-magic
使い方
examples内にNotebookがあるのでそれを見るとわかりやすいです。
ExtensionをNotebookにロード
次のMagicをコードブロックに挿入し、実行するとロードされます。
%load_ext cloudmlmagic
Projectの設定
次のMagicを実行します。ここは適宜自分のプロジェクトに書き換えてください。
%ml_init -projectId PROJECTID -bucket BUCKET -scaleTier BASIC
*GCSのBucketはあらかじめ作成しておく必要があります。scaleTierは以下から選べます。
Scale Tier | ML Unit |
---|---|
BASIC | 1 |
STANDARD_1 | 10 |
PREMIUM_1 | 75 |
BASIC_GPU | 3 |
Cloud MLにアップロードするコードブロックを指定
%%ml_code
このMagicが入っているブロックのコードを全てアップロードします。逆にこのMagicのないブロックはローカルのみ実行となるので、学習部分だけCloud ML Engineに投げ、結果の表示などはローカルで実行するなど使い分けができます。
注意
- このMagicが含まれるブロックは、Cloud ML Engineへのアップロードの有無に関わらずローカルでも実行されます
- このMagicが含まれていないブロックの変数やパッケージを参照しないでください
その場合、ローカルでは動いてもCloud ML Engine上でエラーになります
Jobの開始
%ml_run cloud
cloud
を付けるとCloud ML Engineで実行、付けなければローカルで実行されます。このMagicが含まれるブロックのコードもアップロードされるコードに含まれます。
実行結果の確認
Consoleから確認できます。
Jobはmlmagic__**
の名前でdeployされます。
最後に
JupyterからCloud ML Engineを簡単に利用できるようになりました。
まだpackageの追加指定ができなかったり、細かい設定ができませんが徐々に追加していきます。(プルリクしてくれてもいいよ!)
Cloud ML Engineの利用者が増えるといいですね!