반응형

회사에서는 ML Ops 환경이 어느 정도 갖춰져 있어서, Kubeflow를 직접 설치하지 않았다. Local에서 Kubeflow를 설치하려고 하니, 생각보다 쉽지 않았다.  시간은 조금 걸렸지만, 설치하는 과정을 적어보고자 한다.


WSL 설치

  • Window에서 Kubernetes를 설치하기 위해서는, WSL(Windows Subsystem for Linux) 환경을 구성해야한다.
  • 먼저, Windows 검색 창에 Windows 기능 켜기/끄기를 검색하여 실행한다.
  • Windows 기능 켜기/끄기 List들에서 Linux용 Windows 하위 시스템을 체크해 준다. Windows Powershell을 관리자 권한으로 실행한 뒤,  wsl이 설치되어 있는지 확인한다. (보통 설치되어 있을 가능성이 높아서 확인)

wsl -l -v
  • 아래와 같이, list에 WSL 항목이 뜨고, VERSION이 '2' 이면, Docker Desktop 설치로 넘어간다. 

 

  • 만약 버전이 '1'일시에는, 아래 명령어로 버전을 바꿔준다.  Powershell에서 아래 명령어를 입력해 준다.
wsl --set-version {Name} 2  # Name에 현재 사용중인, wsl 버전 입력
wsl -l -v  # 적용 확인
wsl # wsl 환경으로 진입
  • 만약 wsl 목록에 존재하지 않는다면, Microsoft Store에서 "Ubuntu" 검색 후, 원하는 버전을 설치해 준다.

 

Docker Desktop 설치

  • Kubeflow는 Kubernetes 환경 하에서 돌아간다. 따라서, Kubeflow 설치 전에 Kubernetes 환경을 먼저 구성해야 한다.
  • Window에서 가장 쉽게 Kubernetes를 설치하는 방법은 Docker Desktop을 통해, 설치하는 것이다. 
  • 우선, 아래 Link에서 Docker Desktop을 설치한다.
Docker Desktop 설치
https://www.docker.com/products/docker-desktop/

Docker Desktop 설치 화면 (출처: https://www.docker.com/products/docker-desktop/)

  • 설치 후, Docker Desktop을 켜고, Setting > Kubernetes > Enable Kubernetes > Apply & restart를 눌러준다.

 

Kubectl 설치

  • Kubectl은 Kubernetes 클러스터를 관리하기 위한 CLI 도구로, 아래의 명령어를 통해 설치한다. 
sudo apt-get update && sudo apt-get install -y kubectl
kubectl version

 

Minikube 설치 & 실행

  • H/W 자원이 만약 풍부하다면, 일반의 Kubernetes Cluster 구성(마스터와 노드를 포함)이 가능하겠지만, 로컬 환경에서는 대체로 H/W 자원이 그리 풍부하지 않다.
  • Minikube는 로컬에서도 개발 & 테스트를 용이하게 하기 위해, 단일 노드로 구성된 Kubernetes Cluster를 생성할 수 있도록 하는 도구이다. 
  • 아래 명령어로, minikube를 설치한다.
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb && sudo dpkg -i minikube_latest_amd64.deb
  • minikube를 설치했으면, 아래 명령어를 통해, Kubernetes Cluster를 실행해 준다. (memory와 cpu, disk 등은 현재 사용 가능한 리소스 내에서 적당히 설정해 준다. 너무 많이 설정하면, Local 환경이 제대로 동작하지 않는다.)
  • 현재(23/03) 기준으로 Kubeflow가 지원하는 가장 높은 수준의 Kubernetes 버전은 1.25.0이다. 
minikube start --driver=docker --memory=4g --cpus=2 --disk-size 20GB --kubernetes-version=1.25.0

※ 주의 : kubernetes 버전에 따라, 사용 가능한, kubeflow 버전이 달라진다. 

 

Kustomize 설치 (Optional)

  • Kustomize는 원본 yaml 파일의 변경 없이, yaml 파일을 변경할 수 있도록 하여, 환경에 맞는 설치를 가능하도록 도와주는 도구이다.
  • 사실, Kubectl 설치 시, Kustomize는 자동으로 설치된다. (Kustomize 버전을 업그레이드하기 위해서는, Kubectl 버전을 업그레이드해야 한다.) 
  • 다만, Kustomize와 minikube의 Kubernetes 버전이 호환이 안 되는 경우, Kustomize만 따로, 설치하여, 적용 가능하다. 
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
sudo cp kustomize /usr/local/bin/
kustomize version

 

Kubeflow 설치

  • 드디어, 대망의 Kubeflow를 설치한다.
  • Kubeflow 설치는 Kustomize를 이용하여, Kubernetes 버전에 존재하는 각 Component 들의 yaml 파일을 변경하여, 설치하는 구조이기 때문에, 1) Kubernetes 버전 2) Kustomize 버전과 호환성을 맞춰줘야 한다. 
  • 계속, Kubeflow 버전이 나오고 있기 때문에, 명령어 입력 전, https://github.com/kubeflow/manifests#installation 에 접속하여, 버전을 확인해 보기 바란다.

23/03/27 기준 prerequisites

  • 내가 설정한 버전은 다음과 같다.
kubernetes = 1.25
kustomize = 5.0.0
kubeflow = v1.7

 

git clone --branch v1.7-branch https://github.com/kubeflow/manifests.git
cd manifests
# 버전 변경이 필요 시 : git checkout (branch 명)
while ! kustomize build example | awk '!/well-defined/' | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done

※ 설정한 H/W 리소스에 따라 다르겠지만, 설치까지 정말 오래 걸린다. 터미널 문구에 Warning이 뜨는 것은 상관없는데, Error가 뜬다면, Kubernetes 버전이나, Kustomize 버전과 호환이 안되었을 확률이 높다. 그런 경우 Kubernetes 버전과 Kustomize 버전을 바꿔주던, Kubeflow 버전을 바꿔주던 해야 한다.

 

  • 아무래도, Kubeflow가 특정 Kubernetes 버전에 맞춰서 개발되었을 것이므로, Kubernetes 버전을 바꿔주는 것이 좋다고 느껴진다. 
  • Kubernetes 버전은 아래 명령어로 다시 설정해 준다.
minikube delete
minikube start --driver=docker --memory=4g --cpus=2 --disk-size 20GB --kubernetes-version={새로운 버전}

 

Kubeflow 접속

  • 로컬 컴퓨터의 8080 포트와 쿠버네티스 내부의 80 포트를 연결해 줘서, UI에 접근할 수 있도록 해준다. 
  • 이 명령어를 실행하면 로컬 컴퓨터의 8080 포트를 통해 쿠버네티스 내부의 istio-ingressgateway 서비스에 접근할 수 있다.  
kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80
  • 명령어 실행 후, 브라우저에서 http://127.0.0.1:8080에 접근하면 Kubeflow UI에 접근 가능하다. 

 


Kubeflow 설치는 시간도 오래 걸리고, 각 도구들의 버전 호환성 때문에, 설치가 어려웠다. 하지만, 천천히 하나하나 진행하다 보면, 대략적으로 Kubeflow가 어떻게 구성되는지 보이는 것 같다. 다음 장부터 Kubeflow 각 component를 파봐야겠다.  

'MLops' 카테고리의 다른 글

MLops 등장: Hidden Technical Debt in Machine Learning Systems 논문 리뷰  (17) 2024.02.18
Kubeflow (2) - Katlib  (1) 2023.04.11
Kubeflow (0) - 소개  (1) 2023.03.26

+ Recent posts