Kubeflow for ML - Chapter 2
Chapter 2: Hello Kubeflow
๐ ๋ณธ ํฌ์คํธ๋ Kubeflow for Machine Learning ์ฑ ์ ๋ฐ์ท/์์ฝํ๋ฉด์ ํ์ํ ๋ด์ฉ์ ์ถ๊ฐํ์ฌ ์์ฑํ์์ต๋๋ค.
- Chapter 1: Kubeflow: What It is and Who It Is For
- Chapter 2: Hello Kubeflow
- Chapter 3: Kubeflow Design: Beyond the Basics
- Chapter 4: Kubeflow Pipelines
- Chapter 5: Data and Feature Preparation
- Chapter 6: Artifact and Metadata Store
- Chapter 7: Training a Machine Learning Model
- Chapter 8: Model Inference
- Chapter 9: Case Study Using Multiple Tools
- Chapter 10: Hyperparameter Tuning And Automated Machine Learning
Introduction
์๋ ์ฑ
์ ๋ณธ ์ฅ์ kubectl
๊ณผ kfctl
์ ์ด์ฉํ์ฌ Kubeflow๋ฅผ ์ค์นํ๋ ๋ด์ฉ์ ๋ค๋ฃจ๊ณ ์์ต๋๋ค. ์ฒ์ ๊ณต๋ถํ๋ ์
์ฅ์์ ์ฑ
์ ๋ด์ฉ์ ๋ฐ๋ผ๊ฐ๊ณ ์์๋๋ฐ kubeflow/kfctl
์ ์ฅ์๊ฐ ์ ์ง๋ณด์๊ฐ ๋์ง ์๋ ๊ฒ์ ๋ณด๊ณ ์กฐ๊ธ ์์ํ์ต๋๋ค. ์ ์ฅ์์ ๋ง์ง๋ง ์ปค๋ฐ์ด 2021๋
3์ 16์ผ์ด๊ณ ๊ด๋ฆฌ๊ฐ ์ด๋ป๊ฒ ๋๊ณ ์๋์ง์ ๋ํ ์ ๋ณด๋ ์ฐพ์๋ณผ ์ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค ๋ค์๊ณผ ๊ฐ์ ์ด์๊ฐ ๋ฑ๋ก๋์ด ์๋ ๊ฒ์ ํ์ธํ๋๋ฐ์.
๋ด์ฉ์ธ ์ฆ Kubeflow 1.3 ์ดํ ๋ฒ์ ๋ถํฐ๋ ๋ชจ๋ kustomize
๋ฅผ ์ด์ฉํด์๋ง ๋ฐฐํฌ ๊ฐ๋ฅํ๋ฉฐ, ํ์ฌ ์ปค๋ฎค๋ํฐ ๋ด์ kfctl
์ ์ง์ํ๊ฑฐ๋ ๊ฐ๋ฐํ๋ ์ธ์์ด ์ ๋ฌดํ๋ค๋ ๊ฒ์
๋๋ค. ๋ฌธ์ ๋ kfctl
์ ์์ ์ฌ์ฉํ์ง ์๋ ๊ฒ๋ ์๋๊ณ ์ผ๋ถ ์ปดํฌ๋ํธ์์๋ ์์ง kfctl
์ ์ฌ์ฉํ๊ณ ์๋ ๊ฒ์ผ๋ก ๋ณด์ฌ ๊ฒฐ๊ตญ ์ค์น๋ ํด์ผํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋์ ๋ณธ ํฌ์คํธ์์๋ ์ฑ ์ ์ค์น ๋ด์ฉ์ ๋ฐ๋ผ๊ฐ์ง ์๊ณ Kubeflow ์ต์ ๋ฒ์ ์ Manifest๋ฅผ ์ด์ฉํด ์ค์นํ๋ ๋ฐฉ๋ฒ์ ๋ณ๋๋ก ๋ค๋ฃจ๊ณ ์ ํฉ๋๋ค.
How to install Kubeflow?
ํ๋ ์์๋์ ์ผ ํ ๋ด์ฉ์ ์๋ ์ค์น ๋ฐฉ๋ฒ์ M1 Mac์ด ์๋ Intel Mac์์๋ง ๊ฐ๋ฅํฉ๋๋ค. ๋ค๋ฅธ OS๋ ํ๊ฒฝ์์๋ ์ค์น ๋ฐฉ๋ฒ์ด ๋ค๋ฅผํ ๋ ๊ด๋ จ ๋ฌธ์๋ฅผ ํ์ธํ์ฌ ์ค์น๋ฅผ ์งํํ์๊ธฐ ๋ฐ๋๋๋ค. Kubeflow๋ ์ต์ ๋ฒ์ ์ผ๋ก ์ค์นํ ์์ ์ ๋๋ค.
Install Minikube
Homebrew๋ฅผ ์ด์ฉํด์ Minikube๋ฅผ ์ค์นํด์ค๋๋ค.
1
brew install minikube
์ค์น๊ฐ ์๋ฃ๋ ํ ๋ฒ์ ํ์ธ์ ํด์ค๋๋ค.
1
2
3
> minikube version
minikube version: v1.25.2
commit: 362d5fdc0a3dbee389b3d3f1034e8023e72bd3a7
Install Kubernetes
์ด์ Minikube์์ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ค์นํ ํ ๋ฐ ๋ฒ์ ์ ํ์ ์ฃผ์ํด์ผ ํฉ๋๋ค. Kubeflow Manifest ์ ์ฅ์์์ ์ฟ ๋ฒ๋คํฐ์ค 1.22 ์ด์ ๋ฒ์ ๊ณผ๋ ํธํ์ฑ ๋ฌธ์ ๊ฐ ์์ ์ ์์ด ์ค์น์ ์ฃผ์๋ฅผ ์ํ๊ณ ์์ต๋๋ค. ์ฐธ๊ณ ๋ก M1 ๋งฅ์์๋ Minikube ๋๋ผ์ด๋ฒ๋ฅผ ๋ฐ๋์ Docker๋ก ์ค์ ํด์ผ ํฉ๋๋ค. ๋ณธ ํฌ์คํธ๋ Intel Mac์์ ๊ฐ๋ฅํ ๋ด์ฉ์ ๋๋ค. ๋ฐ๋ผ์ M1์ด๋ฉด์ Docker๊ฐ ์ค์น๋์ง ์์ ๊ฒฝ์ฐ ๊ด๋ จ ๋ฌธ์๋ฅผ ํ์ธํ์ฌ Docker๋ฅผ ์ค์น ๋ฐ ์ค์ ํ Kuberntetes๋ฅผ ์ค์นํ์๊ธฐ ๋ฐ๋๋๋ค.
๐ก M1์ผ๋ก Minikube๋ฅผ ์ด์ฉํด Kubeflow ์ค์น๊ฐ ์๋๋ ์ด์ ๋ Kubeflow์ ์ปดํฌ๋ํธ ์ค Istio๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ธ ๊ฒฐ๊ณผ ํ์ฌ Istio๋ ๊ณต์์ ์ผ๋ก M1 Mac (arm64)๋ฅผ ์ง์ํ์ง ์๊ณ ์์ต๋๋ค. ๋๋ถ๋ถ์ ์ปดํฌ๋ํธ๋ ๋ฌธ์ ๊ฐ ์์ผ๋ ๊ฐ์ฅ ์ค์ํ ์ปดํฌ๋ํธ ์ค ํ๋์ธ Istio๋ฅผ ์ง์ํ์ง ์์ผ๋ฏ๋ก ์ค์น์ ์ฌ์ฉ์ ์ด๋ ค์์ด ์์ต๋๋ค. ๋ง์ฝ ๋ฐ๋์ M1 Mac์ ํตํด Kubeflow๋ฅผ ์ค์นํด์ผ ํ๋ค๋ฉด ๊ฐ์ ํ๊ฒฝ์ ์ด์ฉํด Linux ํ๊ฒฝ์ ๊ตฌ์ถํ์ฌ ์ค์นํ์๊ธฐ ๋ฐ๋๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
> minikube start --driver=hyperkit --kubernetes-version=1.21.12 --memory=8g โcpus=4 --profile kf
๐ [kf] Darwin 12.3.1 (arm64) ์ minikube v1.25.2
โจ ์ ์ ํ๊ฒฝ ์ค์ ์ ๋ณด์ ๊ธฐ๋ฐํ์ฌ docker ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ๋ ์ค
๐ kf ํด๋ฌ์คํฐ์ kf ์ปจํธ๋กค ํ๋ ์ธ ๋
ธ๋๋ฅผ ์์ํ๋ ์ค
๐ ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ฐ๋ ์ค ...
> gcr.io/k8s-minikube/kicbase: 343.11 MiB / 343.12 MiB 100.00% 11.41 MiB p
๐ฅ Creating docker container (CPUs=4, Memory=8192MB) ...
๐ณ ์ฟ ๋ฒ๋คํฐ์ค v1.21.12 ์ Docker 20.10.12 ๋ฐํ์์ผ๋ก ์ค์นํ๋ ์ค
โช kubelet.housekeeping-interval=5m
> kubelet.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
> kubeadm.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
> kubectl.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
> kubectl: 41.31 MiB / 41.31 MiB [-------------] 100.00% 19.68 MiB p/s 2.3s
> kubeadm: 39.56 MiB / 39.56 MiB [-------------] 100.00% 12.83 MiB p/s 3.3s
> kubelet: 104.79 MiB / 104.79 MiB [-----------] 100.00% 31.86 MiB p/s 3.5s
โช ์ธ์ฆ์ ๋ฐ ํค๋ฅผ ์์ฑํ๋ ์ค ...
โช ์ปจํธ๋กค ํ๋ ์ธ์ด ๋ถํ
...
โช RBAC ๊ท์น์ ๊ตฌ์ฑํ๋ ์ค ...
๐ Kubernetes ๊ตฌ์ฑ ์์๋ฅผ ํ์ธ...
โช Using image gcr.io/k8s-minikube/storage-provisioner:v5
๐ ์ ๋์จ ํ์ฑํ : storage-provisioner, default-storageclass
๐ ๋๋ฌ์ต๋๋ค! kubectl์ด "kf" ํด๋ฌ์คํฐ์ "default" ๋ค์์คํ์ด์ค๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๋๋ก ๊ตฌ์ฑ๋์์ต๋๋ค.
์ฌ๊ธฐ์ ๋ง์ฝ ๋์ปค ์ปจํ ์ด๋๊ฐ ์ํ๋ ์ค์ (4๊ฐ์ CPU, 8GB์ ๋ฉ๋ชจ๋ฆฌ)์ผ๋ก ์์ฑ๋์ง ์์๋ค๋ฉด ํด๋ฌ์คํฐ๋ฅผ ์ญ์ ํ ๋ค์ Minikube์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ ๋ค์ ์ฌ์์ฑํ๋ฉด ๋ฉ๋๋ค.
1
2
3
4
5
6
# Minikube ์ญ์
minikube delete -p kf
# Minikube ๊ธฐ๋ณธ๊ฐ ์ค์
minikube config set cpus 4
minikube config set memory 8192
์ฌ๋ฐ๋ฅด๊ฒ ํ๋กํ์ผ์ด ์์ฑ๋์๋์ง ํ์ธํ๊ธฐ ์ํด ๋ค์์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
1
2
3
4
5
6
7
> minikube profile list
|---------|-----------|---------|--------------|------|----------|---------|-------|
| Profile | VM Driver | Runtime | IP | Port | Version | Status | Nodes |
|---------|-----------|---------|--------------|------|----------|---------|-------|
| kf | docker | docker | XXX.XXX.XX.X | XXXX | v1.21.12 | Running | 1 |
|---------|-----------|---------|--------------|------|----------|---------|-------|
Install Kustomize
์ฟ ๋ฒ๋คํฐ์ค ํจํค์ง ๋งค๋์ง ํด์ธ Kustomize๋ ์ค์นํด์ค๋๋ค. ์ด ์ญ์ ์ฟ ๋ฒ๋คํฐ์ค์ฒ๋ผ ๋ฒ์ ์ ์ฝ ์ฌํญ์ด ์์๋๋ฐ์. ์ต๊ทผ ๋ฒ์ ์ธ 4.X ๋ฒ์ ๊ณผ๋ ํธํ์ด ๋์ง ์์ ๊ทธ๋ณด๋ค ๋ฎ์ ๋ฒ์ ์ ์ค์นํด์ผ ํฉ๋๋ค. 3.2.0 ๋ฒ์ ์ค์น๋ฅผ ๊ถ์ฅํ๋๋ฐ ์ง๊ธ Kustomize 3.10.0 ๋ฒ์ ๊น์ง ๋์ ์์ด ์ ๋ ๊ทธ๋ฅ 3.10.0 ๋ฒ์ ์ ์ค์นํ์ต๋๋ค. ๋ค์ด๋ก๋ ํ์ด์ง์์ OS์ ๋ง๋ ํ์ผ์ ๋ค์ด ๋ฐ์ต๋๋ค.
1
wget https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv3.10.0/kustomize_v3.10.0_darwin_amd64.tar.gz
๊ทธ ๋ค์ ์์ถ์ ํ๊ณ ํ์ผ์ PATH
๊ฒฝ๋ก์ ๋ฃ์ด์ค๋๋ค.
1
2
tar -zxvf kustomize_v3.10.0_darwin_amd64.tar.gz
sudo mv kustomize /usr/local/bin/kustomize
๋ง์ง๋ง์ผ๋ก ์ค์น ํ์ธ์ ํฉ๋๋ค.
1
2
3
> kustomize version
{Version:kustomize/v3.10.0 GitCommit:602ad8aa98e2e17f6c9119e027a09757e63c8bec BuildDate:2021-02-10T00:00:50Z GoOs:darwin GoArch:amd64}
Install Kubeflow
์ฌ๊ธฐ๊น์ง ๋์๋ค๋ฉด Kubeflow๋ฅผ ์ค์นํ ์ ์์ต๋๋ค. ์ฐ์ Kubeflow Manifests ์ ์ฅ์์์ ์ต์ ๋ฒ์ ์์ค๋ฅผ ๋ณต์ฌํด์ต๋๋ค.
1
git clone https://github.com/kubeflow/manifests.git
๊ทธ ๋ค์ Kubeflow๋ฅผ ๋ค์์ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด์ ์ค์นํฉ๋๋ค.
1
2
cd manifests
while ! kustomize build example | minikube -p=kf kubectl -- apply -f -; do echo "Retrying to apply resources"; sleep 10; done
์ ์ฅ์ ๋ด์ ์ค์น ๋ช
๋ น์ด์ ๋ค๋ฅธ ์ ์ minikube -p=kf
๋ก kubectl
์์ ๋ค๋ฅธ ๊ฒ์ด ๋ถ์ฌ์ ธ ์๋ ๊ฒ์ธ๋ฐ์. ์ฐ๋ฆฌ๋ Minikube๋ฅผ ์ด์ฉํด ์ค์นํ๊ณ ์์ผ๋ฏ๋ก Minikube ๋ด์ kubectl
์ ์ด์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ค์น๋ฅผ ์๋ฃํ๊ณ Kubeflow์ Pod๋ค์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ธฐ๋๋๊ณ ์๋์ง ํ์ธํฉ๋๋ค.
1
minikube -p=kf kubectl -- get pods -A
๋ชจ๋ Pod์ด Running์ธ ๊ฒ์ ํ์ธํ์ฌ ์ค์น๋ฅผ ์๋ฃํ๋ฉด ๋ฉ๋๋ค.