[MLOps] GPU 모니터링 지표와 SM 활동률

GPU 사용률과 SM 활동률의 차이를 살펴보고, 운영 환경에서 수집할 지표의 의미와 선택 기준을 정리합니다.

GPU 사용률만으로 부족한 이유

GPU 사용률이 100%여도 처리량은 기대보다 낮을 수 있습니다.
특히 vLLM으로 sLLM을 배포하는 경우 99~100% 사용량을 흔히 볼 수 있습니다.
GPU 사용률과 처리량은 측정하는 대상이 다르기 때문입니다.

이번 글에서는 GPU 지표의 해석 기준과 현재 수집 중인 지표를 선택한 이유를 정리했습니다.

SM이란?

SM(Streaming Multiprocessor)는 GPU 안에서 여러 스레드의 명령을 실행하는 하드웨어 블록입니다.
GPU 하나는 여러 SM으로 구성되며 SM 하나와 CUDA 코어 하나는 다릅니다.

SM 활동률은 각 SM에 활성 warp가 있었던 시간 비율을 전체 SM에 걸쳐 평균한 값입니다.

SM이 100개인 GPU를 예로 들겠습니다.

같은 활동률이어도 작업이 배치된 방식과 실행 시간은 다를 수 있습니다.

SM 개수 확인

CUDA를 사용할 수 있는 PyTorch 환경에서는 장치 속성의 multi_processor_count로 SM 개수를 확인할 수 있습니다.
GPU 서버나 GPU 접근 권한이 있는 컨테이너에서 아래 명령을 실행합니다.

python3 - <<'PY'
import torch

for i in range(torch.cuda.device_count()):
    device = torch.cuda.get_device_properties(i)
    print(f"CUDA 장치 {i}: {device.name}, SM {device.multi_processor_count}개")
PY

우선 수집할 기본 지표

기본 운영 상태를 확인하려면 아래 GPU Metric부터 수집하는 구성을 권장합니다.

필드명은 기존 DCGM Exporter에서 사용하는 이름을 기준으로 했습니다.
설치 버전에 따라 지원 여부와 출력 이름이 다를 수 있으므로 /metrics에 나온 값을 확인합니다.

성능 분석에 추가할 지표

지표를 함께 읽는 방법

이 조합만으로 병목 원인이 확정되지는 않습니다.
LLM 서비스라면 tokens/s, 요청 처리량, 첫 토큰 지연시간도 같은 부하 조건에서 비교해야 합니다.

필요할 때 추가할 항목

현재 수집 중인 지표를 선택한 이유

현재 구성은 GPU 사용률, 메모리 사용량·여유량, 온도, 전력, Xid 오류 코드, ECC 이중 비트 오류 누계의 7개 지표를 수집하도록 설정했습니다.
GPU가 작업을 수행하고 있는지, 자원 여유가 있는지, 장비에 이상 징후가 있는지를 우선 확인하려는 구성입니다.

현재는 기본 지표로 GPU의 부하와 장비 상태를 확인합니다.
SM 활동률은 필수 수집 항목으로 두지 않고, GPU 사용률과 처리량 사이의 차이를 분석할 필요가 있을 때 추가로 검토할 계획입니다.
처리량은 tokens/s 같은 애플리케이션 지표로 함께 판단해야 합니다.

Reference