코딩일기

[Overview] Slurm, nn.ModuleList 본문

Code/기타

[Overview] Slurm, nn.ModuleList

daje 2022. 11. 10. 11:20
728x90
반응형

 

 

안녕하세요 다제입니다. 

오늘은 코드를 뜯어보다가 발견한 Slurm, EncoderWrapper, nn.ModuleList에 대해서 알아보도록 하겠습니다. 

 

 

Slurm

Slurm이란? 

Slurm 은 유저(사용자)가 서버에 제출한 task(job)을 스케줄링 해주는 프로그램입니다.

유저가 GPU 자원을 요청하면 자원을 빌려주거나, 가용한 자원이 없으면 대기시키는 역할을 합니다. 특히 여러 대의 서버를 엮어서 Slurm을 사용하는 경우가 많은 것을 이번에 처음 알게 되었습니다. 

 

Slurm의 장점

 -. 유저는 노드들을 돌며 일일이 nvidia-smi, htop을 찍어보면서 어느 GPU가 비었나 확인하지 않아도 됩니다.

 -. GPU에 모델을 올려놓고, 누가 내 GPU를 사용해 OOM이 뜨지 않을까 노심초사하지 않아도 됩니다.

 -. 다른 사람이 자원을 쓰고 있을 때 수시로 nvidia-smi를 찍어보며 기다리지 않아도 됩니다. 

 


 

nn.ModuleList

 

파이토치에서 제공하는 하나의 모듈로써, 기능은 python의 list와 비슷한 기능을 한다. 

단, python list와 차이점은 파이토치 프레임워크가 Module로 nn.ModuleList를 인식할 수 있다는 점이다. 

여기서 모듈로 인식될 수 있다는 말이 무엇인지 햇갈릴 수 있는데, 이는 모듈에 대한 개념이 햇갈려서 발생되는 것이다. 

모듈의 개념을 다시 한번 살펴보면, 

 -. 모듈이란 함수나 변수 또는 클래스를 모아 놓은 파일을 의미하며, 

 -. 모듈은 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만든 파이썬 파일이라고도 할 수 있다. 

즉, 다른 곳에서 nn.ModuelList를 모듈로 호출할 수 있게 되는 것이다.

 

또한, nn.ModuleList를 찾아보게 되면,

nn.Sequential()가 비교하는 글들을 많이 볼 수 있는데 이에 대한 간결한 설명이 없어서 요약해보았다. 

먼저, 모두 neural network를 만드는데 사용되며, nn.Sequential()은 그 자체가 neural network이 된다. 

그런데, nn.ModuleList는 forward를 정의하는 함수가 따로 필요하고, 그 안에서 ModuleList끼리 묶어주는 별도의 작업이 필요하다. 

만약 여기서 forward를 정의하는 함수가 따로 필요하다라는 말이 이해가 되지 않는다면, pytorch에서 인공지능 모델 설계하는 부분에 대한 개념이 약한 것이니 그 부분을 찾아보면 됩니다. 

그럼 한번에 만들 수 있는 nn.Sequential()를 사용하면 편한데 왜 nn.ModuleList를 사용해서 모델을 설계하는지가 또 궁금할 수 있는데 이는 모델을 유기적으로 구조를 변경할 때 매우 용이하기 때문에 이렇게 분리하여 모델을 설계하는 경향이 있다. 

 

 

 

728x90
반응형
Comments