[Nvidia] GPU driver, CUDA, 라이브러리 셋팅하기

2022. 12. 21. 00:52Developers 공간 [Basic]/Software Basic

728x90
반응형

GPGPU(General Purpose GPU)의 등장으로, 기존 GPU(Graphics Processing Unit)의 그래픽처리를 위한 기능 이외에 딥러닝 등의 범용 연산을 위한 장치로 많은 '가능성'을 만들게 되었습니다.

 

우리가 GPU와 함께 할 수 있는 기능이 많아졌지만, 때로는 GPU의 driver, CUDA 등의 셋팅을 하기 위해 많은 노력을 기울이곤 합니다.

이번엔 GPU의 하드웨어와 소프트웨어의 버전을 구분하고 셋팅을 하기 위한 정보를 정리해보고자 합니다.

 

GPU 셋팅과 더불어 아래 링크를 통해 GPU구조를 파악하실 수 있습니다.

https://tkayyoo.tistory.com/31

<구성>
1. 초기 셋팅하기
    a. GPU의 분류
    b. 구조를 통해 CUDA 버전 선택하기
    c. CUDA를 통해 Driver 선택하기
2. 라이브러리 셋팅하기
    a. cudnn
    b. cublas
    c. tensorRT
   d. pytorch

글효과 분류1 : 코드

글효과 분류2 : 폴더/파일

글효과 분류3 : 용어설명


 

1.  초기 셋팅하기

 

 


a. GPU의 분류

먼저 GPU의 architecture 별로 역사를 설명하고자 합니다. 기존에는 3차원 공간상의 정보를 2차원으로 렌더링 하기위한 '컴퓨터 그래픽 카드' 였던 GPU가 HPC(High-Performance Computing)용으로 제조되기 시작했습니다.

 

즉, 원래 그래픽을 위해 쓰이던 GPU는 Vertex Shader과 Pixel Shader 등을 통해 병렬처리 능력이 향상되다가 병렬처리 연산을 위한 CUDA 가 등장하면서 HPC에 쓰이기 시작한 것입니다.
** Vertex Shader : 정점 3차원의 위치(x, y, z)에 수학적인 연산을 함으로써 물체에 특별한 효과를 주는데 사용
** Pixel Shader : 렌더링 될 각각의 픽셀들의 색깔을 수학적으로 계산

 

아키텍처의 역사는 아래와 같습니다.

 

  • Nvidia Tesla(2008) : Nvidia의 3번째 GPU로 발명가 Nikola Tesla의 이름을 땄고, 자동차회사와는 무관합니다.
  • Nvidia Fermi(2011) : Shared 메모리의 용량이 늘고, SM 등 전체적으로 아키텍처가 개선되었습니다.
  • Nvidia Kepler (2012) : SM이 SMX라는 이름으로 변경되었으며, 그래픽연산보다는 HPC가 고려되기 시작했습니다.
    ** AlexNet(2012)
  • Nvidia Maxwell (2015) : 모바일 버전을 위해 최적화했습니다.
    ** GoogLeNet, VGG(2014)
  • Nvidia Pascal (2016) : 인공지능의 붐으로 GTC를 통해 HPC용으로 나아가기 위해 발표된 GPU 아키텍처입니다. 이때부터 HPC버전과 GP(Graphic)버전이 나뉘어 발표되었습니다. HPC버전에서는 GP버전과 다르게 FP16과 FP64를 지원합니다.
  • Nvidia Volta (2017) : INT8코어가 추가 되었으며, Mixed-Precision또한 도입되었습니다.
  • Nvidia Turing (2018) : 실시간 Ray Tracing, AI, 시뮬레이션 및 래스터화를 융합해 컴퓨터 그래픽을 근본적으로 변화
  • Nvidia Ampere (2021) : 게이머와 크리에이터를 위한 세계 최고 성능과 탄력성을 갖춘 데이터센터 및 그래픽 카드의 핵심
  • Nvidia Hopper (2022) : 성능이 대폭 향상됩니다.

