본문 바로가기 대메뉴 바로가기

테크니컬 스토리

아이티마야의 새로운 기술 뉴스를 만나보세요.
nvidia-smi 어디까지 확인 가능한가요?
등록일
2022.12.20
첨부파일
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 버전을 뜻합니다.

  • 두 번째로, 중간의 좌측에 해당하는 구역에 관해 설명드리겠습니다.

  • 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 <target gpu> -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 <Bud-Id>
  • 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의 사용량을 표시합니다.

    PLEASE WAIT WHILE LOADING...