【Kubeflowのラズパイ包み】ラズパイにKubeflowをインストールして機械学習基盤化するとこまで
前回作ったkubernetesのラズパイ包みを、Kubeflowのラズパイ包みにして、機械学習基盤のおもちゃにする。
まずはksonnetからのインストールから
ksonnetはkubernetesをjsonnetというJSON用のDSLを使った設定ファイル管理ツールっぽい。これを使ってKubeflowのデプロイなどの設定を行う。
macOSならbrewで入れられるのだが、それ以外はバイナリからのビルドになる。
インストールにgolang必要そうなので、まずはそっちインストールから。
$ wget https://golang.org/dl/go1.10.1.linux-armv6l.tar.gz $ sudo tar -C /usr/local -xzf go1.10.1.linux-armv6l.tar.gz $ ls -l /usr/local/go $ cat /usr/local/go/VERSION $ sudo vi ~/.bashrc $ source $HOME/.bashrc
次にksonnet。GitHubのリポジトリからバイナリを取ってきて、インストールし、パスを通す。
# Clone the ksonnet repo into your GOPATH $ go get github.com/ksonnet/ksonnet # Build and install binary under shortname `ks` into $GOPATH/bin $ cd $GOPATH/src/github.com/ksonnet/ksonnet $ make install $ PATH=$PATH:$GOPATH/bin $ ks version ksonnet version: dev-2018-07-20T09:11:08+0000 jsonnet version: v0.10.0 client-go version: kubernetes-1.10.4
とりあえず入った。
ksコマンドは下記わかってればなんとかなる。
- ks generate : componentsについてのmanifestを作成
- ks apply : クラスタに実行可能なmanifestをあてる
ここから先はKubeflow v0.1のアナウンスを参考にする。
$ NAMESPACE=kubeflow $ kubectl create namespace ${NAMESPACE} $ VERSION=v0.1.3 # Initialize a ksonnet app. Set the namespace for it's default environment. $ APP_NAME=my-kubeflow $ ks init ${APP_NAME} INFO Using context "kubernetes-admin@kubernetes" from kubeconfig file "/home/pi/.kube/config" INFO Creating environment "default" with namespace "default", pointing to "version:v1.9.9" cluster at address "https://192.168.13.2:6443" INFO Generating ksonnet-lib data at path '/home/pi/my-kubeflow/lib/ksonnet-lib/v1.9.9' $ cd ${APP_NAME} $ ks env set default --namespace ${NAMESPACE} # Install Kubeflow components $ ks registry add kubeflow github.com/kubeflow/kubeflow/tree/${VERSION}/kubeflow $ ks pkg install kubeflow/core@${VERSION} INFO Retrieved 22 files $ ks pkg install kubeflow/tf-serving@${VERSION} INFO Retrieved 5 files $ ks pkg install kubeflow/tf-job@${VERSION} INFO Retrieved 5 files # Create templates for core components $ ks generate kubeflow-core kubeflow-core INFO Writing component at '/home/pi/my-kubeflow/components/kubeflow-core.jsonnet' # Deploy Kubeflow $ ks apply default -c kubeflow-core ERROR handle object: patching object from cluster: merging object with existing state: Get https://192.168.13.2:6443/api/v1/namespaces/kubeflow/configmaps/jupyterhub-config: net/http: TLS handshake timeout
最後のks applyでエラー吐くので、issueからWork aroundを見つけて対応。
$ ks show default -c kubeflow-core | kubectl apply -f service "k8s-dashboard" created deployment "ambassador" created service "ambassador" created serviceaccount "ambassador" created role "ambassador" created rolebinding "ambassador" created service "ambassador-admin" created clusterrole "tf-job-dashboard" created clusterrolebinding "tf-job-dashboard" created clusterrole "tf-job-operator" created clusterrolebinding "tf-job-operator" created serviceaccount "jupyter-hub" created role "jupyter-role" created rolebinding "jupyter-role" created configmap "jupyterhub-config" created deployment "tf-job-dashboard" created configmap "tf-job-operator-config" created customresourcedefinition "tfjobs.kubeflow.org" created deployment "tf-job-operator" created statefulset "tf-hub" created service "tf-hub-0" created service "tf-hub-lb" created service "tf-job-dashboard" created serviceaccount "tf-job-dashboard" created serviceaccount "tf-job-operator" created
眠すぎて、一旦とりあえず今日はここまで。モデルのServingとかは持ち越し。
KubeCon + CloudNativeCon EU 2018のセッションの資料を見ると、TF servingじゃなくてSeldon使えたり、TFじゃなくてsklearn使えるようになるっぽい。もう出来るようになっている?ぼちぼち試していく。
処理遅いしGKEでやりゃ良くね?みたいなことはコマンド打つ毎に考えるけど、それ言い出したらせっかくのラズパイ包み楽しくないから多少のことは我慢する。