b. 구조를 통해 CUDA 버전 선택하기

GPU는 아래 그림과 같이 Streaming Multiprocessors (SMs)으로 이루어져있습니다.

host CPU가 kernel grid에서 CUDA 프로그램을 실행하면, 각각의 GPU가 동시에 동작합니다.

[Multi-threaded CUDA Program with 2SM-GPU]

  • Cuda-core(기본) : High precision
    • 지원 : FP64, FP32, FP16, bfloat16, INT8
    • SM(Streaming Multiprocessor) : GPU는 SM의 집합으로 이루어져 있다.
      1. SM은 8개/32개의 SP(CUDA Core)로 이루어져 있다.
      2. 32개의 스레드단위로 워프(Warp)라는 단위로 불린다. 
      3. 16개의 스레드단위는 하프워프(HalfWarp)라고 한다.
      4. GPU는 SM 단위로 메모리를 공유한다
      5. ** SFU (Special Function Unit) : 특수함수를 구현
    • SP(Scalar Processor) : 4개의 스레드로 구성되어 있고, 실행한다.
  • Tensor-core : Low precision (Speed up) 
    • 지원 : FP64, TF32, bfloat16, FP16, INT8, INT4, INT1
    • 장점1. 4x4 MAC연산을 빠르게 할 수 있다.
    • 장점2. Mixed Precision (중간에 16bitx16bits+32bits 연산 등을 가능하게 해 손실되는 precision을 최소화)
  • DLA : 가속기
    • 지원 : FP16, int8
    • GPU Fallback : DLA를 사용하려고 했는데 지원이 안되는 layer라 GPU로 넘어가는 것
  • Compute Capability (== SM Version)
    • GPU 마다 어떤 종류의 SM을 가지고 어떤 아키텍처를 구성하고 있는지에 대한 기준입니다. 이 기준에 따라 현재 GPU가 어떤 feature를 지원하는 지 알 수 있습니다.
    • PTX(Parallel Thread Execution) ISA와 Cubin Object : CUDA application(.cu파일)이 컴파일되고 난 binary는 두가지의 form을 가지고 있습니다.
      • PTX : 커널(.cu)이 컴파일 되어 생기는 것으로, forward compatible한 assembly 혹은 ISA(Instruction Set Architecture)입니다. 이는 load time에 결국 아래의 cubin으로 컴파일 되어 kernel실행을 담당합니다. 컴파일 될 때의 compute capability 이상의 버전에서 모두 동작이 가능합니다.
      • Cubin : 컴파일 될 때의 compute capability "major revision"내의 "minor version"이상의 버전에서 동작이 가능합니다. 즉, compute capability 7.0으로 컴파일 된것은 7.5에서도 돌아 갈 수있지만, 8.x에서는 동작하지 못합니다.
      • Nvidia에서는 최종 바이너리는 공개하지 않고 virtual assembly라 할 수 있는 PTX ISA만을 공개합니다. 
    • CUDA Runtime : 해당 시스템의 GPU의 compute capability를 파악해 가장 잘 매칭되는 cubin 혹은 PTX 버전을 찾아, 이미 cubin이 존재하면 해당 binary를 실행하고, 존재하지 않으면, JIT(Just-In-Time) compiling을 통해 cubin을 생성합니다. 
      • 따라서 application에는 최소한 PTX에 대해 어떤 compute capability로 컴파일 되었는지에 대한 정보가 존재합니다.
      • CUDA Toolkit(CTK) version : software platform인 CUDA의 Toolkit version
      • compute_XX,  : PTX version, front-end compilation target, nvcc에서 "arch=compute_XX"처럼 쓰임.
      • sm_XX : cubin version과 PTX version 모두 명시할 수 있다, back-end compilation target, nvcc 에서 "code=sm_XX"처럼 쓰임,
      • nvcc로 컴파일 시 backend-target인 sm_XX가 binary에 꼭 담기며, PTX버전 compute_XX중 하나 이상이 같이 담깁니다.
    • 각 GPU 종류 별 Compute Capability 버전은 아래와 같습니다.
