Computing

jhDNN - 1 : cuDNN 소개 및 설치 (Ubuntu 18.04) 본문

Deep Learning/jhDNN

jhDNN - 1 : cuDNN 소개 및 설치 (Ubuntu 18.04)

jhson989 2022. 4. 19. 20:35

cuDNN

cuDNN은 NVIDIA CUDA® Deep Neural Network (cuDNN) library로, 딥러닝 네트워크에서 자주 사용되는 primitives(ex, CNN, RNN, pooling, softmax, etc.)를 NVIDIA GPU를 이용해 가속화하여 제공하는 library이다. Forward routines 뿐만 아니라 backward functions도 제공하기에 많은 딥러닝 프레임워크에서 NVIDIA GPU + cuDNN library 조합을 사용하여 딥러닝 학습 및 추론 가속을 지원한다. Caffe2, Chainer, Keras, MATLAB, MxNet, PyTorch, Tensorflow 등 메인 딥러닝 프레임워크는 모두, NVIDIA GPU를 사용할 경우 cuDNN을 사용하여 네트워크 학습 및 추론을 가속할 수 있도록 지원한다[1].

딥러닝에서 학습 및 추론 속도는 강조해도 지나치지 않을 정도로 중요한 성능 팩터 중 하나이다. 딥러닝 분야가 20세기 암흑의 시기를 지나고 2010년대부터 다시 뜨게 된 이유 중 하나가 하드웨어가 발전하여 막대한 연산을 어느정도 합리적인 시간안에 할 수 있게 되어서라는 말도 있다. 결국 하드웨어의 성능이 따라줘야 막대한 크기의 딥러닝 모델 학습을 시도해 볼 수 있을 것이다.

Fig 1. cuDNN logo

현재(2022.4)까지 cuDNN 8.4.0 버전이 출시되었으며, 다음과 같은 DNN primitives의 GPU 가속 구현을 제공한다.

  • Convolution forward and backward, including cross-correlation
  • Matrix multiplication
  • Pooling forward and backward
  • Softmax forward and backward
  • Neuron activations forward and backward: relu, tanh, sigmoid, elu, gelu, softplus, swish
  • Arithmetic, mathematical, relational and logical pointwise operations
  • Tensor transformation functions
  • LRN, LCN and batch normalization forward and backward

Primitive의 입력으로 들어오는 tensor에 대해서도 높은 자유도를 주고자 계속 업데이트를 하고 있다. Customizable data layout 지원하고자 flexible dimension ordering(NCHW, NHWC, CHWN ), striding, subregions for the 4D tensors 등의 기능을 지원한다. 이를 통해 다양한 DNN primitives 구현 사이에서 데이터 변환을 최소화하고자 한다고 한다. Tensor layouts에 대해서도 차차 정리를 해나가야 겠다.

 

 

 

cuDNN 설치 (Ubuntu 18.04, CUDA 10.2 기준)

cuDNN은 library이기에 CUDA Toolkit이 미리 설치되어 있어야 한다. 

1. cuDNN library 다운로드

다운로드 링크: https://developer.nvidia.com/rdp/cudnn-download

위 다운로드 링크에 들어가서 로그인을 하고 라이센스에 동의한다. 그 후 Fig 2.와 같이 선택창이 뜨는데, 각자의 CUDA version 및 OS에 맞는 다운로드 링크를 선택하면 된다. tar 파일(local installer for Linux x86_64(Tar))을 다운로드 받으면 shared library와 header file이 압축된 tar 파일을 얻을 수 있다.

Fig 2.cuDNN 다운로드

 

2. 다운 받은 shared library file들과 header files들을 정해진 위치(CUDA toolkit의 default library, include path)에 복사하기만 하면 된다. Fig 3.은 tar file을 어떻게 설치하는 지를 보여주는 것으로, 설치 위치 및 방법을 알려준다.

Fig 3. cuDNN 설치 방법 (복사 위치)

 

 

 

cuDNN 설치 테스트

설치가 완료됐으면, 기존의 CUDA 프로그램에서 cudnn library를 사용할 수 있다. cuDNN header file을 include하고, 컴파일 시 cudnn 링킹 옵션을 주면 된다.

// cudnn header file 선언
// cudnn header file은 여러개의 sub-header file들로 이루어져있기에, 
// 경우에 따라 sub-header file만 include할 수 있다.
#include <cudnn.h> 

int main(void) {
	...
}

 

# cudnn shared library를 사용하겠다는 컴파일 링킹 옵션 주기
# cudnn의 so file과 include 파일이 환경 변수에 등록되어 있지 않다면 -L, -I 옵션 추가 가능
nvcc -o program.out main.cu -lcudnn

 

 

 

 

Reference

[1] https://developer.nvidia.com/cudnn