nvidia-smi 어디까지 확인 가능한가요?
nvidia-smi로 GPU 서버를 모니터링하는 방법
nvidia-smi 어디까지 확인 가능한가요?
GPU 서버에서 GPU를 사용하기 위해서는 필수적으로 Nvidia driver라는 프로그램을 설치해야 합니다.
Nvidia driver는 아래의 URL에서 과거 버전별 / GPU 종류별로 다운로드가 가능합니다. 현재 사용하고 계시는 프로그램과의 호환성, GPU 종류에 따라서 적절한 것을 선택하시면 되겠습니다.
https://www.nvidia.co.kr/download/Find.aspx?lang=kr
리눅스에 nvidia driver를 설치하면 nvidia-smi 명령어를 사용할 수 있게 됩니다. nvidia-smi를 입력하면 아래와 같이 현재 장착된 GPU들의 상태를 모니터링할 수 있는데 이에 대해 좀 더 자세하게 설명해드리려고 합니다.
첫 번째로, 상단에 표시된 숫자들에 관해 설명해드리겠습니다. 이 숫자들은 왼쪽에서부터 nvidia-smi 버전, nvidia-driver 버전, nvidia driver와 같이 사용되기 권장하는 CUDA 버전을 뜻합니다.
nvidia-smi버전과 nvidia driver 버전은 항상 같은 값이 될 수밖에 없습니다. cuda version의 경우, 고객사 분들께서 가장 많이 걱정하고 착각하시는 부분인데 이것은 실제 CUDA 버전이 아니라 현재 사용되는 nvidia driver와 호환성 측면에서 어디까지나 “권장”되는 CUDA 버전이지 현재 설치된 CUDA 버전은 아닙니다.
현재 시스템에 설치된 CUDA 버전을 확인하고 싶으실 경우, 아래의 명령어를 입력하면 확인하실 수 있습니다.
/usr/local//bin/nvcc --version
두 번째로, 중간의 좌측에 해당하는 구역에 관해 설명드리겠습니다.
GPU라고 쓰인 부분의 0은 단순히 GPU에 매겨지는 번호인데, 컴퓨터는 모든 것을 0에서부터 카운트하기 때문에 1번 GPU를 0이라고 표시한 것입니다. 부착된 GPU가 여러 개일 경우, 맨 아래 숫자에 1을 더하면 쉽게 GPU의 총개수를 파악할 수 있습니다.
Fan 부분은 GPU에 부착된 팬이 돌아가는 속도를 보여줍니다.
Name 부분은 GPU 모델을 표시하는 부분인데 대표적으로 3090과 같이 모델명이 긴 경우, 뒷부분은 잘려 나가 잘 확인이 되지 않습니다. 그럴 경우 아래의 명령어를 입력하시면 모델명을 확인하실 수 있습니다.
nvidia-smi -L
Temp는 GPU의 온도를 섭씨로 표시합니다.
Perf 부분은 GPU 성능 수준을 표시한 것인데 성능 수준은 P0부터 P12까지 존재하며 P0에 가까울수록 성능이 높아짐을 의미합니다.
Persistence-M은 Persistence Mode를 의미합니다. GPU 관련 프로그램을 사용하기 위해선 GPU와 관련된 커널 모듈들이 활성화가 되어야 사용이 가능한데, Persistence Mode는 GPU 커널 모듈의 활성화 상태를 나타냅니다. 기본적으로 Off 모드이며, 이 상태에서는 평상시 GPU 커널 모듈이 해제되어있다가 GPU 관련 프로그램을 실행하면 그때 커널 모듈을 활성화합니다. 반면 On 모드일 경우, 항상 GPU 커널 모듈을 활성화하고 있어 latency를 최소화해 프로그램 사용 시 더 빠르게 반응할 수 있습니다. 아래의 명령어를 이용해 해당 기능을 활성화하실 수 있으며, 더 많은 자료를 원하실 경우 아래의 링크를 참고해 주시기 바랍니다.
https://docs.nvidia.com/deploy/driver-persistence/index.html
nvidia-smi -i -pm ENABLED
Pwr:Usage/Cap은 GPU가 최대 사용할 수 있는 전력 대비 현재 사용하고 있는 전력을 비교하여 표시합니다.
https://docs.nvidia.com/deploy/driver-persistence/index.html
세 번째로 중간의 가운데 부분에 관해 설명드리겠습니다.
Bud-Id는 GPU가 장착된 PCIe 버스의 주소를 표시한 것입니다. 이는 유지보수 시 GPU의 위치를 특정하는 데 매우 중요한 정보로 아래의 명령어와 같이 사용하면 문제가 발생한 GPU의 위치를 찾아내는 것이 가능합니다.
sudo dmidecode -t slot | grep -i
Memory-Usage는 말 그대로 GPU memory에 대해서 총 용량 대비 현재 사용량을 표시한 것입니다.
Disp.A는 모니터 화면 출력을 해당 GPU로 하고 있는지 아닌지를 표시해줍니다. 해당 GPU로 모니터를 출력하고 있으면, 해당 부분이 On으로 표시될 것이고, 그렇지 않을 경우, Off로 표시됩니다.
네 번째로 중간의 오른쪽 부분에 관해 설명드리겠습니다.
GPU-Util은 GPU의 사용량을 나타낸 것입니다.
Volatile Uncorr. ECC는 GPU가 데이터를 처리하는 과정에서 발생하는 에러들을 나타낸 수치입니다. 0부터 시작하여 에러가 발생할 경우 해당 수치가 점점 증가하며 어느 정도 쌓이게 될 경우, 시스템이 Hang 상태가 될 수 있습니다.
Compute M : Compute Mode의 약자로, GPU의 공유 접근 방법을 표시합니다. 4가지 모드가 있으며 아래의 명령어를 통해 변경할 수 있습니다. 단, Compute Mode는 재부팅 시 기본값인 Default Mode로 초기화됩니다. 자세한 정보는 아래 링크를 참조해 주시기 바랍니다.
https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html
0 : Default, 여러 스레드가 해당 GPU를 동시에 공유하면서 사용할 수 있습니다.
1 : exclusive Thread, 현재는 deprecated 되었습니다. 대신에 exclusive process를 사용하시기 바랍니다.
2 : prohibited, CUDA context를 사용하는 오직 하나의 스레드만이 해당 GPU를 사용할 수 있습니다. (독점)
3 : exclusive process, CUDA context를 사용하는 스레드는 해당 GPU를 사용할 수 없습니다.
MIG M : Multi Instance GPU Mode의 약자로, Ampere 아키텍처 기반의 GPU에서만 사용이 가능한 기능입니다. MIG는 하나의 GPU를 최대 7개의 GPU 인스턴스로 파티션을 생성하여 마치 복수의 GPU인 것처럼 사용할 수 있는 기술입니다. 해당 기능이 사용 가능한 GPU는 A100, H100, A30 등이 있습니다. 기본값은 비활성화되어있지만, 한 번 활성화하면 재부팅 후에도 최신 상태를 유지합니다. 자세한 정보는 아래 링크를 참고해 주시기 바랍니다.
https://docs.nvidia.com/datacenter/tesla/mig-user-guide/
https://www.nvidia.com/ko-kr/technologies/multi-instance-gpu/
마지막으로, Processes 항목을 설명하겠습니다. 맨 아래쪽에는 현재 GPU를 사용하고 있는 프로세스들의 목록이 출력됩니다.
GPU : 특정 프로세스가 사용하고 있는 GPU 번호를 표시합니다.
GIID : GIID는 GPU Instance ID의 약자로, MIG 기능이 활성화되었을 때 해당 속성에 값들이 새겨집니다. 참고로, MIG를 사용하기 위해서는 먼저 GI(GPU Instance)를 생성해야 합니다.
CIID : CIID는 Compute Instance ID의 약자로, GI가 생성되었을 때 각각의 GI에 대해 CI(compute Instance)를 1개씩 생성해야 합니다.
PID : 프로세스의 ID를 표시합니다.
Type : Type에는 3가지의 값이 있습니다.
G : Graphics의 G로, 그래픽을 사용하거나 video rendering을 위한 전문가용 3D 그래픽, 게임 등에서 사용되는 NVIDIA GPU의 graphic-mode를 사용 중임을 의미합니다.
C : Compute의 C로, GPU의 compute-mode를 사용함을 의미합니다. Tensor flow나 Pytorch 등을 사용하는 deep learning의 학습과 테스트할 때 주로 표시됩니다.
C+G : Compute+Graphic을 합친 것으로 compute-mode와 graphic-mode를 함께 사용함을 의미합니다.
Process name : 프로세스의 이름을 표시합니다.
GPU Memory Usage : 해당 프로세스가 점유하고 있는 GPU memory의 사용량을 표시합니다.
2022.12.20