Hardware
Generation
GPU Compute
Capability
Compute
Capabilities
Cuda Toolkit
(CTK) Support
Hopper NVIDIA H100 (GH100) 9.x sm_90 >=11.8
Ada(Lovelace) GeForce RTX 4090,
RTX 4080,
RTX 6000,
Tesla L40
8.x sm_89 ?
Ampere Jetson AGX Orin, Drive AGX Orin sm_87(Orin) >=11.0
RTX 3080,GA102
RTX 3090, RTX A2000, A3000,
RTX A4000, A5000, A6000, A40, GA106
RTX 3060, GA104
RTX 3070, GA107
RTX 3050
RTX A2, A10, A16, A40
sm_86, 
A100
DGX-A100
A30
sm_80, 
Turing GTX 1660 Ti,
RTX 2060, RTX 2070, RTX 2080,
Titan RTX,
Quadro RTX 4000, Quadro RTX 5000, Quadro RTX 6000, Quadro RTX 8000, Quadro T1000/T2000,
Tesla T4
7.5 sm_75 >=10.0
Volta Jetson AGX Xavier,
Drive AGX Pegasus,
Xavier NX 
7.x sm_72 >=9.0
DGX-1 with Volta,
Tesla V100,
GTX 1180 (GV104),
Titan V,
Quadro GV100
sm_70, 
Pascal Integrated GPU(IGPU) - NVIDIA Drive PX2
Tegra (Jetson) TX2
6.x sm_62  >=8.0
GTX 1080, GTX 1070, GTX 1060, GTX 1050,
GTX 1030 (GP108), GT 1010 (GP108)
Titan Xp, Tesla P40, Tesla P4,
Discrete GPU(DGPU) on the NVIDIA Drive PX2
sm_61, 
Quadro GP100,
Tesla P100,
DGX-1 (Generic Pascal)
sm_60,
Maxwell Tegra (Jetson) TX1 / Tegra X1,
Drive CX,
Drive PX,
Jetson Nano
5.x sm_53  >=6.5
Quadro M6000 ,
GeForce 900,
GTX-970,
GTX-980,
GTX Titan X.
sm_52
Tesla/Quadro M series. sm_50,
Kepler Tesla K80   sm_37  ?
Tesla K20, K40 sm_35,  ?
Kepler architecture (e.g. generic Kepler, GeForce 700, GT-730). sm_30, ?
Fermi GeForce 400, 500, 600, GT-630.
Tesla C2050, C2070, C2075
  sm_20 ?
  • Compute Capability 버전 별로 가지고 있는 Feature Support 는 아래와 같습니다.
Feature Support Compute Capability
5.0
5.2
5.3 6.x 7.x 8.x 9.x
Atomic addition operating on 64-bit floating point values in global memory and shared memory (atomicAdd())   Yes
Half-precision floating-point operations: addition, subtraction, multiplication, comparison, warp shuffle functions, conversion   Yes
Bfloat16-precision floating-point operations: addition, subtraction, multiplication, comparison, warp shuffle functions, conversion   Yes
Tensor Cores   Yes
Mixed Precision Warp-Matrix Functions (Warp matrix functions)   Yes
Hardware-accelerated memcpy_async (Asynchronous Data Copies using cuda::pipeline)   Yes
Hardware-accelerated Split Arrive/Wait Barrier (Asynchronous Barrier)   Yes
L2 Cache Residency Management (Device Memory L2 Access Management)   Yes
DPX Instructions for Accelerated Dynamic Programming   Yes
Distributed Shared Memory   Yes
Thread Block Cluster   Yes
Tensor Memory Accelerator (TMA) unit   Yes

c. CUDA를 통해 Driver 선택하기

 

 

시스템을 구축하기 위해서는 dependency가 CUDA별로 지원되는 driver의 minimum version이 있기 때문에 두가지 방법 중 선택하면 됩니다.

  • 가장 높은 버전의 driver를 설치하고 나서 CUDA toolkit version을 선택한다.
  • 어떤 CUDA toolkit version이 필요한지를 결정하고, 해당 CUDA Toolkit에 맞게 driver를 선택한다. (적절한 버전 선택 가능)

