300x250

논문 구현을 해볼 때마다 PyTorch버전에 따라 필요한 CUDA 버전이 다르고, 버전이 서로 맞지 않아 시간을 낭비하는 경우가 많았다. 이를 해결하기 위해 (내가 썼던..) 여러 글을 참조해서 docker 컨테이너를 만들어줬는데, 과정을 축약해서 하나의 글로 정리해보려 한다.

이미지 빌드, 컨테이너 생성 등의 긴 과정은 생략하고, 간단하게 필요한 PyTorch 버전에 따라 CUDA 버전을 찾는 과정 까지를 다룬다.

서버에서 맞는 버전을 찾고, 컨테이너를 생성한 후에 설정까지 해주는 전체 과정은 다음 글을 참조하자.

(링크 추후에 추가)

 

 

목차

     

     

     

     

     

     

     

    Finding Version

     

    전체 과정을 요약하면 다음과 같다.

    1. nvidia-smi로 gpu 정보 얻기 (모델명, driver 버전 등)
    2. Driver version에 따른 사용 가능한 CUDA 버전 알아보기
    3. GPU Capability에 따른 사용 가능한 CUDA 버전 알아보기
    4. 필요한 PyTorch 버전에 따른 CUDA 버전 알아보기

     

    nvidia-smi

     

    현재 사용하는 GPU 정보를 알기 위해서는 'nvidia-smi' 명령어를 사용한다.

    (서버는 리눅스(Ubuntu 20.04)라 가정한다.)

     

    먼저, GPU의 모델명을 출력해주는 명령어는 아래와 같다.

    nvidia-smi --query | fgrep 'Product Name'

     

     

    GPU Product Name Result

    결과를 보면, 지금 사용중인 서버는 GPU 'RTX 3090' 7개가 있다는 것을 알 수 있다.

     

    다음으로, 전반적인 GPU 정보를 알려주는 명령어는 아래와 같다.

    nvidia-smi

     

    nvidia-smi result

     

    nvidia-smi 명령어가 보여주는 정보는 다음과 같다. CUDA 버전과 관련된 것은 빨간색으로, GPU 사용 중에 참조할 부분은 파란색으로 강조하여 표시했다.

    1. Drivier Version : Nvidia GPU의 driver version을 나타낸다.
    2. CUDA Version : 현재 사용중인 driver와 호환이 잘 되는 (추천하는?) CUDA의 버전으로, 가능한 최저, 최고 버전이 아니므로 주의해야 한다.
    3. GPU Fan : GPU의 번호와 fan이 장착된 GPU의 fan 성능을 %로 표시해준다. (Fan 없으면 N/A (Not Available)로 표시됨)
    4. Name, Temp, Perf, Persistence-M, Pwr
      • Name : GPU의 모델명
      • Temp : GPU의 현재 온도(사용 중일 경우, 70~80도가 적정 온도)
      • Perf : performance(P0~P12까지 있으며, 숫자가 작아질수록 성능이 좋은 상태)
      • Persistence-M : persistence mode(on 시 power limit 설정 가능, default는 off)
      • Pwr : GPU의 현재 전력 사용량/ 최대 용량
    5. Bus-Id, Disp.A, Memory-Usage
      • Bus-Id : 메인 보드의 PCI slot에 지정된 Bus-ID (사용하는 GPU 번호와 PCI slot을 매칭할 수 있음)
      • Dishp.A : 리눅스 설치 시 desktop version, server version를 설정할 수 있는데, desktop version인 경우 GPU로 화면 출력을 한다. 화면 출력을 하는지의 엽를 나타내며, 서버 버전일 경우 무시하면 된다.
      • Memory-Usage : 현재 사용중인 GPU의 메모리와 GPU의 총 메모리를 나타낸다.
        • MiB : Mega binary byte의 약자로, 1 Megabyte는 실제 1000^2 byte를 의미하는데, 실제 2진법을 사용한 경우 혼동을 막고자 i를 추가하여 2진법으로 나타낸다. 즉, 1 Mega binary byte는 1024^2 byte이다.
    6. GPU-Util : GPU의 현재 사용량을 %로 나타낸다.
    7. Processes : GPU 사용을 시작하면 현재 사용 정보를 알려준다.
      • GPU : GPU 번호를 나타낸다.
      • Type : GPU의 2가지 타입으로, G 또는 C의 값을 갖는다.
        • G : Graphics, 그래픽을 사용하는 경우이다. (graphic mode)
        • C : Compute, CUDA library로 병렬 계산을 진행하는 경우를 나타낸다. (compute mode)
        • C+G : compute-mode와 graphic-mode를 함께 사용하는 process를 나타낸다.

     

    추가로, 학습 과정 등에 gpu 사용 상태를 알아보기 위해 다음과 같이 0.5초마다 값들이 갱신되도록 할 수 있다.

    watch -d -n 0.5 nvidia-smi

     

     

     

     

    Available CUDA Version by the GPU's Driver Version and Capability

     

    Nvidia driver 버전에 따른 사용 가능한 CUDA 버전은 다음 링크에서 제공한다.

    https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#cuda-major-component-versions

     

    Release Notes :: CUDA Toolkit Documentation

    Beginning in 2022, the NVIDIA Math Libraries official hardware support will follow an N-2 policy, where N is an x100 series GPU.

    docs.nvidia.com

     

    링크에서 다음 표를 제공한다.

    CUDA Toolkit and Corresponding Driver Versions

     

    하지만, 하나 더 고려해야 할 부분이 있다.

    다음 링크에서, GPU의 capability에 따라 사용 가능한 CUDA 버전을 따로 제공한다. (왜 이렇게 필요한 정보를 다 나눠놨는지 모르겠다..)

    https://en.wikipedia.org/wiki/CUDA

     

    CUDA - Wikipedia

    From Wikipedia, the free encyclopedia Jump to navigation Jump to search Parallel computing platform and programming model CUDA (or Compute Unified Device Architecture) is a parallel computing platform and application programming interface (API) that allows

    en.wikipedia.org

     

    조금 길어서 일부만 보자면, 아래와 같다.

    GPUs Supported (1)

     

    GPUs Supported (2)

     

    예를 들어, nvidia-smi 명령어에서 내가 사용중인 GPU의 driver version이 470.42.01이었으므로, GPU에서 CUDA 11.4.0 GA 이전 버전의 CUDA는 모두 사용이 가능하다. 그리고 모델명 3090의 Capability는 위 표에서 8.6이고, 이에 따라 CUDA 11.1부터 사용이 가능하다. 즉, 결론적으로 CUDA 11.1 ~ 11.4.0 GA 버전을 사용할 수 있다.

     

     

     

     

    PyTorch Version corresponding to CUDA Version

     

    CUDA 버전을 굳이 찾아보는 이유는 PyTorch 버전과의 호환성 때문이다.

    CUDA 버전에 따라 지원하는 PyTorch 버전은 다음 링크에서 알 수 있다.

    https://pytorch.org/get-started/previous-versions/

     

    PyTorch

    An open source machine learning framework that accelerates the path from research prototyping to production deployment.

    pytorch.org

     

    예를 들어, PyTorch 1.9.0 버전을 지원하는 CUDA 버전은 아래 사진과 같이 검색하여볼 수 있다.

     

     

    만약 (이전 예시에 이어서) RTX 3090에서 PyTorch 1.9.0을 사용해야 한다면, CUDA 11.1 ~ 11.4.0 GA 중 11.1 또는 11.3 버전을 사용해야 할 것이다.

     

    그런데, 위 사이트에 CUDA 버전이 명시되지 않은 경우가 있다. 예를 들어, CUDA 11.4의 경우에는 cudatoolkit의 버전만 11.4로 맞춰 'conda install pytorch==1.9.0 torchvision==0.10.0 torchaudio==0.9.0 cudatoolkit=11.4 -c pytorch'와 같은 명령어로 다운받을 경우, 다음과 같은 'PackagesNotFoundError'에러가 뜬다.

     

    PackagesNotFoundError when downloading pytorch

     

    이럴 때에는 '-c nvidia'와 '-c conda-forge'를 추가해주면 해결된다.

    # pytorch 1.12.1을 받고 싶은 경우
    conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit==11.4 -c pytorch -c nvidia -c conda-forge

     

    728x90
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기