개요
Elastic Observability로 NVIDIA GPU 메트릭을 모니터링하는 방법 을 참고하여 작업하였습니다.
해당 서버는 Linux에서 NVIDIA CUDA가 설치되어 GPU가 세팅되어 있는 환경이다. 해당 GPU가 얼마만큼 사용되는지 nvidia-smi 명령어를 사용하면 알 수 있지만, cmd 창에서 일일히 확인하지 않고 kibana 등을 이용하여 시각화하기 위해서 GPU 성능 모니터링 ELK 를 탑재하였다 !
DCGM
DCGM (Data Center GPU Management) 툴은 NVIDIA GPU의 성능 및 상태를 실시간으로 모니터링하여 GPU의 온도, 전력 소비, 메모리 사용량, 그래픽 작업 부하 등의 데이터를 수집하고 분석할 수 있는 툴이다.
GPU와 관련한 데이터는 metricbeat에서 기본적으로 제공해주지 않기 때문에 따로 설정해주어야 한다.
이 세팅을 위해 소스코드(Go)에서 NVIDIA GPU 모니터링 도구를 빌드한다.
1. NVIDIA gpu-monitoring-tools를 빌드를 위해 Golang 설치
cd /tmp wget <https://golang.org/dl/go1.15.7.linux-amd64.tar.gz>
sudo mv go1.15.7.linux-amd64.tar.gz /usr/local/
cd /usr/local/
sudo tar -zxf go1.15.7.linux-amd64.tar.gz
sudo rm go1.15.7.linux-amd64.tar.gz
2. Github에 있는 NVIDIA gpu-monitoring-tools 설치
cd /tmp
git clone <https://github.com/NVIDIA/gpu-monitoring-tools.git>
cd gpu-monitoring-tools/
sudo env "PATH=$PATH:/usr/local/go/bin" make install
3. prometheus.yml 활성화 시키기
sudo metricbeat modules enable prometheus
4. Metric 데이터 내보내기
dcgm-exporter --address localhost:9090
# 출력 INFO[0000] Starting dcgm-exporter INFO[0000] DCGM successfully initialized!
INFO[0000] Not collecting DCP metrics: Error getting supported metrics: This request is serviced by a module of DCGM that is not currently loaded
INFO[0000] Pipeline starting
INFO[0000] Starting webserver
5. metricbeat 시작
# log 출력을 실시간으로 확인하며 바로 실행하는 명령어
sudo ./metricbeat -e
# cmd를 꺼도 실행되도록 백그라운드에서 실행
nohup sudo ./metricbeat -e &
6. GPU 모니터링 가능
/etc/dcgm-exporter/dcp-metrics-included.csv 에서 아래와 같이 GPU와 관련해 사용할 수 있는 데이터를 미리 확인해볼 수 있다. GPU의 온도, 사용량 등을 파악할 수 있겠다!
DCGM_FI_DEV_POWER_USAGE, gauge, Power draw (in W).
DCGM_FI_DEV_TOTAL_ENERGY_CONSUMPTION, counter, Total energy consumption since boot (in mJ).
# PCIE,,
# DCGM_FI_DEV_PCIE_TX_THROUGHPUT, counter, Total number of bytes transmitted through PCIe TX (in KB) via NVML.
# DCGM_FI_DEV_PCIE_RX_THROUGHPUT, counter, Total number of bytes received through PCIe RX (in KB) via NVML.
DCGM_FI_DEV_PCIE_REPLAY_COUNTER, counter, Total number of PCIe retries.
# Utilization (the sample period varies depending on the product),,
DCGM_FI_DEV_GPU_UTIL, gauge, GPU utilization (in %).
DCGM_FI_DEV_MEM_COPY_UTIL, gauge, Memory utilization (in %).
DCGM_FI_DEV_ENC_UTIL, gauge, Encoder utilization (in %).
DCGM_FI_DEV_DEC_UTIL , gauge, Decoder utilization (in %).
7. 키바나 대쉬보드
다음과 같이 GPU 성능을 모니터링할 수 있다. 아주 멋있다! 🤩
트러블 슈팅
1. x509: certificate signed by unknown authority
상황
개발 서버에 go 설치
github에서 gpu-monitoring-tools라는 모듈 clone
gpu-monitoring-tools 경로에서 sudo env "PATH=$PATH:/usr/local/go/bin" make install 명령어 실행
오류 코드
root@***:/tmp# cd gpu-monitoring-tools/
root@***:/tmp/gpu-monitoring-tools# sudo env "PATH=$PATH:/usr/local/go/bin" make install
cd pkg; go build
go: github.com/Masterminds/semver@v1.5.0: Get "<https://proxy.golang.org/github.com/%21masterminds/semver/@v/v1.5.0.mod>": x509: certificate signed by unknown authority
go: downloading github.com/gorilla/mux v1.8.0
go: downloading k8s.io/kubelet v0.20.2
go: downloading google.golang.org/grpc v1.35.0
go: downloading github.com/sirupsen/logrus v1.7.0
go: downloading github.com/urfave/cli/v2 v2.3.0
go: downloading github.com/Masterminds/semver v1.5.0
go: github.com/Masterminds/semver@v1.5.0: Get "<https://proxy.golang.org/github.com/%21masterminds/semver/@v/v1.5.0.mod>": x509: certificate signed by unknown authority
Makefile:31: recipe for target 'binary' failed
make: *** [binary] Error 1
root@***:/tmp/gpu-monitoring-tools#
관련 github 이슈
https://github.com/golang/go/issues/45569
https://github.com/golang/go/issues/45569
해당 이슈에서 같은 방법으로 명령어를 쳐본 결과 나도 아래와 같이 출력되었다.
root@pororosvr:/usr/local# openssl s_client -showcerts -connect storage.googleapis.com:443 http://ocsp.pki.goog/gts1c3 CA Issuers - URI:http://pki.goog/repo/certs/gts1c3.der X509v3 Subject Alternative Name: DNS:storage.googleapis.com X509v3 Certificate Policies: Policy: ~~ Policy: ~~~ CT Precertificate SCTs: Signed Certificate Timestamp: Version : v1 (0x0) Log ID : ~~~ Timestamp : Aug 7 13:25:18.774 2023 GMT Extensions: none Signature : ~~~ Signed Certificate Timestamp: Version : v1 (0x0) Log ID : ~~~ Timestamp : Aug 7 13:25:18.773 2023 GMT Extensions: none Signature : ecdsa-with-SHA256 ~~~ Signature Algorithm: sha256WithRSAEncryption ~~~
- 대략적인 해석??
- verify error:num=19:self signed certificate in certificate chain: "self signed certificate" 은 방화벽이나 중간 프록시가 인증서 연결을 검증하면서 자체 서명된 인증서를 사용하는 서버와의 연결을 허용하지 않는다는 가능성을 나타낼 수 있다.
- depth=2 C = US, ST = California, L = Los Altos, O = netSkope Inc, OU = Cert Management, CN = caadmin.netskope.com, emailAddress = certadmin@netskope.com: 이 부분은 인증서 체인의 일부를 나타냅니다. 여기서 언급된 **netskope.com**과 같은 조직의 이름은 방화벽 구성과 관련이 있을 수 있다.
- Issuer: C = US, ST = CA, L = Mountain View, O = Intuit, OU = 80c975da8527600ce4c6d21ba2e4c4bc, CN = ca.intuitprd.goskope.com, emailAddress = certadmin@netskope.com: 이 또한 방화벽이 서버와의 통신을 제한하고 있을 수 있음을 의미한다.
해결 방법??
github 이슈에서는 NetSkope(회사 방화벽)을 비활성화 해서 문제를 해결했다고 하였다. 회사 네트워크 관계자 분께 해당 오류를 공유드렸다.
해결 !!><><
역씨나 !!! 복호화 솔루션에서 차단되고 있었다.
SSL 복호화 솔루션 SSL은 통신단계에서 암호화해서 데이터 노출 방지 목적(스니핑 등)으로 만들어졌는데, 엔드포인트(PC/서버)에서만 데이터 확인이 가능하다고 한다. SSL복호화는 해당 데이터나 URL이 엔드포인트까지 도달하기 전에 복호화해서 데이터 안전여부 체크가 필요해서 나온 솔루션이라고 말씀해주셨다. 결론적으론 ! 우회처리해서 해결해주셨다. 🩷
2. 빌드 오류(Error getting device information: API version mismatch)
상황
gpu-monitoring-tools를 다운받았다.
datacenter-gpu-manager를 통해 dcgm-exporter를 이용해 메트릭을 내보내려는 상황.
오류 코드
root@***:/home/niceadmin# dcgm-exporter --address localhost:9090
INFO[0000] Starting dcgm-exporter
INFO[0000] DCGM successfully initialized!
INFO[0000] Not collecting DCP metrics: Error getting supported metrics: API version mismatch
FATA[0000] Error getting device information: API version mismatch
버전오류
<https://forums.developer.nvidia.com/t/dcgm-exporter-api-version-mismatch/146393/3>
오류 원인은 명백히 버전 때문이다. ㅠㅠㅠㅠㅠ
해결방법??
MakeFile을 확인하였다. 우선 Makefile이란 뭘까??
Makefile의 정의
- linux상에서 반복 적으로 발생하는 컴파일을 쉽게하기위해서 사용하는 make 프로그램의 설정 파일이다.
- Makefile을 통하여 library 및 컴파일 환경을 관리 할수 있다.
gpu-monitoring-tools 깃허브/Makefile 코드를 확인해보면 여러 버전들을 확인해볼 수 있었다.
DCGM_VERSION := 2.2.9
GOLANG_VERSION := 1.14.2
VERSION := 2.4.0
FULL_VERSION := $(DCGM_VERSION)-$(VERSION)
이후 명령어를 통해 datacenter-gpu-manager 패키지의 사용 가능한 버전 목록을 확인한다. 또는 여기 에서 확인할 수 있다.
apt-cache madison datacenter-gpu-manager
datacenter-gpu-manager도 위의 DCGM_VERSION과 맞추어 재설치해주었다.
sudo apt-get install -y datacenter-gpu-manager=2.2.9
해결!>< 왕뿌듯… 버전 오류는 항상 우릴 힘들게 해...
'INFRA' 카테고리의 다른 글
[API GATEWAY] KONG API Gateway -2 (0) | 2023.10.25 |
---|---|
[API GATEWAY] KONG API Gateway -1 (0) | 2023.10.23 |
[Docker] 도커를 공부하며.. 🐳 (2) | 2023.10.23 |
[ELK] Elastic Search ILM 정책 (+추가 에러 핸들링) (2) | 2023.09.25 |
[ELK] Docker 성능 모니터링: Metricbeat와 ELK 스택 (2) | 2023.09.11 |