사실은 가장 높은 driver를 설치하고 나서 CUDA를 선택하는 것이 직관적이라고 생각하겠지만, 저의 경우는 application을 위해 CUDA의 버전을 선택하는 경우가 많다보니, CUDA version이 이미 정해져있는 상태로 시스템을 셋팅하는 경우가 많아 위와 같이 두가지로 나누었습니다.

 

아래 표는 CUA 버전 별로 필요한 최소한의 Driver version을 명시해두었습니다.

  Minimum Required Driver Version

CUDA Toolkit Linux x86_64 Windows 
CUDA  3.0  195.36.15  
CUDA  3.1  256.40  
CUDA  3.2  260.19.26  
CUDA  4.0  270.41.19  
CUDA  4.1 285.05.33  
CUDA  4.2  295.41  
CUDA  5.0  304.xx  
CUDA  5.5  319.xx  
CUDA  6.0 331.xx  
CUDA  6.5  340.xx  
CUDA  7.0  >=346.46 >=347.62
CUDA  7.5 >=352.31 >=353.66
CUDA  8.0  >=367.48 >=369.30
CUDA  8.0   (GA2) >=375.26 >=376.51
CUDA  9.0  >=384.81 >=385.54
CUDA  9.1  >=390.46 >=391.29
CUDA  9.2 >=396.26 >=397.44
CUDA 9.2 (Update1) >=396.37 >=398.26
CUDA 10.0 >= 410.48 >=411.31
CUDA 10.1 >= 418.39 >=418.96
CUDA 10.2 >= 440.33 >=441.22
CUDA 11.0 (RC)  >= 450.36.06 >=451.22
CUDA 11.0 (GA) >=450.51.05 >=451.48
CUDA 11.0 (Update1) >=450.51.06 >=451.82
CUDA 11.1 (GA) >= 455.23 >=456.38
CUDA 11.1 (Update1) >=455.32 >=456.81
CUDA 11.2 (GA) >= 460.27.03 >= 460.82
CUDA 11.2 (Update1) >=460.32.03 >=461.09
CUDA 11.2 (Update2) >=460.32.03 >=461.33
CUDA 11.3 (GA, Update1) >= 465.19.01 >= 465.89
CUDA 11.4 (GA) >= 470.42.01 >= 471.11
CUDA 11.4 (Update1,2) >=470.57.02 >=471.41
CUDA 11.4 (Update3,4) >=470.82.01 >=472.50
CUDA 11.5 (GA) >= 495.29.05 >= 496.04
CUDA 11.5 (Update1,2) >= 495.29.05 >= 496.13
CUDA 11.6 (GA) >= 510.39.01 >=511.23
CUDA 11.6 (Update1,2) >= 510.47.03 >=511.65
CUDA 11.7 (GA) >= 515.43.04 >= 516.01
CUDA 11.7 (Update1) >= 515.48.07 >= 516.31
CUDA 11.8 (GA) >= 520.61.05 >= 520.06
CUDA 12.0 (GA) >= 525.60.13 >= 527.41

 

** 주의 : 고가의 GPU (특히 A100)은 nvswitch라는 것이 장착되어있습니다. 따라서 nvswitch를 위한 fabric manager를 설치해주어야 하는데 잘못 설치할 시 동작이 안될 수 있습니다. 

 

** NVSwitch : 단일 서버 node에서 8~16개의 GPU를 연결하는 switch 아키텍처로, 고성능 컴퓨팅에서 필요한 데이터 전송을 지원합니다. 이는 NVLink 인터페이스를 통해 여러개의 GPU가 연결되어있는 형태를 가집니다.

**MIG(Multi-Instance GPU) : 위와 다르게 하나의 GPU를 최대 7개의 독립된 instance로 분할 해 고유한 메모리, 캐시, stream을 통해 실행하는 것입니다. 위에서 언급한 Fabric manager는 MIG instance와 함께 동작 가능하지만, MIG가 enable되면 NVLink는 disable됩니다.

 

