2.2 프로세스·세션·자원 모니터링

실습 · 연습문제 1개

nvidia-smi 기록 요약하기 gpu-log-summary

학습 중 GPU 상태를 1초마다 파일에 남겨 두었다.

nvidia-smi --query-gpu=timestamp,index,utilization.gpu,memory.used,memory.total \
           --format=csv,noheader,nounits -l 1 > gpu.log

각 줄은 다음과 같다(쉼표 뒤에 공백이 있다).

2026/03/02 10:00:01.123, 0, 98, 30512, 40960
2026/03/02 10:00:01.125, 1, 0, 38200, 40960

함수 summarize(text, idle_util_pct=5, held_mem_mib=1024)를 완성해 GPU 번호마다 다음을 담은 dict를 반환한다.

{0: {"mean_util": 97.5, "max_mem_mib": 30600, "idle_holding": False}, ...}
  • mean_util: 사용률(%)의 평균(float). 값이 [N/A]인 표본은 평균에서 뺀다. 유효한 표본이 하나도 없으면 None.
  • max_mem_mib: memory.used의 최댓값(int). [N/A]는 무시한다.
  • idle_holding: mean_util < idle_util_pct이고 max_mem_mib > held_mem_mib이면 True. 메모리는 잡고 있는데 계산은 거의 하지 않는 GPU(2.2장 "GPU 메모리를 점유한 유령 프로세스")를 찾는 기준이다. mean_util이 None이면 False.

빈 줄과 timestamp로 시작하는 헤더 줄은 건너뛴다. 키는 GPU 번호(int)다.