Kubeflow入門: 概要レベルでの解説

素人がKubeflowについて調べ、概要レベルで理解しました。主に[公式ページ](https://www.kubeflow.org/)からのコピペや要約です。K8S関連は知らない単語が多すぎて、とっかかりとしてKubeflowを理解しました。
今はK8Sがクラウド界隈を席巻しているな、と感じました。

https://www.kubeflow.org/

# 内容説明
## 概要
Kubeflowは**K8S用の機械学習ツールキット**です。2018年に初期リリースされ、2022年7月ではVersion1.5に更新([GitHub](https://github.com/kubeflow/kubeflow/releases)参照)。Cloud上でもオンプレ上でもローカルPCであっても使えます(ローカルはスペックきつい？)。
TensorFlow -> TensorFlow Extended -> Kubeflow の流れで拡張されていたたようです([History](https://www.kubeflow.org/docs/started/introduction/#history)参照)。

<iframe width="560" height="315" src="https://www.youtube.com/embed/cTZArDgbIWw" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" loading="lazy" allowfullscreen></iframe>

## What is Kubeflow?
機械学習ワークフローの以下各ステージで設定・使用

- データ準備
- モデル訓練
- Prediction serving
- Service Management

## Mission
以下の点に留意して**機械学習モデルのスケールと本番環境デプロイを可能な限りシンプルに実行**することがゴール。

- 簡単に繰り返しポータブルなデプロイを様々なインフラに実行
- マイクロサービスのデプロイと管理
- オンデマンドのスケール

## Architecture
[公式の絵](https://www.kubeflow.org/docs/started/architecture/#conceptual-overview)がわかりにくい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134273/dab57e8c-4ebc-721c-0452-a20891f815fa.png)

### 上段: ML tools
Pythonのパッケージですね。**様々なパッケージが動く**ようです。

### 真ん中: Kubeflow appliation and scaffolding
様々なコンポーネントがあります("scaffolding"は「足場」という意味)。真ん中の左側はおそらく一つの機能のまとまりになっているのだと思います(右側は独立して存在しえるモジュールになっているので、そのように推測しました)。
"KFServing"と書かれていますが、今は"KServe"に名称変更しています。

### 最下段: Platforms/clouds
Cloud種類/On prem/Localとなっていて、どの環境でも動くことを示しています。その上にK8sがあります。

## Components
論理的なコンポーネント

### Central Dashboard
Kubeflowの中心的なUI。ここからいろんな画面に遷移。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134273/417fbb14-ec78-7bce-d81d-222feabcfb49.png)

### Kubeflow Notebooks
Jupyter, RStudio および VS Codeが動く。

### Kubeflow Pipelines
パイプラインは以下で構成。

- 実験・ジョブ・実行の管理とトラッキングのためのUI
- マルチステップ機械学習ワークフローをスケジュールするエンジン
- パイプラインとコンポーネントの定義・操作をするSDK
- SDKでのシステム対話のNotebook

下スクリーンショットのようなパイプラインが動く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134273/e85c0188-0af6-77d3-5855-fd36b7a75cf8.png)

### Katib
ハイパーパラメータチューニングをする機能。2022年8月現在ではベータ版。

### Training Operators
機械学習モデルの訓練をOperatorを通じて実行。実際に使うときに時間かけてしらべようかと思います。

- TensorFlow Training (TFJob): Using TFJob to train a model with TensorFlow
- PyTorch Training (PyTorchJob): Using PyTorchJob to train a model with PyTorch
- MXNet Training (MXJob): Using MXJob to train a model with Apache MXNet
- XGBoost Training (XGBoostJob): Using XGBoostJob to train a model with XGBoost
- MPI Training (MPIJob): Instructions for using MPI for training
- Job Scheduling: How to schedule a job with gang-scheduling([「ギャングスケジューリング」](https://en.wikipedia.org/wiki/Gang_scheduling))

### Multi-Tenancy
Multi-user isolation と identity access management (IAM)。ユーザをグループ管理した場合の機能群っぽい(未調査)。

## External Add-ons
気になったアドオンだけ記述。
### Istio
Micro Service をサポートするためのアドオン。詳しくは以下参照。

https://engineering.mercari.com/blog/entry/20220210-how-istio-solved-our-problems/

### KServe
KNativeとIstioから構成する**Serverless** Layerの上に乗っかる**推論用のアドオン**。TensorFlow, PyTorchなどを使えます。モデルファイルは外部(S3等)から読み込みます。旧称KFServing。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134273/9e6707d2-7930-3824-5c70-29565a289798.png)