コンテナで機械学習を動かすKubeflow
KubernetesでオーケストレートされたDockerコンテナでTensorflowを動かすKubeflowというツールがGithubに上がっていました。
https://github.com/google/kubeflow
ためしに動かしてみました。
Kubeflowとは
KubeflowはKubernetesで機械学習を動かすためのスケーラブルでポータブルな環境を提供します。
目的は"to provide a straightforward way for spinning up best of breed OSS solutions"とのことですので、OSSで機械学習基盤を実現するシンプルな構成を提供するというものだと思います。
Kubeflowには以下が含まれています。
- JupyterHub
- Tensorflow Training Container
- Tensorflow Serving
というわけで、モデル開発(JupyterHub)、学習(Tensorflow Training Container)、推論(Tensorflow Serving)まで、機械学習に関わる一連の機能を提供しています。
これらをDockerコンテナとKubernetesのymlで提供しているので、すぐ使い始められてスケーラブルも簡単、というものです。
早速動かしてみる
早速動かしてみます。
Kubernetesを構築後(ここが一番たいへんでは?)、git clone
してKubernetesから起動します。
具体的には以下のコマンドで構築可能です。
git clone https://github.com/google/kubeflow.git
cd kubeflow/
kubectl apply -f components/ -R
kubectl get svc,pods,rs,deployment,role,rolebinding
で起動されているものを確認すると以下が表示されます。
なんかいろいろ動いていますが、ひとまずJupyterHubにアクセスしてみます。
JupyterHubの初期ログインユーザ/パスワードは任意です。好きなユーザとパスワードがそのままユーザとパスワードになります。
ユーザとパスワードを設定すると同時に、このユーザのJupyterHubに割くリソースを設定します。
どうもユーザ/パスワードを設定することで新たにpodsを起動しているようです。
ユーザ用JupyterHubの起動には少々時間がかかりますが、正常起動するとJupyterHubのログイン後画面が表示されます。
ディレクトリがいくつかありますが、.ipynbはtensorflow-models/samples/outreach/blogs/housing_prices.ipynb
しか見つけられませんでした。
なお、.pyのサンプルはたくさんありますが、どう動かすのかはよくわかりません。
JupyerHubで動かすわけではなさそうですし、どうするのでしょうね(笑)
tf-controllerのサンプル
JupyterHub以外にも、tf-controllerのサンプルがkubeflow/tf-controller-examples/tf-cnn/
ディレクトリにあります。
https://github.com/google/kubeflow/tree/master/tf-controller-examples/tf-cnn
こちらにはkube jobsがいろいろ用意してあり、kubectl create
で実行可能です。
cd kubeflow/tf-controller-examples/tf-cnn/
kubectl create -f tf_job_cpu.yaml
CPU用とGPU用が用意されています。
現時点(2017年末)でKubernetesからGPUアクセスするのはまだα機能ですが、今後正式版になっていくのでしょう(期待)
kubectl get svc,pods,rs,deployment,role,rolebinding,jobs
で確認すると、更にいろいろ起動していることがわかります。
jobsとしてマスターとワーカーとパラメータ・サーバが起動していて、Resnet50の学習が動いているようです。
今後に期待?
まだドキュメントが少なく、まともに動かせていませんが、機械学習やディープラーニングとコンテナは相性が良いと思うので、今後発展していくと期待しています。