본문 바로가기

카테고리 없음

GPU를 사용하는 프로세스가 없는데 GPU Memory Usage가 높을 때 해결 방법

※ 본 글은 필자의 경험에 근거하여 작성되었으며, 잘못된 정보가 포함될 수 있습니다. ※

 

  필자는 최근에 하나의 GPU 서버가 오랜 기간 구동되고 있던 상태에서 이유 없이 GPU 메모리 사용량(memory usage)이 높게 나오는 문제가 발생했다. 다음과 같이 nvidia-smi 명령어를 사용했을 때 GPU를 사용하는 프로세스가 없다고 나오는 상태임에도 GPU 메모리가 점유되고 있었다. 다시 말해 GPU utility는 완전히 0%인데, 메모리만 5GB씩 차지하고 있는 것을 확인할 수 있었다. 아래 사진만 보았을 때는 GPU를 쓰고 있는 어떠한 프로세스도 없는데 메모리를 차지하고 있는 것이다.

 

 

  혹시나 이전에 screen 명령어를 통해 열어 놓은 주피터 노트북에서 메모리를 잡고 있는지 확인했다. 하지만 주피터 노트북 관련 프로세스를 완전히 꺼도 여전히 GPU 메모리가 차지되고 있는 것을 확인할 수 있었다. 그래서 gpustat 명령어를 사용해 보았다. 참고로 gpustat은 다음과 같이 설치할 수 있다.

 

pip3 install gpustat

 

  하지만 gpustat을 이용해 확인해 보아도 마찬가지로 동일한 내용만 확인할 수 있을 뿐이었다.

 

 

  그래서 nvitop도 사용해 보았다. 슬프게도 nvitop을 이용해도 찾을 수 없었다.

 

pip3 install nvitop


  결과적으로는 fuser 명령어를 사용해 문제를 해결했다. fuser는 특정한 파일을 사용하고 있는 프로세스(process)를 알아내고자 할 때 사용할 수 있다. 필자는 다음과 같은 명령어를 입력하여 각각 Nvidia GPU 장치마다 어떤 사용자가 어떠한 command (python 등)를 이용하여 GPU에 접근하고 있는지 확인할 수 있었다.

 

sudo fuser -v /dev/nvidia*

 

  확인 결과 다른 사용자가 python 명령어를 이용해 GPU 장치를 사용하고 있었다는 것을 알 수 있었다. 그래서 자세히 알아보기 위해 다음의 명령어를 이용해 실행 중인 파이썬 프로그램을 전부 확인했고, 프로그램 실행이 끝났음에도 돌아가고 있던 python 좀비 프로세스를 확인할 수 있었다.

 

ps -ef | grep python

 

  결과적으로는 kill 명령어를 이용해 해당 프로세스를 제거했더니 문제가 해결되었다.