개발일지와 메모사이
AMD GPU 완전 모니터링 환경 구축 가이드
딸기카레
2025. 7. 7. 13:49
AMD 그래픽 드라이버가 설치된 상태에서 GPU의 온도, 전압, 메모리, 클럭 등을 완전하게 모니터링할 수 있는 환경을 구축하는 방법이다.
전제 조건
- AMD GPU 드라이버(AMDGPU)가 설치되어 있어야 함
- Ubuntu 22.04 LTS 또는 24.04 LTS 권장
- 사용자가 video, render 그룹에 속해야 함
1. 필수 패키지 설치
# 패키지 목록 업데이트
sudo apt update
# 필수 모니터링 도구 설치
sudo apt install -y radeontop lm-sensors mesa-utils
# 추가 유틸리티 설치 (선택사항)
sudo apt install -y htop nvtop
2. 사용자 권한 설정
# 현재 사용자를 video, render 그룹에 추가
sudo usermod -a -G video,render $USER
# 그룹 변경 적용을 위해 로그아웃/로그인 또는 다음 명령어 실행
newgrp video
newgrp render
# 권한 확인
groups
3. GPU 장치 확인
# GPU 인식 확인
lspci | grep VGA
# AMDGPU 드라이버 로드 확인
lsmod | grep amdgpu
# DRM 장치 확인
ls -la /dev/dri/
# GPU 카드 번호 확인 (보통 card0 또는 card1)
ls -la /sys/class/drm/ | grep card
4. 센서 초기화 및 설정
# 센서 감지 및 설정
sudo sensors-detect --auto
# 센서 모듈 로드
sudo modprobe k10temp # AMD CPU 센서 (선택사항)
# 센서 작동 확인
sensors
5. GPU 모니터링 권한 설정
# GPU 장치 파일 권한 확인 (card 번호는 실제 환경에 맞게 조정)
ls -la /dev/dri/card*
# 필요시 권한 설정 (일반적으로는 불필요)
# sudo chmod 644 /sys/class/drm/card*/device/gpu_busy_percent
# sudo chmod 644 /sys/class/drm/card*/device/mem_info_*
6. GPU 카드 번호 자동 감지
# GPU 카드 번호를 자동으로 찾는 함수
find_gpu_card() {
for card in /sys/class/drm/card*; do
if [ -f "$card/device/gpu_busy_percent" ]; then
echo "$(basename $card)"
return
fi
done
echo "card0" # 기본값
}
# 사용법
GPU_CARD=$(find_gpu_card)
echo "GPU Card: $GPU_CARD"
7. 모니터링 스크립트 생성
A. 기본 모니터링 스크립트
# ~/gpu_monitor.sh 파일 생성
cat > ~/gpu_monitor.sh << 'EOF'
#!/bin/bash
# GPU 카드 자동 감지
find_gpu_card() {
for card in /sys/class/drm/card*; do
if [ -f "$card/device/gpu_busy_percent" ]; then
echo "$(basename $card)"
return
fi
done
echo "card0"
}
GPU_CARD=$(find_gpu_card)
GPU_PATH="/sys/class/drm/$GPU_CARD/device"
echo "=== AMD GPU 모니터링 ==="
echo "GPU Card: $GPU_CARD"
echo
while true; do
clear
echo "=== AMD GPU Status $(date) ==="
echo
# GPU 사용률
if [ -f "$GPU_PATH/gpu_busy_percent" ]; then
echo "GPU Usage: $(cat $GPU_PATH/gpu_busy_percent)%"
fi
# VRAM 정보
if [ -f "$GPU_PATH/mem_info_vram_used" ] && [ -f "$GPU_PATH/mem_info_vram_total" ]; then
vram_used=$(($(cat $GPU_PATH/mem_info_vram_used) / 1024 / 1024))
vram_total=$(($(cat $GPU_PATH/mem_info_vram_total) / 1024 / 1024))
echo "VRAM: ${vram_used}MB / ${vram_total}MB"
fi
# 온도, 전압, 전력 정보
echo
sensors | grep -A 20 amdgpu
# GPU 클럭
echo
echo "GPU Clock:"
cat $GPU_PATH/pp_dpm_sclk 2>/dev/null | grep "*" || echo "N/A"
echo "Memory Clock:"
cat $GPU_PATH/pp_dpm_mclk 2>/dev/null | grep "*" || echo "N/A"
sleep 1
done
EOF
# 실행 권한 부여
chmod +x ~/gpu_monitor.sh
B. 멀티 터미널 모니터링 스크립트
# ~/multi_gpu_monitor.sh 파일 생성
cat > ~/multi_gpu_monitor.sh << 'EOF'
#!/bin/bash
# GPU 카드 자동 감지
find_gpu_card() {
for card in /sys/class/drm/card*; do
if [ -f "$card/device/gpu_busy_percent" ]; then
echo "$card"
return
fi
done
echo "/sys/class/drm/card0"
}
GPU_PATH=$(find_gpu_card)
GPU_CARD=$(basename $GPU_PATH)
echo "AMD GPU 멀티 터미널 모니터링 시작"
echo "GPU Card: $GPU_CARD"
echo
echo "다음 명령어들을 각각 다른 터미널에서 실행하면 된다:"
echo
echo "# 터미널 1: 실시간 GPU 사용률"
echo "radeontop"
echo
echo "# 터미널 2: 온도, 전압, 전력, VRAM 모니터링"
echo "watch -n 1 'sensors | grep -A 20 amdgpu'"
echo
echo "# 터미널 3: GPU 클럭 모니터링"
echo "watch -n 1 'echo \"GPU Clock:\" && cat $GPU_PATH/device/pp_dpm_sclk | grep \"*\" && echo \"Memory Clock:\" && cat $GPU_PATH/device/pp_dpm_mclk | grep \"*\"'"
echo
echo "# 터미널 4: 통합 센서 및 VRAM 정보"
echo "watch -n 1 'sensors && echo \"VRAM: \$(($(cat $GPU_PATH/device/mem_info_vram_used) / 1024 / 1024))MB / \$(($(cat $GPU_PATH/device/mem_info_vram_total) / 1024 / 1024))MB\"'"
echo
EOF
# 실행 권한 부여
chmod +x ~/multi_gpu_monitor.sh
8. 모니터링 환경 테스트
# 1. 기본 기능 테스트
echo "=== 기본 기능 테스트 ==="
# GPU 인식 테스트
echo "GPU 인식:"
lspci | grep VGA
# radeontop 테스트
echo "radeontop 실행 테스트 (5초간):"
timeout 5 radeontop || echo "radeontop 실행 실패"
# sensors 테스트
echo "Sensors 테스트:"
sensors | grep -A 5 amdgpu || echo "AMD GPU 센서 정보 없음"
# GPU 정보 접근 테스트
echo "GPU 정보 파일 접근 테스트:"
for file in gpu_busy_percent mem_info_vram_total mem_info_vram_used pp_dpm_sclk pp_dpm_mclk; do
if find /sys/class/drm/card*/device/ -name "$file" -exec cat {} \; 2>/dev/null | head -1 >/dev/null; then
echo "✅ $file 접근 가능"
else
echo "❌ $file 접근 불가"
fi
done
9. 사용법
통합 모니터링 실행
# 하나의 터미널에서 모든 정보 보기
~/gpu_monitor.sh
멀티 터미널 모니터링 실행
# 명령어 출력
~/multi_gpu_monitor.sh
# 출력된 명령어들을 각각 다른 터미널에서 실행하면 됨
개별 모니터링 명령어
# 터미널 1: 실시간 GPU 사용률
radeontop
# 터미널 2: 온도, 전압, 전력, VRAM 모니터링
watch -n 1 'sensors | grep -A 20 amdgpu'
# 터미널 3: GPU 클럭 모니터링
watch -n 1 'echo "GPU Clock:" && cat /sys/class/drm/card*/device/pp_dpm_sclk | grep "*" && echo "Memory Clock:" && cat /sys/class/drm/card*/device/pp_dpm_mclk | grep "*"'
# 터미널 4: 통합 센서 및 VRAM 정보
watch -n 1 'sensors && echo "VRAM: $(($(cat /sys/class/drm/card*/device/mem_info_vram_used) / 1024 / 1024))MB / $(($(cat /sys/class/drm/card*/device/mem_info_vram_total) / 1024 / 1024))MB"'
10. 문제 해결
GPU 카드가 card0이 아닌 경우
# 실제 GPU 카드 번호 확인
ls -la /sys/class/drm/ | grep card
# 명령어에서 card* 부분을 실제 카드 번호로 변경
# 예: card1인 경우
watch -n 1 'echo "GPU Clock:" && cat /sys/class/drm/card1/device/pp_dpm_sclk | grep "*"'
권한 문제가 발생하는 경우
# 사용자 그룹 재확인
groups
# 로그아웃 후 다시 로그인 또는
newgrp video
newgrp render
센서 정보가 나오지 않는 경우
# 센서 다시 감지
sudo sensors-detect --auto
# 센서 모듈 재로드
sudo modprobe k10temp
sudo systemctl restart lm-sensors
11. 모니터링 정보 해석
온도 정보
- edge: GPU 다이 가장자리 온도 (일반적인 GPU 온도)
- junction: GPU 핫스팟 온도 (가장 뜨거운 부분)
- mem: GPU 메모리 온도
임계 온도
- edge crit: 보통 100°C (안전 임계점)
- junction crit: 보통 110°C (핫스팟 임계점)
- mem crit: 보통 105°C (메모리 임계점)
전력 정보
- PPT: 현재 전력 소비
- cap: 최대 전력 한계 (TDP)
이제 AMD GPU의 모든 주요 정보를 실시간으로 모니터링할 수 있다.