Kubeflow 설치
Kubeflow 설치
Minikube와 Nvidia Docker를 활용하여 Localhost에서 GPU기반으로 돌아가는 Minikube를 Cluster로 사용하여 Kubeflow를 구축하는 것을 목표로 한다.
사전사항
- Docker-CE ( ≥ 18.09)
- Nvidia-Docker( ≥ 2.03)
1. Kubectl 설치
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | \
sudo apt-key add - && \
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | \
sudo tee /etc/apt/sources.list.d/kubernetes.list && \
sudo apt-get update -q && \
sudo apt-get install kubectl=1.15.4-00
kubectl version
으로서 1.15.0 Version인지 확인
2.Minikube 설치
curl -Lo minikube https://storage.googleapis.com/minikube/releases/v1.2.0/minikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin/
minikube version
으로서 Minikube Version확인
3.Minikube 실행
1)/etc/docker/daemon.json 파일에서 default-runtime을 nvidia로 변경한다.
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
2)Docker 재시작
sudo service docker restart
3)Minikube 실행
sudo -E minikube start --vm-driver=none --apiserver-ips 127.0.0.1 --apiserver-name localhost --docker-opt default-runtime=nvidia --feature-gates=DevicePlugins=true --kubernetes-version v1.15.0
Minikube를 GPU기반으로 돌리기 위하여 특정 조건을 걸어서 Setting하였습니다.
name | description |
—docker-opt default-runtime=nvidia | 미니쿠베의 기본 도커를 엔비디아 도커로 설정한다 |
—feature-gates=DevicePlugins=true | GPU 지원은 쿠버네티스에서 알바/베타 단계에 속한다. 따라서 이를 사용하기 위해서는 feature-gates 옵션을 이용해서 GPU 사용 옵션을 변경해줘야한다 |
—kubernetes-version v1.15.0 | NVIDIA 드라이버를 쿠버네티스와 연결해주는 k8s-device-plugin은 1.10이상의 쿠버네티스 버전을 요구한다 |
--vm-driver=none | 현재 정식 홈페이지에서 사용하는 Driver kmv2 같은 경우 GPU연동을 위하여 많은 제약사항이 존재하여 Driver를 None으로서 사용 |
4. Minikube Nvidia Driver Pod 설치
1) 설치
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v1.12/nvidia-device-plugin.yml --validate=false
2)확인
kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"
5. Kubeflow 설치
1) https://github.com/kubeflow/kubeflow/releases/tag/v0.7.0에서 linux.tar.gz 다운
2) 압축 해제
tar -xvf kfctl_v0.7.0_<platform>.tar.gz
6. 환경 변수 설정
export PATH=$PATH:"/home/jyhwang"
export KF_NAME="my-kubeflow"
export BASE_DIR="/home/jyhwang"
export KF_DIR=${BASE_DIR}/${KF_NAME}
#Single User
export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/master/kfdef/kfctl_k8s_istio.yaml"
#Multi User
#export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/v0.7-branch/kfdef/kfctl_existing_arrikto.0.7.0.yaml"
name | description |
KF_NAME | 생성할 Folder 명 지정 |
BASE_DIR | 생성할 Directory 지정 |
KF_DIR | 위의 두 변수를 활용하여 작업 폴더 지정 |
7. pv 생성
1) PV File 작성 (pv.yaml, pv2.yaml, pv3.yaml, pv4.yaml, pv5.yaml)
#pv.yaml
kind: PersistentVolume
apiVersion: v1
metadata:
name: kubeflow-volume
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/storage/kubeflowstorage"
참고사항
자동으로 PV와 PVC가 생성되는 것이 당연하고, 재설치를 하였을때 자동으로 생겼습니다. 현재 어떤 Error인하여 생성되고 안되는지는 확인할 수 없으나 Kubeflow설치 후 생성한 PV가 Bound되지않고 Available한 상태이면 삭제하시는걸 추천드립니다.
Kubeflow의 Version에 따라서 PVC가 4~5개가 생깁니다. 5개를 만들어 두로 Kubeflow설치 후 PVC가 4개인경우 1개를 삭제하는 방법이 제일 안전합니다.
또한, Kubeflow의 몇몇 Version인 경우에는 특별한 StorageClass를 사용합니다. 그러는 경우 StorageClass를 따로 선언한뒤 apply해야 합니다.
PV 에서 선언한 Path에 Directory생성및 권한을 접근 가능하게 바꿔줘야 합니다.
2) PV File apply
kubectl apply -f pv.yaml
kubectl apply -f pv2.yaml
kubectl apply -f pv3.yaml
kubectl apply -f pv4.yaml
kubectl apply -f pv5.yaml
8. Kubeflow 설치
mkdir -p ${KF_DIR}
cd ${KF_DIR}
kfctl apply -V -f ${CONFIG_FILE}
#MultiUser
#mkdir -p ${KF_DIR}
#cd ${KF_DIR}
#wget -O kfctl_existing_arrikto.yaml $CONFIG_URI
#export CONFIG_FILE=${KF_DIR}/kfctl_existing_arrikto.yaml
#kfctl apply -V -f ${CONFIG_FILE}
9. PortForwarding
export NAMESPACE=istio-system
kubectl port-forward -n istio-system svc/istio-ingressgateway 8080:80
10. 접속 화면
Single User
Multi User
Single User의 Kubeflow와 달리 특정 NameSpace생성 후 접근권한 부여가 가능하다.
Default Admin의 계정은 다음과 같다.
- E-mail: admin@kubeflow.org
- Passward: 12341234
참조사항(Minikube 재설치)
중간중간 설치가 잘못되어 재설치를 해야하는 경우 특정 설정 파일을 삭제해야 한다. 그렇지 않으면 이전에 설정들이 같이 따라와서 이전 작업에서 발생한 에러가 그대로 발생하는 경우가 있다.
1) 설정 파일 삭제
minikube stop
minikube delete
rm -r /root/.kube
rm -r /root/.minikube
rm -r /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
2) PV에서 지정한 Directory안에 모든 File을 지워야 한다. 만약 재설치시 원래 설치한 PV와 PVC가 맞지 않으면 DB가 달라 읽지 못하는 Error가 발생한다.
참조:Minikube GPU 연동
참조:Minikube 설치 사이트
참조:Kubeflow 설치 사이트
코드에 문제가 있거나 궁금한 점이 있으면 wjddyd66@naver.com으로 Mail을 남겨주세요.
Leave a comment