먼저 Kubeflow는 이름에서도 유추할 수 있듯이 쿠버네티스 환경에서 동작하는 ML Platform이다. 쿠버네티스 환경이 필요하다. 로컬에 구축한 뒤 Kubeflow와 MLFlow를 설치해 보자.
1. 로컬 환경에 Kubernetes 설치
이를 위한 단계가 정말 간단한데, Docker Desktop을 설치하고 Kubernetes를 활성화해주면 된다.
실행한 뒤 아래와 같은 단계만 수행하면 된다.
- 설정 -> Kubernetes -> Enable Kubernetes -> Apply & restart
왼쪽 아래에 쿠버네티스 이모지와 함께 초록색으로 표시되면 성공적으로 설치된 것이다.
2. Kubeflow 설치
먼저, Kubeflow를 설치하기 위해선 다음과 같은 리소스가 필요하다.
- 최소 8GB의 RAM
- 4개 이상의 vCPU
쿠버네티스에 설치할 것이기 때문에 Docker-Destkop에서 Resources 설정을 해줘야 한다.
여유가 되는 만큼 설정하자. 최소는 조건에 충족되지 않는다면 GCP의 GKE를 무료로 구축하면 된다.
Kubeflow는 다양한 배포판이 존재한다. 그중 Kubernetes에 직접 Manifest를 배포해서 설치하고자 한다. 아래 내용은 https://github.com/kubeflow/manifests 의 내용이다.
먼저 패키지 관리자인 kubectl와 kustomize을 설치해야 한다.
brew install kubectl
brew install kustomize
이제 Kubeflow를 설치하자.
git clone https://github.com/kubeflow/manifests
cd manifests
while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done
kubeflow를 구성하는 컴포넌트가 많고 각 컴포넌트 간의 의존성도 있어서 시간이 좀 걸리는데, 5~10분 정도 기다리면 정상 설치가 될 것이다. Kubeflow UI에 접속해 보자.
kubectl port-forward svc/istio-ingressgateway -n istio-system 8888:80
이제 http://localhost:8080/ 에 들어가면 된다.
- email: user@example.com
- password: 12341234
3. MLflow 설치
이 포스팅의 마지막으로 MLflow를 설치해 보자.
mlflow는 기본적으로 두 가지 성격의 저장소가 필요하다
- DB (metadata 저장)
- Storage (Artifact 저장)
DB를 위해선 일반적으로 PostgreSQL을 사용하고, 아티팩트를 저장하기 위해 S3를 사용한다. Kubeflow는 기본적으로 저장소로 MinIO를 사용하기에 여기에 mlflow용 버킷을 만들고 사용할 수 있다.
MLFlow를 위한 Minio bucket 생성
Kubeflow를 위해 이미 설치된 minio 서비스에 접속해서 버킷을 생성하자.
kubectl port-forward -n kubeflow svc/minio-service 9000:9000
http://localhost:9000/ 에 접속한 뒤 아래 계정으로 로그인하면 된다.
- Access Key: minio
- Secret Key: minio123
이후 mlflow라는 이름으로 버킷을 생성하자.
mlflow를 위한 artifact 저장소가 준비되었다. 이제 postgresql이 필요한데, 이는 mlflow를 설치할 Helm 차트에서 설치를 제공해서 따로 수행하지 않으려 한다.
MLflow 설치
kubectl create ns mlflow
kubectl create -n mlflow secret generic mlflow-secret \
--from-literal=AWS_ACCESS_KEY_ID=minio \
--from-literal=AWS_SECRET_ACCESS_KEY='minio123'
helm repo add bitnami https://charts.bitnami.com/bitnami
helm upgrade --install mlflow bitnami/mlflow -n mlflow --version 0.10.3 \
--set minio.enabled=false \
--set externalS3.host=minio-service.kubeflow \
--set externalS3.port=9000 \
--set externalS3.existingSecret=mlflow-secret \
--set externalS3.existingSecretAccessKeyIDKey="AWS_ACCESS_KEY_ID" \
--set externalS3.existingSecretKeySecretKey="AWS_SECRET_ACCESS_KEY" \
--set externalS3.bucket="mlflow" \
--set externalS3.protocol=http
위 명령어로 설치가 잘 끝났다면 http://localhost 에 접속하고 로그인하면 아래와 같은 화면이 나와야 한다.
- username: user
- password:
kubectl get secret --namespace mlflow mlflow-tracking -o jsonpath="{.data.admin-password }" | base64 -d