이전 글에서 만든 GPU 모니터링으로 수동분배가 쉬워지긴 했지만, 늘어나는 서버, 사용자를 하나씩 할당하는건 너무나.. 빡센일이었다.. 그래서 GPU를 자동으로 할당하고 사용할 수 있는 방법이 없을까 고민하고 검색하다가 GPU 클러스터를 만들기로 했다!
처음 찾아본것은 기존 HPC(Hight Performance Computing)에서 많이 사용하던 SLURM 이었는데 서버 별로 모든 환경을 동일하게 해주어야 하는 문제점이 하나 있었다. 하지만 사람마다 사용해야하는 파이썬 버전, 패키지 버전이 다를 경우가 흔해서 파이썬 가상환경이나 도커를 많이 사용하고있는데 이것도 하나씩 세팅을 해주어야하니 불편할 수 밖에 없다고 판단했다.
다음으로 찾아본것은 조금더 최근에 나오고 많이 사용되고 있는 Kubernetes(이하 k8s) 였다. Container Orchastration 툴인 K8s는 무엇보다 Docker Container를 기반으로 한 환경이라는 점이 가장 마음에 들었고, 최근에 많이 사용되고 있었기 때문에 Nvidia에서 제공하는 다양한 자동 설정툴도 많았다. 이외에도 스토리지 격리등 다양한 기능이 있었기 때문에 K8s를 설치해서 사용하기로하였다. 다만 Slurm도 그렇고 K8s도 그렇지만 사용자가 사용하기에 Learning Curve가 상당했다. (Python으로 Deeplearning 하던 사람들이 클라우드 컴퓨팅 지식까지 겸비하는 경우는 흔치 않기때문에..) 이를 극복할 심플한 UI가 필요했고 그리하여 K8s에서 돌아가는 웹 어플리케이션을 만들기로 했다.
일단 K8s 공부가 필요했다. 엄청 다양한 기능을 제공하고 있었는데 공부할 양이 그만큼 많았다는 것이다.. 그래서 일단 당장 기능 구현에 필요했던 Pod, Deployment, Service, PV, PVC 등 기본적인 내용을 튜토리얼을 따라하면서 익혔다. 처음 공부 할 때는 로컬에서 minikube를 이용해서 공부했는데 GPU 스케쥴링이 되는지 확인을 위해서 또 원래 목적이 GPU 서버들을 클러스터링 하는것이었으니, 서버에 K8s 설치를 시작했다. 초보인지라.. 설치부터 만만치 않았다. 일단 서버 OS 가서 제각기 달랐고, 환경도 다르고 하니 서버에 k8s 설치하는데만 꼬박 일주일은 들였다... 그렇게 실패를 거듭하고 자동으로 k8s를 배포해주는 kubespray를 찾아내서 드디어 설치에 성공을 했다. 사실 kubespray로 설치하는것도 한번에 마법처럼 되지는 않았고 여러번의 Trial-error를 거치고 마침내 성공했다.
https://github.com/kubernetes-sigs/kubespray
이것이 다는 아니었고 K8s에 GPU를 인식시키려면 추가로 해주어야 하는 작업이 있었는데 device plugin 이 필요햇다 다행히 nvidia에서쉽게 설치할 수 있게 제공을 해주고 있어서 쉽게 설치를 했다. 추후에 발견 했지만 모든서버에 gpu driver, cuda, 등을 수동으로 설치해주어야 하는 문제는 여전히 있었는데 이것도 자동으로 해주는 툴이 있다(Nvidia GPU-Operator). (갓 Nvidia 느님!!!) 이걸 알기 전까지는 수동으로 설치 다 하고 device plugin을 따로 설치해서 진행했다.
https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/getting-started.html
우여곡절 끝에 설치를 끝내고 어느 정도 원하는 기능이 k8s에서 구현가능한지 확인과정을 거쳤는데 다행히 GPU 자동 스케쥴링이 정상적으로 되는것을 확인했다. 사실 여기까지만 하더라고 GPU 스케쥴링은 사용을 할수 있다 물론 k8s를 사용하기 위한 기반지식이 어느정도 필요하다.
이 때문에 개발자 친화적인 환경이 필요하다고 생각했다. 딥러닝 연구하기도 바쁜데 k8s에 pod 만들고 job 만드는걸 배울시간이 어디있겠는가. 또 모르면 나한테 물어볼텐데 그걸 다 해줄 자신은 없었다. 그래서 쉽게 쉽게 사용할 수 있도록 Web UI 를 만들기로했다.
Web-UI 생성기는 다음시간에 계속..
'개발 > 대학원생의 좌충우돌 GPU 클러스터 구축기' 카테고리의 다른 글
007. [대학원생의 좌충우돌 GPU 클러스터 구축기] 1. 놀고있는 GPU 찾아내기!! (2) | 2021.07.29 |
---|---|
006. [대학원생의 좌충우돌 GPU 클러스터 구축기] 0. 맨땅에 헤딩하기 (1) | 2021.03.19 |