masanaraさんのこの記事とかgowatanaさんのこの記事で紹介されているvSphere Machine Learning Extensionを使ってKubeflowを試してみたくなったので、Tanzu Mission Control(以下TMC)で導入してみた時のメモ。
なお、ベースとするインストール手順はこちらを利用する。
vSphere Machine Learning Extensionとは
vSphere Machine Learning ExtensionはvSphere上で簡単にKubeflowを展開するOSSのようだが、現時点ではあまり情報がなくてよく分からない。
商用製品とかではないので、実験的にKubeflowをTKG上で使いたい場合に使うのが良さそう。
導入の前提
今回は以下があるものとする。
- TKGm2.4のWorkload Cluster (k8s 1.25)
- Tanzu Mission Control (上記のWorkload Clusterは登録済み)
-
type: LoadBalancer
が利用可能(ここではMetalLBを利用)
Tanzu packages内のKubeflowに含まれるHPAのAPIバージョンが古く、おそらくK8sが1.26以上だとHPAのバージョンがv2betaが削除されてv2のみとなっているはずで、以下のエラーでインストールに失敗する。
kapp: Error: Expected to find kind 'autoscaling/v2beta2/HorizontalPodAutoscaler', but did not:
なのでk8sのバージョンは1.25以下を使うようにした方がよい。
また、Workerノードの要求リソースはそこそこ大きいので注意。
インストール
TMC上でクラスタを選択し、Add-ons
->Tanzu repositories
->ADD PACKAGE REPOSITORY
を選択する。
リポジトリ追加画面になるので、以下を入力してADD REPOSITORY
をクリックする。
-
Name
:kubeflow-carvel-repo -
Repository URL
:projects.registry.vmware.com/kubeflow/kubeflow-carvel-repo:1.6.1
クリック後、Catalog
->Tanzu packages
->Available Tanzu pakcages
でkubeflowが表示されるので、これをクリックする。
右上のINSTALL PACKAGE
->CARVEL SETTINGS
からCarvel Resources Namespace
でCustom
を選び、PackageリソースがインストールされるNamespaceを設定する。
ここでは慣例?に従ってmy-packagesとする。
なお、Namespaceはなくても自動で生成される。
設定後、インストール画面に戻り、以下のように設定する。
-
Package name
:kubeflow -
Overlay YAML
:以下
※'23/12/15追記:
Package versionに1.6.0が表示されるようになっており、デフォルトでこちらが選択される。
ただ、1.6.0だとインストールに失敗するため、Package versionのプルダウンをクリックして必ず1.6.1を選ぶようにすること。
service_type: "LoadBalancer"
IP_address: ""
CD_REGISTRATION_FLOW: True
入力後、右上のINSTALL PACKAGE
をクリックすればインストールが開始される。
環境にも依るかも知れないが、10分以上は掛かるので気長に待つ。
ステータスが緑色に変わればインストール完了となる。
Kubeflowの利用
ログインするところまで確認する。
KubeflowをイントールするとIstioもインストールされ、IngressGatewayがIPを公開している。
$ kubectl get svc -n istio-system istio-ingressgateway
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 100.66.112.220 10.180.84.210 15021:32502/TCP,80:32658/TCP,443:31929/TCP,31400:30899/TCP,15443:32184/TCP 16m
そのIPにアクセスするとDexのログイン画面になる。
デフォルトではuser@example.com
/ 12341234
でログインできるようになっている。
ログインするとそのアカウントで使うNamespaceを聞かれるのでNamespaceを指定する。
ここではデフォルト値のuser
のまま進める。
なお、裏では指定したuser
というNamespaceが作成され、Kubeflowのコンポーネントが展開されている事がわかる。
$ kubectl get pod -n user
NAME READY STATUS RESTARTS AGE
ml-pipeline-ui-artifact-79586568b6-5h2dz 2/2 Running 0 32m
ml-pipeline-visualizationserver-8479bf4bd-d85dn 2/2 Running 0 32m
ここではついでにGet Staredもやっておく。
最初にTensorflow界隈ではよく使われる開発環境であるJupyter Notebookを起動する。
左上の三本線をクリックし、Notebooks
->New Notebook
を押すと作成画面となるため、名前や割り当てリソースなどを設定してLAUNCH
から起動する。
なお、選択できるコンテナイメージはTensorFlow用のイメージであるjupyter-tensorflow-full
を選ばないと後で躓くので、その点だけ注意すること。
起動後は以下のような画面となる。
なお、裏ではJupyter NotebookのPodが起動する。
$ kubectl get pod -n user
NAME READY STATUS RESTARTS AGE
getting-started-0 2/2 Running 0 27m
ml-pipeline-ui-artifact-79586568b6-5h2dz 2/2 Running 0 109m
ml-pipeline-visualizationserver-8479bf4bd-d85dn 2/2 Running 0 109m
このPodにはPVCが割り当てられており、Notebookを削除してもPV、PVCは残る仕掛けとなっている。
削除する際は注意。
作成後の画面のCONNECT
をクリックするとエディタの画面に遷移する。
次にTensorFlow 2 quickstart for expertsで配布されているnotebook(Download notebookから入手)をuploadする。
notebook(advaneced.ipynb)をダウンロード後、左サイドバーのアップロードのアイコン(↑マーク)をクリックし、advaneced.ipynbを指定する。
uploadが完了すると左サイドバーに表示されるため、これをクリックして開く。
上部の再生ボタン(▶)をクリックするとチュートリアルが進むため、チュートリアルの内容を確認しつつ下まで実行する。
なお、再生ボタンを押した際、番号が[*]
のように表示されている時は実行中なので番号が返ってくるまで待つこと。
また、最後のテストは時間が掛かるので少し待つ。
試行ごとの結果が以下のような感じで表示される。
Epoch 1, Loss: 0.1404857486486435, Accuracy: 95.72833251953125, Test Loss: 0.06229446455836296, Test Accuracy: 97.91999816894531
Epoch 2, Loss: 0.041998494416475296, Accuracy: 98.6383285522461, Test Loss: 0.05722526088356972, Test Accuracy: 98.06999969482422
Accuracyの値より、試行ごとに精度があがることが確認できた。
(メモリが少なかったのか、途中で強制再起動が掛かり5回実施することは出来なかった)。