Kubeflow入門

# Kubeflow入門
この記事は、オフィシャルの [Getting Started with Kubeflow](https://www.kubeflow.org/docs/started/getting-started/)を抜粋しつつ、適宜補足を加えたものです。

## Kubeflowとは
ローカル／クラウドをまたいで、Train / Servingを行うときにk8sを用いて
- TensorFlowジョブのダッシュボード確認
- JupyterHubの提供
- k8s dashboardの提供
- CI/CDツールの提供
などなど、よくある解決したい問題への解決策を一貫して提供するサービス
TensorFlowExtended(TFX)の流れを汲んでいる。


## Kubeflow を使うか検討すべき人は？
- TensorFlowのモデルを異なる環境で、学習/Servingする人
- Jupyter notebookをTensor Flowの学習ジョブに使いたい人
- ジョブの発行を、CPUやGPUが無いマシンで行いたい人
- TensorFlowを他のプロセッサと組み合わせたい人

# k8s がない環境に kubeflowをインストールする場合
### ローカル環境へインストールする場合
特徴を読んで、お好みのバックエンドを選択
- [MiniKF](https://www.kubeflow.org/docs/started/getting-started-minikf/)
- [Minikube](https://www.kubeflow.org/docs/started/getting-started-minikube/)
- [Microk8s](https://www.kubeflow.org/docs/started/getting-started-multipass/)<- GPUの利用が容易なためおすすめ

### クラウド環境へインストールする場合
以下の記事を参照
※GKE上でGPUを多数使う場合、GCP上でGPUの割当数を増やすなどの対応が必要なので、GCPのドキュメントも合わせて確認する
[Kubernetes Engine for Kubeflow](https://www.kubeflow.org/docs/started/getting-started-gke/)
[Schedule GPUs](https://kubernetes.io/docs/tasks/manage-gpus/scheduling-gpus/)
[GCPドキュメント](https://cloud.google.com/kubernetes-engine/docs/how-to/gpus)

# 既存の k8s 環境へのインスト−ルする場合
Requirements
- ksonnet version 0.13.1 + 
- Kubernetes version 1.8 +
- kubectl


#### 以下のコマンドで `kfctl.sh` をダウンロード
```.sh
$ 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
```

#### k8s上に、Kubeflowのインストールを実施
```.sh
$ ${KUBEFLOW_SRC}/scripts/kfctl.sh init ${KFAPP} --platform none
$ cd ${KFAPP}
$ ${KUBEFLOW_SRC}/scripts/kfctl.sh generate k8s
$ ${KUBEFLOW_SRC}/scripts/kfctl.sh apply k8s
```

# microk8s 上にインストールする例
※microk8s は Linux上でのみ動作する
仮想環境上でもLinuxでも動作するため、Mac環境の場合も動作させることは可能

### Multipass を利用して仮想環境の構築
Multipassは、使い捨てのUbuntu環境を作るためのCLIツール
#### 1.Multipassのインストール
```.sh
$ sudo snap install multipass --beta --classic
```

#### 2.Ubuntu仮想環境の作成
```.sh
$ multipass launch bionic -n kubeflow -m 8G -d 40G -c 4
```
-n : nameの指定
-m : メモリ容量
-d : ディスク容量
-c : cpu数
Virtualization Technology（VT）の設定がBIOSで無効になっていると起動できないため、
エラーが出るときは、BIOSへ行って（起動時に左シフトやF2,F11等）設定を確認する

詳細設定 > CPU設定 > Intel (VMX) Virtualization Technology等が該当するSetting
![iOS の画像 (1).jpg](https://qiita-image-store.s3.amazonaws.com/0/69701/7e229651-3839-0a8c-6925-0ebd7f9c586d.jpeg)


#### 3.仮想環境に入る
```.sh
$ multipass shell kubeflow
```


#### 1. Microk8sのセットアップ
```.sh
$ git clone https://github.com/canonical-labs/kubernetes-tools
$ sudo kubernetes-tools/setup-microk8s.sh
$ microk8s.enable gpu # GPUを使う場合
$ kubernetes-tools/expose-dashboard.sh # k8s dashboard を使う場合
```
▼k8s dashboard
![image.png](https://qiita-image-store.s3.amazonaws.com/0/69701/2dd8f1d3-4721-294e-38e1-14f3b061d03b.png)
http://"[EXTERNAL_IP]":8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
へアクセスすることで、確認可能


#### 2. Kubeflowのインストールとセットアップ
```.sh
$ git clone https://github.com/canonical-labs/kubeflow-tools
$ kubeflow-tools/install-kubeflow.sh
```
出力されるPort番号を確認し、以下のURLでkubeflow のdashboardや、
JupyterHubへアクセスすることが可能

#### 3. Kubeflowへのアクセス
```.sh
Point browser to either:
- http://<kubeflow VM IP>:<Ambassador PORT>
- http://localhost:<Ambassador PORT>
```

kubeflow dashborad
![image.png](https://qiita-image-store.s3.amazonaws.com/0/69701/b25ced64-6cd3-2f25-ff14-7d50f68a6368.png)


---

# ユースケース
インストールが完了したので、恩恵にあずかりましょう。

## ユースケース1 JupyterHubの利用
kubeflow dashboardからJupyterHubへアクセスができます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/69701/8d795e7f-abbe-2f30-c895-fafd1a653a85.png)
初期usernameと、passwordは任意のものが設定できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/69701/ece2c182-0ef7-dde9-6970-986e48f0d0de.png)
コンテナイメージを選択した上で、JupyterNotebookを起動できます。
もちろん、自分で作成したDockerコンテナも利用可能です。

Toggle Advancedで、GPU利用設定などが可能です。


## ユースケース2
例：[Argo CDによるk8s上でのGitOps](https://www.kubeflow.org/docs/use-cases/gitops-for-kubeflow/)
執筆中...


## ユースケース3
他のよく使うモジュ−ル類の使い方例
https://www.kubeflow.org/docs/components/
執筆中...

---