[Python] 파이썬 프로세스 이름 바꾸기
Motivation
리눅스에 익숙해지고 싶어서 자발적으로 나서 연구실 딥러닝용 고성능 컴퓨팅 서버 관리를 하고 있다.
우리 연구실은 누가 어떤 GPU를 사용 중인지, 모니터링 하기 위해서 각 서버마다 개인 계정을 만들어 쓰고 있다. 기존 시스템은 최대한 효율적으로 GPU를 사용하되, 다음 사용하고 싶은 사람이 현재 많이 쓰고 있는 사람에게 요청하면 해당 프로세스를 종료하고 넘겨주는 시스템이었다. 그런데, 어느 한 사람이 독식하는 상황이 오게 되었는데, 이 때 염치 없이 넘겨주지 않았던 상황이 왔었다.
더 이상 이런 일이 일어나지 않도록 하기 위해 각 process의 우선순위를 세 단계중 하나로 리포팅 해주는 것이 좋을 것 같았다.
1 - 당장 논문 submission or rebuttal해야 됨, 목에 칼이 들어와도 양보하기 힘듦
2 - 프로세스 주인에게 비워줄 수 있는지 양해를 구한 뒤 GPU 이어 받음
3 - 그냥 허락 없이 프로세스 죽이고 사용해도 됨 -> 죽이고 프로세스 주인에게 말해주기
물론, Slack에 일일이 올리는것도 좋지만 우리는 gpu_monitor.py
하나만 실행하면 현재 누가 어떤 GPU를 사용하고 있는지를 볼 수 있기 때문에 그 방법은 효율적인 방법이 아닌 것 같았다.
Python 코드를 실행한 후 top
으로 프로세스 정보를 띄워보면, 프로세스 이름에 python
이라고 뜬다. 하지만, 이는 불필요한 태그니 이 process 이름을 우선순위로 바꾸면 어떨까 해서 방법을 찾게 되었다. 리눅스 커맨드로 요것저것 시도해봤는데 답이 안나와서 포기할 뻔 하다가 현재까지도 유지보수가 되고 있고 실행도 간편한 setproctitle
패키지를 찾게 되었다.
setproctitle
설치 및 사용법은 매우 간단하다.
[1] 설치
내가 사용하고 있는 Anaconda나 Docker 등 어떤 가상환경이든 상관 없이 다음 커맨드로 설치해주면 된다.
pip install setproctitle
[2] 사용법
먼저 다음과 같이 setproctitle
패키지를 가져와준다.
from setproctitle import *
1. 현재 프로세스 이름 바꾸기
모델을 돌릴 때 다음과 같은 코드만 한 줄 추가해주면 끝이라 정-말 간단하다.
setproctitle('Priority 1')
2. 현재 프로세스 이름 가져오기
프로세스 이름을 바꾸는 것 뿐만 아니라 확인도 가능하다.
getproctitle()
3. 현재 쓰레드 이름 설정하기
심지어 쓰레드 이름도 설정이 가능하다. (사용해본적은 없지만 멀티쓰레딩에 유용할 듯 하다.)
setthreadtitle(title)
4. 현재 쓰레드 이름 가져오기
마찬가지로 현재 쓰레드 이름 확인도 가능하다.
getthreadtitle()
[3] 응용
위처럼 그냥 파이썬 실행 시 단순히 프로세스 이름만 바꿔줄 수도 있지만, 실행 중간중간에도 바꿔줄 수가 있다. 예를 들어, 다음 코드와 같이 우선순위 디스플레이와 함께 딥러닝 모델 학습 시 Max Epoch 중에 현재 몇 Epoch이 학습되었는지 진행사항도 보여줄 수 있다.
setproctitle(f"PRI-1_|_epoch:{epoch}/{self.epochs}")
Figure. 1 GPU 모니터링 w/ process
Leave a comment