Parallel한 연구 및 실험들에 대한 Efficient Management Method

테크
March 15, 2021
Parallel한 실험들에 대한 고충


Deep learning 기반 실험들을 동시다발적으로 진행하게 되면 여러가지 불편사항을 마주하게 됩니다. 개인의 스타일에 따라 느끼는 고충도 다르고 이를 해결하는 방식도 다를 것입니다. 그 중에서 FAL에서 공통적으로 느꼈던 어려움을 말씀드리고 이를 해결했던, 나름대로의 효과적인 관리 방법을 소개해볼까 합니다.


Deep learning 기반 연구는 GPU를 사용하기 때문에, 효율적인 관리를 위해서는 GPU를 monitoring하는 것이 중요하다고 생각했습니다. 현재 FAL에서 연구용으로 사용하고 있는 Server는 13개(GPU는 42개)입니다. 올해 대략 90개 정도의 GPU를 구매할 예정이니, 개인이 사용할 수 있는 GPU수가 점점 많아집니다. 개인에게 할당된 GPU가 많아지면, 진행할 수 있는 실험의 개수도 많아지는데 이는 많은 연구를 할 수 있다는 점에서 큰 장점이지만, 그만큼 monitoring해야 하는 것이 많다는게 단점입니다.


다수의 실험을 진행하면서 monitoring하는 과정에서 생기는 문제는 다음과 같았습니다.


1. 어떤 GPU가 사용하고 있는지 한눈에 파악이 어렵습니다.
2. 가끔 과도한 연구 욕심(?)으로 GPU를 독점하는 사람이 나타났습니다.
3. 본인이 어떠한 실험을 하고 있는지 잊을 때가 있습니다.

이러한 불편을 해결하기 위해 FAL에서는 Gpu Monitoring Tool을 만들었습니다.

GPU Monitoring Tool

앞서 언급한 불편사항을 FAL은 다음과 같이 해결하였습니다.


어떤 GPU가 사용하고 있는지 한눈에 파악이 하기 어렵다.


여러대의 Server를 사용하면서 경험했던 가장 불편한 점은, 실험을 시작할 때 어떠한 GPU가 비어있는지 파악하는 것이었습니다. 하나의 Server를 사용한다면 해당 Server에 가서 command를 입력하면 되지만, 10개의 Server라면 command 입력만 10번이 필요하게 됩니다.

<그림 1> nvidia-smi 명령어 입력 시 표시되는 정보


<그림1>과 같이 GPU 정보를 알 수 있는 command를 Server마다 입력해야한다면, 여간 귀찮은 일이 아닙니다. 이러한 귀찮음(혹은 시간 낭비)을 해결하기 위해 Server의 sshpass command를 통해 GPU정보를 가지고 옵니다.


<그림1>에서 보여주는 GPU 정보들 중 다음과 같은 4개의 정보를 parsing 합니다.


1. 사용하고 있는 GPU의 스펙은 어떻게 되는가
2. 어떤 유저가 gpu를 사용하고 있는가
3. gpu가 메모리를 얼만큼 사용하고 있는가
4. 어떤 Process ID가 해당 gpu를 점유하고 있는가


Parsing 결과를 Gpu Monitoring Tool을 이용해 UI로 나타내면 다음과 같습니다.

<그림2> GPU 정보를 parsing 하여 UI 로 만든 화면

<그림2>를 통해 알 수 있는 정보는 다음과 같습니다.

1. 사용하고 있는 GPU의 스펙은 어떻게 되는가 : Tesla V100-PCIE-32GB
2. 어떤 유저가 gpu를 사용하고 있는가 : hyunho
3. gpu 메모리를 얼만큼 사용하고 있는가 : gpu별 메모리 사용률을 bar 형태로 보여줌
4. gpu를 점유하고 있는 Process ID가 무엇인가 : 1번 :47861, 2번 : 5074 등등

이런식의 UI를 통해 GPU를 주기적으로 monitoring 할 수 있게 되었습니다.

과도한 연구 욕심(?)으로 인한 GPU를 독점이 있다.

호기심이 왕성한 FAL 연구원들의 Server는 쉴새 없이 돌아갑니다. 타 회사에 비해 Server가 많다해도 연구원들의 연구 욕심을 따라갈 수가 없습니다. 그렇기 때문에 가끔 자신도 모르게 GPU를 많이 사용할 때가 있습니다. 이러한 독점을 방지하고자, User별 GPU 사용 개수를 표시하였습니다.

<그림3> User별 GPU 사용 개수


본인이 어떠한 실험을 하고 있는지 잊을 때가 있습니다.

실험마다 소요되는 시간이 적게는 2일, 많게는 2주일 이상도 걸립니다. 연구에 대한 업무 뿐만 아니라, 다른 업무들과 병행하다보면 실험에 대해 바로 기억이 나지 않는 경우가 있습니다. 불편함을 해소하기 위해, Gpu Monitoring Tool을 통해 자신의 실험을 관리하고자 하였습니다.

우선, 본인이 진행 할 실험의 Directory name을 실험에 대한 구체적인 이름으로 정합니다. 그리고 GPU Monitoring Tool을 실행 시키면 <그림4>과 같이 나타납니다.

<그림4> 해당 User가 실행하고있는 실험 목록. (회사 내부 정보로 인해 블라인드 처리)
실제 실험이 진행중이기 때문에, 정보 유출 방지를 위해 블라인드 처리 하였지만 <그림4>와 같이 실험이 돌아가고 있는 Server와 해당 Directory name이 나타납니다.

모든것을 종합해보면 다음과 같습니다. 이렇게 GPU Monitoring Tool을 이용하여 한 눈에 보기 쉽게 서버를 정리하여 사용하게 되니 팀원들의 불편사항도 해결했을 뿐만 아니라 업무 효율도 증진 되었습니다.

<그림5> 전체적인 UI
대부분의 사람들이 업무를 하다보면 불편 사항을 마주하게 됩니다. 그러나 불편들을 해결하기 위해서는 또 다른 업무가 늘어날 뿐이니, 불편을 조금 감수하기 마련이죠.

하지만 개발자는 다릅니다.(어쩌면 저희만 다른 것일수도…?) 불편하면 그것을 해소해주는 프로그램을 만들면 되니까요. 이러한 생각에서 시작된 것이 GPU Monitoring Tool 입니다. 단군의 이념처럼 널리 인간 세계를 이롭게 할 순 없더라도 옆에 있는 동료들을 이롭게 하기 위해 불편사항을 해결해보는 Python Code 한줄은 어떨까요?

이전글
이전글
다음글
다음글
목록보기