Quiz: reading GPU metrics
한국어 원문으로 표시합니다.
"할당은 다 나갔는데 사용률은 한 자릿수" 라는 상태를 숫자로 증명하려면 무엇이 필요한가?
- 쿠버네티스 API 의 할당량과 DCGM Exporter 의 사용률을 함께 봐야 한다 — 둘은 다른 시스템에 산다
- DCGM_FI_DEV_GPU_UTIL 하나면 충분하다 — 이 지표는 할당량 대비 사용률로 정규화돼 나온다
- kubectl top node 의 GPU 칸을 보면 된다 — kubelet 이 확장 자원의 사용률도 함께 보고한다
- 노드 status 의 allocatable 과 capacity 를 비교하면 된다 — 그 차이가 실사용량이다
DCGM 지표에서 GPU 의 전체 메모리 크기를 얻는 보통의 방법은?
- DCGM_FI_DEV_FB_TOTAL 이라는 전용 지표를 읽는다
- DCGM_FI_DEV_FB_USED 와 DCGM_FI_DEV_FB_FREE 를 더한다
- 노드 라벨 nvidia.com/gpu.memory 의 값을 카드 수로 나눈다
- DCGM_FI_PROF_DRAM_ACTIVE 의 최대값을 관측 구간에서 찾는다
MIG 를 켠 클러스터의 대시보드에서 GPU 합계가 물리 장수보다 크게 나오는 이유는?
- MIG 인스턴스마다 독립된 exporter 파드가 떠서 같은 노드를 여러 번 보고하기 때문이다
- MIG 를 켜면 카드 한 장의 확장 자원 광고량이 인스턴스 수만큼 곱해져 노드 status 가 부풀기 때문이다
- 같은 지표가 카드 수준과 GPU 인스턴스 수준 양쪽으로 나오는데 그것을 그대로 합산했기 때문이다
- MIG 인스턴스의 지표는 백분율이 아니라 0에서 7 사이의 슬라이스 번호로 나오기 때문이다
ServiceMonitor 의 interval 을 30s 가 아니라 30 으로 적었을 때 일어나는 일은?
- 오퍼레이터가 초 단위로 해석해 30초 간격으로 정상 동작한다
- 값이 무시되고 프로메테우스의 전역 기본 간격이 적용된다
- 오퍼레이터 파드가 재시작 루프에 빠져 모든 대상 수집이 멈춘다
- API 서버가 스키마의 타입 불일치로 적용 자체를 거절한다
타임슬라이싱으로 슬롯을 다섯 개 만든 노드에서 '슬롯별 GPU 사용률' 을 대시보드에 그리려 한다. 무엇이 문제인가?
- 그런 값은 없다 — 시분할은 카드를 나누지 않으므로 지표는 여전히 카드 하나짜리 줄로 나온다
- 값은 있지만 슬롯 라벨이 UUID 뒤에 붙어 있어 정규식으로 잘라내야만 쓸 수 있다
- 값은 있지만 슬롯 수만큼 나눠서 보고되므로 다섯을 곱해야 실제 사용률이 된다
- 값은 있지만 exporter 의 수집 간격이 슬라이스 주기보다 길어 항상 0으로 보고된다
'임자 없는 메모리 점유' 를 경보로 거는 것이 값어치 있는 이유는?
- 메모리 사용량이 높은 카드는 곧 온도 임계에 닿아 하드웨어 손상으로 이어지기 때문이다
- 프로메테우스의 시계열 카디널리티가 커지는 것을 막아 저장소를 아낄 수 있기 때문이다
- 죽은 프로세스가 컨텍스트를 놓지 않은 상태라, 카드가 멀쩡한 채로 아무에게도 안 돌아가기 때문이다
- 쿠버네티스 스케줄러가 그 카드를 자동으로 회수하려면 경보가 먼저 떠 있어야 하기 때문이다