이 글은 1대 서버요정 minostauros - github profile이 만들어낸 연구실의 GPU Cluster를 유지보수하고 있는 2대 서버요정(a.k.a me)이 정리를 위해 쓰는 글이다.
고작 연구실 서버 관리가 무에 대수라고 블로그 글까지 쓰나...
위와 같은 생각이 드는 사람을 위해 우선 문제를 정의하고 가려고 한다.
2018년 인공지능 그랜드챌린지 우승과 다년간의 우수한 탑티어 컨퍼런스 논문 실적으로 이런저런 과제를 많이 받은 연구실은 서버의 수가 기하급수적으로 늘어나게 된다. 그와 함께 이를 관리해야할 필요성도 생기게 된다.
2020년 11월 23일 기준으로 조립 컴퓨터 36대, 랙서버 2대, DGX-1 1대를 보유하고 있다. 대부분의 조립컴, 랙서버에는 3~4개의 GPU가 들어가서 약 120개의 GPU를 보유하고 있는 셈이다.
여기서 이제 문제에 봉착하게 된다. 30명이 넘는 연구실 구성원이 120개의 GPU를 공간,시간 효율적으로 사용하기 위해서는 어떤 시스템과 정책을 갖춰야할까?
CIPLAB GPU Cluster Overview |
sol1은 가장 자동화되어 있지 않은 방식이고 sol2는 가장 자동화되어있다. 그로인해 아래와 같은 장단점이 발생하게 된다.
sol1 | sol2 | |
---|---|---|
장점 | 서버 관리의 불필요 | 모든 자원을 효율적으로 자원들을 활용 |
단점 | 효율적인 사용이 불가능 (e.g. 특정 개인이나 팀 유휴) | 클라우드 컴퓨팅 서비스 유지보수 필요 |
그래서 CIPLAB GPU Cluster는 가능한 두 해결책의 단점을 최소화 하는 방향으로 구성되었다. 현재 가용자원, 개별 사용자원을 모니터링하며 효율적인 사용이 가능하되 이러한 서비스의 유지보수 필요성을 가능한 낮추는 방향이다.
따라서 1대 서버요정은 아래와 같은 요구사항에 직면하게 되었다.
이러한 요구사항을 아래와 같이 해결하게 된다.
nvidia-smi
를 이용해서 이 정보를 한 곳으로 모으는 open source, 1대 서버요정이 수정한 버전에서 container name, 온도, 전력 사용량 등도 알 수 있음Up 모니터링(좌측)과 각종 자원(CPU, GPU, Disk, Network) 모니터링(우측) |
기본적으로 이 시리즈는 다음과 같은 목적을 가지고 진행될 예정이다.
전부 애매한 목적이기 때문에 앞으로 관련 글을 더 안 쓸 수도 있다는 말씀!
저도 인공지능 연구실에서 서버관리를 하고 있는데 저희랑 동일한 방법을 하고 계셔서 너무 반갑네요!ㅋㅋㅋ
저희는 기본 도커구성(cuda, jupyter lab, opencv, ssh, xrdp)으로 운영하고
따로 웹 서비스를 만들어서 사용자가 직접 컨테이너 생성하도록 운영하고 있습니다.
모니터링 시스템이 없어서 아쉬워서 직접 만들까 고민중이었는데
Duc, netdata 를 조합하면 되겠군요
그런데 네트워크 구성은 어떻게 하셨는지 궁금합니다.
외부에서 원격으로 접속하는 일이 많을텐데, 퍼블릭 아이피를 여러개 할당받으셔서
NAT port mapping으로 하셨을까요?