ハンズオンのための環境構築と確認¶
目的・ゴール: Kubeflowのインストールと環境の確認¶
最初に今回の環境の確認とハンズオンを行うために使う Kubeflow
のインストールを行います。
このセクションのゴールはハンズオンの環境が問題ないことの確認とKubeflowのインストールを完了させることです。
今回の環境の全体概要¶
環境¶
- Kubernetes 1.13 オンプレミス(構築済み)
- Kubernetes 1.13 GPU クラスタ(構築済み): 主にトレーング時にクラスタを切り替えて利用
- Kubeflow オンプレミス: ハンズオンでインストール
- Kubernetes 1.12 Google Cloud Platform : Kubeflowをインストール済み、アプリケーションのサーブ時に使用
環境の確認¶
自身に与えられた環境にログインできるかを確認します。
以下のログイン先は今回使用するKubernetesクラスタのマスタノードです。
- xxx: 自身の番号
$ ssh localadmin@192.168.xxx.10
$ kubectl get node
上記の kubectl get node
で複数のノードが出力されることを確認してください。
Tridentのインストール¶
ここでは基礎編を参照しTridentの導入をしましょう。
Level 2: ステートフルコンテナの実現 を参照してダイナミックストレージプロビジョニングを設定しましょう。
以下の項目を設定し、 ontap-gold
を作成します。
- NetApp Tridentのインストール
- StorageClassの定義
ハンズオン簡易化のため作成したストレージクラスをデフォルトとします。
$ kubectl patch storageclass ontap-gold -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
実行後以下の表記となっていたら完了です。
$ kubectl get storageclass
NAME PROVISIONER AGE
ontap-gold (default) netapp.io/trident 3d15h
Kubeflow のインストール¶
Kubeflowのインストールを続けます。
Kubeflowを導入するために使う ksonnet
のバージョンを確認します。
$ ks version
ks version
の結果が ksonnet version: 0.13.1
であることを確認してください。
Kubeflowのインストールを開始します。
Kubeflowのインストールユーティリティである kfctl.sh
をダウンロードします。
kubeflow_src
を作成し作業ディレクトリとします。
$ cd
$ mkdir kubeflow_src
$ cd kubeflow_src
$ export KUBEFLOW_TAG=v0.4.1
$ curl https://raw.githubusercontent.com/kubeflow/kubeflow/${KUBEFLOW_TAG}/scripts/download.sh | bash
kubeflowがダウンロードできたことを確認します。
$ ls -F
deployment/ kubeflow/ scripts/
kfctl.sh init デプロイメント名
でセットアップ、デプロイを実施します。
デプロイメント名は以下のサンプルでは kubeflow-deploy
としますが任意の名称です。
kubeflow-deploy フォルダが作成され、その配下にデプロイメント用のファイルが作成されます。
$ scripts/kfctl.sh init kubeflow-deploy --platform none
$ ls -F
deployment/ kubeflow/ kubeflow-deploy/ scripts/
kubeflow-deployディレクトリが作成されました。
インストールを続けます。以下の作業を実施します。
$ cd kubeflow-deploy/
$ ../scripts/kfctl.sh generate k8s
生成された設定をそのままapplyするとambassador等UIを提供するサービスはClusterIPで公開されます。 外部からはアクセス出来ませんのでサービスのタイプを変更します。
注釈
下記ではNodePortに変更していますが、ラボの環境ではLoadBalancerを使う事も可能です。 また、公開は必須ではなくkubectlを動作させている端末上のポートにフォワードして uiを使う事も可能です。 また、JupyterについてはAmbassador上からアクセスする事が可能ですので必須ではありません。
$ cd ks_app/
$ ks param set ambassador ambassadorServiceType NodePort
$ ks param set jupyter serviceType NodePort
$ cd ..
設定が完了したら適用してKubernetesに投入します。
$ ../scripts/kfctl.sh apply k8s
ここまででデプロイが完了です。
どのようなコンポーネントがデプロイされたかを確認しましょう。
DESIRED
列と AVAILABLE
列の数字が同一であれば正常に可動している状況です。
$ kubectl get deploy -n kubeflow
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
ambassador 3 3 3 3 49m
argo-ui 1 1 1 1 48m
centraldashboard 1 1 1 1 49m
katib-ui 1 1 1 1 26m
minio 1 1 1 1 27m
ml-pipeline 1 1 1 1 27m
ml-pipeline-persistenceagent 1 1 1 1 27m
ml-pipeline-scheduledworkflow 1 1 1 1 27m
ml-pipeline-ui 1 1 1 1 27m
mysql 1 1 1 1 27m
pytorch-operator 1 1 1 1 48m
spartakus-volunteer 1 1 1 1 48m
studyjob-controller 1 1 1 1 26m
tf-job-dashboard 1 1 1 1 49m
tf-job-operator-v1beta1 1 1 1 1 49m
vizier-core 1 1 1 1 26m
vizier-core-rest 1 1 1 1 26m
vizier-db 1 1 1 1 26m
vizier-suggestion-bayesianoptimization 1 1 1 1 26m
vizier-suggestion-grid 1 1 1 1 26m
vizier-suggestion-hyperband 1 1 1 1 26m
vizier-suggestion-random 1 1 1 1 26m
workflow-controller 1 1 1 1 48m
minio/mysql/vizier-dbはDB等の永続化ボリューム(Persistent Volume)を必要とします。 ボリュームの状態を確認します。
STATUS
列が Bound
と表示されていることを確認してください。
また、バージョンによっては出力結果が異なる可能性があります。
$ kubectl get pvc -n kubeflow
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
katib-mysql Bound vol3 10Gi RWO 73s
minio-pv-claim Bound vol1 10Gi RWO 89s
mysql-pv-claim Bound vol2 10Gi RWO 89s
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
vol1 10Gi RWO Retain Bound kubeflow/minio-pv-claim 3m17s
vol2 10Gi RWO Retain Bound kubeflow/mysql-pv-claim 3m17s
vol3 10Gi RWO Retain Bound kubeflow/katib-mysql 3m17s
注釈
Tridentの設定が終わっていない場合、永続化ボリュームがプロビジョニングされず コンテナが起動できません。Tridentの導入と、デフォルトストレージクラスの設定まで を完了させてください。
まとめ¶
ここまでの手順で今回のハンズオンで使うkubeflow環境の構築を完了しました。
kubeflowはマシンラーニングのためのプラットフォームです。 マシンラーニングを実行するためのパイプラインをkubernetes上で実行するためのコンポーネント群を提供します。 シンプル、ポータブル、スケーラブルという特徴があり、Kubernetes上であればどこでも稼働させることができます。
KubeflowにはJupyterNotebook、Katib(ハイパーパラメタチューニング)、 バッチ処理のためのフレームワーク、エンドツーエンドのパイプライン、様々なフレームワーク(PyTorch、MXNet、Chainer、TensorFlow)が含まれており、 マシンラーニングを実行するための基盤を提供しています。
本ハンズオンではコマンドラインからフェーズごとにコンテナを活用してジョブ投入を行い一連ワークフローを体験いただきます。
なお、本ハンズオンではシェル内で変数を定義していきます。 もし何らかの原因でシェルのセッションが切れるようなことがあった場合にはいかに一覧がありますので ここを参照してください。
補足:利用変数一覧¶
ENV=default
PVC="pets-pvc"
MOUNT_PATH="/pets_data"
DATASET_URL="http://www.robots.ox.ac.uk/~vgg/data/pets/data/images.tar.gz"
ANNOTATIONS_URL="http://www.robots.ox.ac.uk/~vgg/data/pets/data/annotations.tar.gz"
MODEL_URL="http://download.tensorflow.org/models/object_detection/faster_rcnn_resnet101_coco_2018_01_28.tar.gz"
PIPELINE_CONFIG_URL="https://raw.githubusercontent.com/kubeflow/examples/master/object_detection/conf/faster_rcnn_resnet101_pets.config"
ANNOTATIONS_PATH="${MOUNT_PATH}/annotations.tar.gz"
DATASET_PATH="${MOUNT_PATH}/images.tar.gz"
PRE_TRAINED_MODEL_PATH="${MOUNT_PATH}/faster_rcnn_resnet101_coco_2018_01_28.tar.gz"
OBJ_DETECTION_IMAGE="userXX/pets_object_detection:1.0"
PIPELINE_CONFIG_PATH="${MOUNT_PATH}/faster_rcnn_resnet101_pets.config"
TRAINING_DIR="${MOUNT_PATH}/train"
CHECKPOINT="${TRAINING_DIR}/model.ckpt-<Number>" #replace with your checkpoint number
INPUT_TYPE="image_tensor"
EXPORT_OUTPUT_DIR="${MOUNT_PATH}/exported_graphs"
DATA_DIR_PATH="${MOUNT_PATH}"
OUTPUT_DIR_PATH="${MOUNT_PATH}"
MODEL_COMPONENT=pets-model
MODEL_PATH=/mnt/exported_graphs/saved_model
MODEL_STORAGE_TYPE=nfs
NFS_PVC_NAME=pets-pvc