2020년부터 석사를 시작해서 이제 3기에 접어들었지만 연구실생활은 4학년인 2019년 부터 시작했다. 새로 부임하신 교수님연구실에 들어갔었고 정말 아무것도 없는 무에서부터 시작했다. 처음엔 시행착오도 많이 격고 정말 힘들었지만 덕분에 클라우드, 인프라, 딥러닝연구 모두 재미있게 할 수 있었다. 오늘부터 우리연구실의 인프라 발전과정을 적어보려고한다.
2018년 여름방학. 정말 아무것도 없는 허허벌판, 화성을 탐사하듯 그때 연구실은 정말 아.무.것.도 없었다. 교수님 한 분만 믿고 들어간 연구실이라 아직 연구실 방 배정도 못받았었다. 그래서 건물에 남는 스터디공간인 이노갤러리 책상하나를 작은 연구실처럼 사용했는데 다행히 얼마 지나지 않아 학과 공동연구실에 자리를 얻을 수 있었다. 이노갤러리는 공간이 넓긴했는데 의자가 너무 불편했어서 집중이 참 안됐었다. 당시 연구실은 6명 정도로 작은 수준이었는데 교수님 한분 박사님 한분 나머지 네명이 학부연구생이어서 거의 1대1 지도를 받았다. 딥러닝을 연구하는 연구실이라 GPU서버가 필수였는데 다행히도 당시 최고 스펙인 2080ti 4개가 들어있는 워크스테이션용 서버 3대가 연구실에 있었다. 천만원 정도하는 서버를 세개나 볼수 있었으니 당시 학부생입장에선 엄청난 "인프라"(?)를 경험할 수 있었다. 인프라 관리도 처음엔 나름 잘 돌아갔다. 6명 밖에 없으니 각 서버에 두명씩 할당해서 나는 1번 0,1번 GPU, 너는 2,3번 GPU 이런식으로 사용했다. 보기에 딱 떨어지고 깔끔해보지이 않는가!? 하지만.. 현실은 항상 그렇게 녹록하지가 않다. 당시에 연구실에서 Super Resolution(SR; 작은 이미지를 크고 선명하게 만드는 기술)을 연구했는데, 이미지가 크다보니.. 1080TI의 10GB VRAM으로는 며칠은 돌려야 겨우 실험결과를 얻을 수 있었다. 그로인해 너가 안쓸땐 내가 4개 쓰고 내가 안쓰면 너가 4개쓰고 이런식으로 같은 서버를 쓰는 사람끼리 잘 조절해가면서 썼었다.
문제는 4차산업혁명과 발맞춰 많은 수의 학부생들이 연구실로 들어오게 되면서 시작되었다. 인당 2개의 넉넉(?)했던 GPU는 0.5개로 변했고 여러사람이 쓰다보니 참 다양한 이유로 서버가 힘들어했는데 주로 누가 쓰고있는 GPU에 잘못해서 자기 프로그램을 실행시켜서 OOM(Out of Memory; 메모리 부족)으로 프로세스가 둘다 죽어버리거나, 이상한 코드로 GPU가 버그가나서 좀비프로세스가 생기거나 하는 것들이었다. 이틀 돌려 놨던 학습결과가 갑자기 증발해버리는 아픔은 정말 눈물나는 경험이다... (물론 중간 저장 하는 코드가 있지만 가끔 없는경우.. R.I.P). 특히 좀비 프로세스는 머리가 아팠는데 좀비 프로세스 때문에 GPU하나가 먹통되면 nvidia-smi(GPU를 얼마나 사용중인지 모니터링 하는 프로그램)가 먹통이 되서 그 서버를 쓰는 모든 사람이 영향을 받는 것이었다. 게다가 이 문제는 서버를 껐다켜야 없어졌는데 이것 역시 몇시간 며칠씩 돌아가는 딥러닝 프로그램 특성상 쉽게 껐다 켰다 할 수가 없는 것이었다. GPU 부족을 실감하신 교수님은 학부생들 월급을 쪼금씩 깍아서 서버를 늘리자고 하셨고(당시 학교에서 학부생 월급은 제일 많이 주셨다.) 조금씩 조금씩 서버가 늘어서 2080ti 4개가 들어가는 서버를 5대 더 추가하게 되었다.
서버가 너무 많아지고 사람도 많아지니 관리하는 사람이 필요해졌다. 당시 석사 1기였던 내 동기가 첫 인프라팀장(하지만 팀원이 혼자인건 함정)이 되었다. 이때부터 중앙에서 관리가 시작됐는데 전처럼 각 서버별 GPU별로 사람을 할당해서 관리했다. 조금 달라진 점은 할당에 우선순위가 생긴 점인데 0순위는 프로젝트 진행자 1순위는 학회에 낼 논문을 쓰는사람. 2순위는 박사 > 석사 > 학부생 순이었다. 이 방식은 두가지 문제점이 있었는데 첫번째는 할당된 서버가 변경되었을 때 데이터셋이나 코드를 매번 옮여야 하는 것이 상당히 불편하다는 점이고, 두번째문제는 조금더 본질적인 문제인데 놀고 있는 GPU가 많다는 것이다. 2번 문제는 특히 논문 제출 기간이 다가왔을때 아주 많은 갈등을 야기시켰는데, 우선순위가 낮은 사람이라도 평소 코드 디버깅을 위해 1개씩은 할당을 해주고 있었는데 논문 제출할 사람은 일분일초가 중요하고 실험 하나라도 더 빨리 많이 돌려야 되는데 이런 디버깅용 GPU들이 낭비되고 있으니 너무 아까웠던 것이다. 그렇다고 그 사람이 안쓰는 시간에 돌리기엔 1번 문제와 결부되어 오히려 데이터 옮기는 시간이 더 드는 문제도 있었다. 이 두 문제는 당장 해결할 수 있는 방법이 없어서 약 1년동안 계속 유지 되어왔다. 당시 각 서버 할당 정보를 Google Spread Sheet로 공유했었는데 얼마전에 발견하고 이럴 때도 있었구나 하고 추억에 잠기기도 했다. (그땐 그랬지...) 우리는 이 때를 카오스의 시기라고 부른다.
2020년 내가 석사 1기로 입학하면서 새로운 인프라 팀장이 되었는데 본격적인 대격변이 시작되었다.
다음편에 계속.
'개발 > 대학원생의 좌충우돌 GPU 클러스터 구축기' 카테고리의 다른 글
010. [대학원생의 좌충우돌 GPU 클러스터 구축기] 2. GPU 클러스터 만들기(Kubernetes)! (3) | 2022.07.06 |
---|---|
007. [대학원생의 좌충우돌 GPU 클러스터 구축기] 1. 놀고있는 GPU 찾아내기!! (2) | 2021.07.29 |