1. 개요

MLOps를 공부하면서 자연스럽게 kubeflow를 사용하게 될 일이 많아졌다. 이미 구축이 되어있던 공용 서버에서 작업을 하다가 혼자 연습을 하고 싶어서 집에 있는 윈도우 데스크톱에 kubeflow 구축을 시도해 봤다. 작년에도 시도는 해봤다가 스펙 문제로 실패했었는데 주말을 바친 끝에 마침내 성공했다... 개인적인 의견이지만 kubeflow는 아직도 진입장벽이 너무 높다는 생각이 든다. 

2. 목차

설치 환경은 다음과 같다.

  • 운영체제: 윈도우 11 64bit
  • 환경: Docker, WSL2, Minikube v1.29.0
  • Kubeflow 관련 스펙: kustomize v3.8.4, kubeflow v1.4

3. Minikube 설치

1. Minikube는 윈도우 power shell을 사용해서 설치했다. 설치하기 전에 우선 보안정책부터 수정해야 한다. 윈도우 Power shell을 관리자 권한으로 실행한 후에 다음 명령어를 실행한다

Set-ExecutionPolicy AllSigned

다만 위의 명령어를 실행한 후에 power shell을 실행하면 "profile.ps1 파일이 디지털 서명되지 않았습니다." 라는 에러 메시지가 나왔다. 이럴 경우 권한을 unrestricted로 변경할 경우 위의 에러 메시지가 더 이상 나오지 않았다. 관련해서 검색해 본 결과 위의 방식이 조금 더 안전한 세팅이라고 한다.

Set-ExecutionPolicy Unrestricted

2. 이어서 minikube를 설치를 위해 윈도우 패키지 관리자 chocolatey를 설치한다. 

iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

3. Chocolatey가 정상적으로 설치되었다면 minikube를 설치한다.

choco install minikube

4. Docker 설치

4.1 WSL2 설치

Kubeflow는 쿠버네티스를 기반으로 하기 때문에 윈도우에서 kubeflow를 사용하려면 도커를 설치해야 한다. 그런데 윈도우에서 도커를 사용하려면 Hyper-V 설정을 허용해야 하는데 해당 설정은 윈도우 프로 버전에서만 가능한 설정이라고 한다. 그리고 윈도우 11에서는 Hyper-V 설정도 없다라고 하는데 그 부분은 정확히 확인하지 못했다. 결론적으로 나는 WSL2(Windows Subsystem for Linux 2)라는 것을 사용해서 도커를 설치해야만 했다.

 

1. 우선 power shell에서 간단한 설정을 해줘야한다.

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

2. 그 후에 아래의 링크에서 최신 패키지를 다운로드한다.

 

이전 버전 WSL의 수동 설치 단계

wsl install 명령을 사용하지 않고 이전 버전의 Windows에 WSL을 수동으로 설치하는 방법에 대한 단계별 지침입니다.

learn.microsoft.com

3. 설치하기 전에 컴퓨터를 재부팅해주고 다운로드하였던 파일을 실행해 준다.

4. 윈도우 터미널을 실행해서 아래 명령어를 실행해 준다.

wsl --set-default-version 2

4.2 Docker desktop 설치

WLS2 설치가 끝났다면 도커 데스크톱을 설치할 차례이다. 아래의 링크에서 환경에 맞는 데스크톱을 다운로드한다.

1. https://www.docker.com/products/docker-desktop/

 

Download Docker Desktop | Docker

Docker Desktop is available to download for free on Mac, Windows, or Linux operating systems. Get started with Docker today!

www.docker.com

2. 설치가 끝났다면 도커 데스크톱을 실행하여 설정으로 이동한다. 설정에서 kubernetes 탭에서 관련된 설정을 모두 체크해 준 후에 재실행한다.

모든 설정이 제대로 되었다면 resources > advanced 탭에서 아래처럼 WSL2에 관련된 내용을 볼 수 있다.

3. 도커 설치까지 되었다면 minikube를 실행해서 제대로 실행이 되는지 확인한다.

minikube start --driver=docker --memory=16g --cpus=4 --disk-size 80GB --kubernetes-version=1.20.11 --profile=hm

메모리, CPU 등의 설정은 데스크톱 환경에 맞추어 변경해 주면 된다. 처음에 메모리를 12G를 할당했는데 무한 실행이 된 건지 kubeflow 가 실행되지 않았다. 넉넉하게 잡아주도록 하자. 이때 도커의 기본 설정에 의해서 데스크톱의 전체 메모리의 절반 정도로 사용량이 제한되어 있을텐데 .wslconfig 파일을 수정해서 제한량을 늘릴 수 있다. 

 