아래와 같이 설치한 nvidia driver와 fabric manager 버전을 맞춰서 설치해준 뒤 재실행하면 가능하게 할 수 있습니다.

sudo apt-get install cuda-drivers-fabricmanager-4xx

systemctl enable nvidia-fabricmagager
systemctl start nvidia-fabricmanager

systemctl status nvidia-fabricmanager.service

d. 설치 및 확인하기

그렇다면 Nvidia drvier와 CUDA toolkit 을 설치하는 방법을 살펴봅시다.

  • 드라이버 설치
    1. 미리 설치된 nvidia driver를 삭제합니다.
    2. GPU에 맞게 Driver를 다운 받습니다 : https://www.nvidia.co.kr/Download/index.aspx?lang=kr
    3. 리눅스의 Run-Level 을 multi-user.target(텍스트 기반)으로 변경하고 리부트하면 CLI 기반으로 변경됩니다.
      리눅스에 기본으로 탑재된 nvidia nouveau(누보) 드라이버 없이 설치를 하기 위해 그래픽 없이 설치하기 위함 입니다.
    4. 다운 받은 driver를 설치합니다.
    5. 그래픽을 다시 살려 GUI모드로 Run-Level을 변경해 다시 실행합니다.
    6. 설치를 확인합니다.
# 1. Driver 삭제
sudo apt-get --purge autoremove nvidia*

# 3. Run-level 변경
sudo systemctl set-default multi-user.target
sudo reboot

# 4.Install Driver
./NVIDIA-Linux-x86_64-XXX.XXX.XX.run

# 5. Run-level 변경
sudo systemctl set-default graphical.target
sudo reboot

# 6. 설치 확인
nvidia-smi
  • nvidia-smi 명령어에 대해서...

