※ 본 글은 필자의 경험에 근거하여 작성되었으며, 잘못된 정보가 포함될 수 있습니다. ※
가끔 다수의 GPU로 학습을 진행할 때, 학습이 종료되었음에도 GPU 메모리를 잡아 놓고, 메모리를 반환하지 않는 경우가 있다. 대표적인 사례가 바로 Jupyter Notebook을 이용할 때이다.
예를 들어 Jupyter Notebook 상으로 딥러닝 모델(model)을 업로드하면 자연스럽게 GPU를 차지하게 된다. 이후에 학습을 모두 마친 뒤에도 메모리 해제가 되지 않는다면 model이 GPU VRAM에 그대로 올라가 있다.
쉽게 말하여 GPU 메모리가 반환되지 않은 경우로, GPU Util은 0%가 나오는데, 실질적으로 메모리만 잡고 있는 것이다. 예를 들어 아래의 인덱스 1번 GPU가 그러한 사례에 해당한다. 아래 사진은 nvidia-smi 명령어를 사용할 결과이다.
nvidia-smi 명령어를 사용하면, 각 GPU를 차지하고 있는 PID가 무엇인지 그 프로세스에 대한 정보를 알 수 있다. 결과적으로 해당 PID를 구체적으로 어떤 사용자가 차지하고 있는지 궁금할 수 있다.
특히 한 서버를 여러 명이 쓰고 있을 때, 특정한 GPU 관련 프로세스를 누가 돌리고 있는지 확인하기 위하여 ps 명령어를 사용할 수 있다. 이때 PID를 기준으로 검색할 수 있다. 그 방법은 다음과 같다.
ps -ef | grep {PID}
예를 들어 PID가 2051613이라고 해보자. 다음과 같이 입력하면 된다.
ps -ef | grep 2051613
그러면 다음과 같이 사용자 이름도 함께 나오기 때문에, 해당 사용자에게 직접 가서 어떤 프로그램을 돌리고 있는지 물어볼 수 있다.
※ 특정한 PID를 강제로 종료하는 방법 ※
참고로 특정한 PID를 기준으로 강제로 종료하는 방법은 다음과 같이 kill 명령어를 사용하는 것이다.
sudo kill -9 {PID}
예를 들어 PID가 1579331인 프로세스를 강제로 종료하는 방법은 다음과 같다.
sudo kill -9 1579331
해당 프로세스를 강제로 종료한 뒤에, 다음과 같이 GPU 메모리를 잡고 있던 것이 메모리 해제된 것을 확인할 수 있다.