.wslconfig 파일은 기본적으로는 user/{사용자}에 자동으로 생성되나 없을 가능성도 있으며 나도 없어서 따로 형성을 해주었다. 메모장 파일이 아니라는 것을 주의해야 한다. 파일을 만들어줬다면 아래의 내용을 저장해 준다.

[wsl2]
memory=32GB
processors=6
swap=0

위의 설정을 저장해도 처음에는 도커에 반영이 되지 않았는데, 속 편하게 컴퓨터를 재부팅했더니 바로 반영이 되었다. 메모리까지 변경했다면 다시 minikube를 실행해 주자.

5. Kubeflow 설치

현재 kubeflow는 v1.6까지 배포되었다. 

Kubeflow를 설치하기 위해서는 kustomize라는 공식 패키지를 사용하면 된다. kustomize는 23.03.20 기준 v5.0.0이 최신 버전으로 아래의 링크에서 다운로드 가능하다. 현재 최신 버전의 kubeflow는 반드시 5.0 버전의 kustomize를 사용해야 한다. 

 

Release kustomize/v5.0.0 · kubernetes-sigs/kustomize

🎉The Kustomize team is so excited to release version 5.0! 🎉 This release is packed with exciting features and improvements. The full list is below, but here are some of our favorites: kustomize lo...

github.com

다만 무엇이 문제인지 kubeflow 설치가 제대로 되지 않아서 나는 kustomize v3.8.4, kubeflow v1.4를 사용했다. Kubeflow v1.4는 아래의 링크에서 branch를 변경하여 다운로드할 수 있다. 

 

GitHub - kubeflow/manifests: A repository for Kustomize manifests

A repository for Kustomize manifests. Contribute to kubeflow/manifests development by creating an account on GitHub.

github.com

Kubeflow는 2가지 설치 방법이 있다. 첫 번째는 싱글 커맨드로 간단하게 구성요소들을 설치하는 방법이며, 두 번째는 각 컴포넌트를 하나하나 직접 설치하는 방법이다. 당연히 두 번째 방법이 더 어렵고 숙련자를 위한 방법이기 때문에 나는 첫 번째 방법을 사용해서 설치를 진행했다. 윈도우 power shell을 관리자 권한으로 실행한 후에 manifests를 설치한 경로로 이동해서 아래의 명령어를 수행한다.

while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done

그런데 위의 명령어를 그대로 입력하면 계속 에러가 발생해서 아래의 명령어로 수정했다.

while($true) {kustomize build example | kubectl apply -f -}

공식 깃허브에서도 설명하듯이 위의 명령어를 실행해도 완전하게 kubeflow가 실행되려면 꽤 시간이 걸린다. 여러 권한과 pod들이 서로 얽혀있다 보니 설치, 실행이 완료될 때까지 무한루프를 기다려야 한다...

6. Kubeflow Dashboard 접속

Kubeflow 대시보드는 포트 포워딩을 해줘야 접속이 가능하다. 윈도우 터미널에서 아래의 명령어를 실행해 준 다음에 localhost:8080으로 접속하면 대시보드를 확인할 수 있다.

kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80

7. 마치며...

Kubeflow 설치는 작년에도 거의 2주일을 넘게 시도했지만 실패했던 기억이 있다. 그래서 거의 반포기 상태로 공용 서버에서 작업하고 있었는데 연습을 하기에는 적절하지 못한 환경이라서 이번에 다시 집 데스크톱에 설치를 도전해 보았다. 작년보다 컴퓨터 스펙이 많이 좋아지기는 했지만 똑같은 과정으로 설치를 했는데 왜 이번에는 되는 건지 모르겠다... 물론 이번에도 쉽지는 않았다. 이번에도 거의 포기하고 자려다가 마지막으로 다시 시도했을 때 성공했는데 주말 하루를 바친 값을 한 것 같다. 최신 버전으로 구성하지 못한 게 아쉽지만 원래 최신 버전은 함부로 쓰는 게 아니니... 다음에는 kubeflow를 활용해서 pipeline을 구성해보고자 한다.

 

 

 

'1. Engineering > Kubeflow' 카테고리의 다른 글

[Kubeflow] 파이프라인 실행  (1) 2023.04.23
[Kubeflow] ENAS RNN pipeline  (0) 2022.10.20
[Kubeflow] Kubeflow 설치  (0) 2022.10.20
[Kubeflow] GNN 파이프라인  (0) 2022.10.20

+ Recent posts