[https://kyumdoctor.tistory.com/2]

  • 1.Driver version : 사용하고 있는 GPU의 driver version
  • 2. Cuda Version : 사용하고 있는 Cuda version 이 아니다. 사용하고 있는 driver의 추천 cuda입니다
  • 3. GPU/FAN : GPU 숫자와, FAN의 사용률(Tesla 계열은 없음. Quadro, GeForce, RTX 등)
  • 4-1. Name : GPU 모델 이름
  • 4-2. Persistence-m : 파워 제한 off/on  (명령어 하기 참조)
  • 4-3. Temp(Temperature) : GPU 온도 확인
  • 4-4. Perf(Performance Mode) : P0(High Performance) ~ P12(Low Performance)
  • 4-5. Pwr:Usage/Cap(Power:Usage/Capacity) : gpu 현재 파워 사용량
  • 5-1. Bus-id : 메인보드에서의 위치 (domain:bus:device.function)
  • 5-2. Disp.A : 디스플레이에 GPU가 쓰이고 있는지 (Linux 설치했을 때 server/desktop 중 desktop 버전이면 화면 출력을 gpu card 로 하는 것이 좋다)
  • 5-3. Memory-Usage : GPU별 메모리 사용량
  • 6-1. GPU-Util(GPU Utilization) : 1/6초단위의 sample 간격 동안 kernel을 사용한 시간 비율. 데이터 read가 많을 수록 비율이 낮습니다.
  • 6-2. Volatile Uncorr. ECC(Error Collection Code) : 데이터 전송에서의 에러 count를 보여줍니다. N/A,On,Off가 있고, 실행시 성능이 떨어질 가능성이 있다. (명령어 하기 참조)
  • 6-3. Compute M(Compute Mode) : 공유 접근을 어떻게 할지에 대한 모드 입니다. (명령어 하기 참조)
    • 0. Default : GPU마다 여러개의 context를 실행가능
    • 1. Exclusive_thread : GPU마다 한개의 context를 실행가능
    • 2. Prohibited : GPU에서 compute 앱은 실행이 불가능
    • 3. Exclusive_Process : 1과 같다.
  • 7-1. GPU : GPU 인덱스
  • 7-2. PID : GPU를 실행 중인 Host의 process PID
  • 7-3. Type: 프로세스가 어떤 것을 위한 것인지
    • C: Compute
    • G: Graphics
    • C+G : Compute + Graphics 
  • 7-4. Process Name : 
  • 7-5. GPU Memory Usage : GPU 메모리 사용량
# 4-2
nvidia-smi -i 0 -pm 1 		# 0번 GPU 키기
nvidia-smi -i 0 -pl 200 	# 0번 파워 limit 셋팅
Nvidia-sim -i 0 -q 			# 0번 GPU 확인

# 6-2
Nvidia-smi -e 1				# Error Count 켜기

# 6-3
Nvidia-smi -c 0				# 공유 접근 모드 변경
  • CUDA ToolKit 설치
    1. 미리 설치된 cuda가 있는지 확인하고 기존의 cuda 가 있다면 삭제합니다.
    2. CUDA를 다운로드 합니다 : https://developer.nvidia.com/cuda-toolkit-archive
    3. CUDA를 설치 합니다.
    4. 환경 변수를 셋팅합니다.
    5. 설치를 확인합니다.
# 1. 기존 CUDA 삭제
ls /usr/local
sudo /usr/local/cuda/bin/cuda-uninstaller
sudo apt-get --purge autoremove cuda*

# 3. CUDA 설치
sudo ./cuda_XX.X.X_XXX.XX.XX_linux.run

# 4. 환경변수 변경
export CUDA_HOME=/usr/local/cuda
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${LD_LIBRARY_PATH}
export PATH=${CUDA_HOME}/bin:${PATH}
source ~/.bashrc

# 5. 설치확인
nvcc --version

 


2. 라이브러리 셋팅하기

 

위에 따라 Driver와 CUDA를 설치한 후에 다양한 라이브러리에 맞게, 작업환경을 설정하는 경우가 있습니다.

CUDA 및 driver를 변경해야하는 다양한 라이브러리 중 자주 부딪히게 되는 cuDNN, cuBlas, tensorRT, pyTorch 네가지를 살펴보도록 하겠습니다.

이외에도 NvBLAS(Built on Top of CuBLAS), CuFFT(CUDA Fast Fourier Transform Library), CuRand(CUDA RANDom), CuSprase(CUDA Sparse Matrix),  CuTensor(used for Tensor in Deep Learning application), 그리고 cuBLAS와 cuSparse 기반으로 Matrix Factorization과 삼각행렬 연산을 하는 CuSolver 등이 있지만, 가장 흔한 라이브러리 위주로 다뤄보겠습니다.


a. cuDNN

cuDNN(CUDA Deep Neural Network Library)은 nvidia 에서 제공하는 Deep Learning 라이브러리로, Convolution, Pooling, Activation 등 기본적인 함수들을 CUDA로 구현해놓은 라이브러리 입니다.

아래는 위에 설치한 CUDA의 버전 별로 지원하는 cuDNN의 버전을 정리해 보았습니다.

해당 cuDNN의 버전은 하기 사이트에서 다운로드가 가능한 CUDA의 버전과 매핑을 해놓았습니다. 따라서, 선택한 CUDA의 버전에 맞게 원하는 cuDNN의 버전을 선택하면 됩니다.

cuDNN CUDA version
6.5 7.0 7.5 8.0 9.0 9.1 9.2 10.0 10.1 10.2 11.0 11.1 11.2 11.4 11.5
v1 ?                            
v2 y y y y y y y y y y y y y y y
v3   y y y y y y y y y y y y y y
v4     y y y y y y y y y y y y y
v5       y                      
v5.1     y y                      
v6.0     y y                      
v7.0.4         y                    
v7.0.5       y y y                  
v7.1.2         y y y                
v7.1.3       y y y                  
v7.1.4       y y   y                
v7.2.1             y                
v7.3.0         y     y              
v7.4.1
~7.4.2
        y   y y              
v7.5.0
~7.5.1
        y   y y y            
v7.6.0
~7.6.4
        y   y y y            
v7.6.5         y   y y y y          
v8.0.1                   y y        
v8.0.2
~8.0.3
                y y y        
v8.0.4
~8.0.5
                y y y y      
v8.1.0
~8.1.1
                  y y y y    
v8.2.0
~8.2.1
                  y y y y y y
v8.2.2                   y       y  
v8.2.4                   y       y  
v8.3.0
~8.3.3
                  y         y
v8.4.0
~8.4.1
                  y y y y y y
v8.5.0                   y y y y y y
v8.6.0                   y y y y y y
  • cuDNN설치 방법
    1. 다운로드 : https://developer.nvidia.com/rdp/cudnn-archive
    2.  해당 라이브러리를 바로 복사해서 셋팅합니다.
      ** 주의 : reculsive 하게 복사하지 않으면 symbolic link가 깨지니 반드시 "cp -r"을 해줍니다.
# 2. 설치
sudo cp -r {DownloadFolder}/cuda/include/* /usr/local/cuda-10.X/targets/x86_64-linux/include
sudo cp -r {DownloadFolder}/cuda/lib64/* /usr/local/cuda-10.X/targets/x86_64-linux/lib

 


b. cuBlas

cuBLAS란 기존의 Fortran Library로 존재하는 BLAS(Basic Linear Algebra Subprogram)를 CUDA를 이용하여 구현해 놓은 Library입니다. 기본적인 선형대수학 함수들을 구현해놓았으며, 복소수계산과 고속 Matrix계산들을 구현해 놓았습니다.
** Fortran Library : 수학적 계산에 주로 사용하는 범용 프로그램 언어

  • cuBlas 설치 방법
    1. 다운로드(HPC) :https://developer.nvidia.com/hpc-sdk
    2. 설치를 실행합니다 : 설치 위치를 정하게 되는 데 default인 "/opt/nvidia/hpc_sdk"라고 가정하겠습니다.
    3. 설치 위치로 이동합니다.
    4. 복사해서 셋팅합니다
// 2. 설치 실행
{DownloadedFolder}/install

// 3. 설치 위치로 이동
cd /opt/nvidia/hpc_sdk

// 4. 설치
cp -r Linux_x86_64/23.1/math_libs/12.0/targets/x86_64-linux/include/cublas* /usr/local/cuda-10.X/targets/x86_64-linux/include
cp -r Linux_x86_64/23.1/math_libs/12.0/targets/x86_64-linux/lib/libcublas* /usr/local/cuda-10.X/targets/x86_64-linux/lib

c. tensorRT

tensorRT란 딥러닝 Inference를 위한 최적화 라이브러리입니다. pyTorch와 Tensorflow등 다양한 딥러닝 프레임워크를 활용해 학습한 결과를 활용해 최적화된 Inference를 하기위해 주로 활용하며, 자세하게는 아래의 글을 참조하실 수 있습니다.

https://tkayyoo.tistory.com/11

 

Linux기반의 TensorRT 가장 최신GA버전 기준으로, cuda와 가능한 매핑을 아래 정리했습니다. (2023/03/14 기준)

** GA(General Available) :최신은 아니지만 가장 안정적으로 지원되는 버전

** RC(Release Candidate) : Release 직전 상태의 버전

** EA(Early Access) : 미완성이지만 가장 최신의 feature를 사용할 수 있는 버전

 

역시나 CuDNN과 같이 선택한 CUDA버전에 맞게 원하는 버전을 선택하여 설치하면 됩니다.

TRT
CUDA version
7.5 8.0 9.0 9.1 9.2 10.0 10.1 10.2 11.0 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8
v1.0 V V                              
v2.1 V V                              
v3.0   V V V                          
v4.0   V V   V                        
v5.0     V     V                      
v5.1     V     V V                    
v6.0     V     V V V                  
v7.0     V     V   V                  
v7.1               V V                
v7.2.0                 V                
v7.2.1               V V V              
v7.2.2               V V V V            
v7.2.3               V V V V            
v8.0               V V V V V          
v8.2               V V V V V V V      
v8.4               V V V V V V V V V  
v8.5               V V V V V V V V V V
# 2. 설치
sudo cp -r {DownloadFolder}/targets/x86_64-linux-gnu/include/* /usr/local/cuda-10.X/targets/x86_64-linux/include
sudo cp -r {DownloadFolder}/targets/x86_64-linux-gnu/lib/* /usr/local/cuda-10.X/targets/x86_64-linux/lib

 


d. pyTorch

pyTorch는 딥러닝을 학습하기 위한 딥러닝 프레임워크입니다.

  • pyTorch의 경우, 거의 최종적으로 선택하고 싶은 라이브러리에 속합니다. 따라서, cuDNN, CUDA버전 등을 미리 알고 학습환경을 구축하는 것이 좋습니다.
  • 참조 사이트 : https://pypi.org/project/torch/
  • 예를 들어, torch1.13.1의 경우 아래와 같이 나와있습니다.
    • If you want to compile with CUDA support, install the following (note that CUDA is not supported on macOS)
      NVIDIA CUDA 10.2 or above
      NVIDIA cuDNN v7 or above
      Compiler compatible with CUDA
  • torch 설치 : 이미 아시겠지만 아래와 같이 설치합니다.
pip3 install torch==X.X.X
  • 설치 후에 아래 명령어들을 통해, 구성 환경을 다시 확인 가능합니다.
import torch
from torch.utils.collect_env import get_running_cuda_version, run

print("Get running cuda version : " + str(get_running_cuda_version(run)))
# example : 11.1.105

print("torch cuda check : " + str(torch.cuda.is_available()))
# example : True

print("torch cuda device count : " + str(torch.cuda.device_count()))
# example : 2

print("torch cuda device current : " + str(torch.cuda.current_device()))
# example : 0

print("torch cuda device name : " + str(torch.cuda.get_device_name(0)))
# example : Tesla V100-SXm2-32GB

<결론>

  • Top Down 방식 (필자가 주로 사용)
    1. 기본 : Driver를 최신으로 선택하고, 내 GPU에서 지원하는 CUDA의 버전을 확인해둡니다.
    2. 쓰고 싶을 라이브러리를 선택
    3. 해당 라이브러리를 사용하기 위한 최소~최대의 CuDNN, CUDA version 확인
      ** 보통 너무 최신인 경우 업데이트가 안 되어있고, 너무 하위인 경우 지원이 끊긴 경우가 많습니다.
    4. 해당 범위의 CUDA가 내 GPU에서 가능하다면, 선택한 CUDA를 설치
    5. CuDNN, TensorRT등은 CUDA와 연결해서 선택 후 설치합니다.
  • Bottom Up 방식
    1. 기본 : Driver를 최신으로 선택하고, 내 GPU에서 지원하는 CUDA의 버전을 확인해둡니다.
    2. 지원하는 CUDA중 너무 높지 않은 버전으로 선택 후 설치합니다.
    3. CuDNN, TensorRT등은 CUDA와 연결해서 선택 후 설치합니다.
    4. 해당 CUDA와 CuDNN등이 지원되는 라이브러리의 버전을 선택하여 설치합니다.

<첨언>

필자는 Top-Down 방식으로 사용하고 싶은 라이브러리에 맞게 Local은 구성하므로, 지원하는 CUDA의 버전 내에서 CUDA나 기타 라이브러리는 Docker를 활용해 라이브러리에 맞게 구축합니다.

Docker를 활용해 작업환경을 셋팅하는 내용에 대해 추후에 업데이트 하겠습니다.


https://89douner.tistory.com/159

https://nanxiao.gitbooks.io/cuda-little-book/content/posts/compute-capability.html

https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/

https://comsys-pim.tistory.com/6

https://docs.nvidia.com/deploy/cuda-compatibility/index.html

https://docs.nvidia.com/cuda/ampere-compatibility-guide/

https://docs.nvidia.com/deeplearning/tensorrt/support-matrix/index.htm

 

728x90
반응형