Embedded Linux

ubuntu22.04 CUDA와 cuDNN 설치하기

작성자 임베디드코리아 작성일25-10-09 22:20 조회5회 댓글0건
buntu-drivers를 이용해 설치 가능한 nvidia driver 목록을 확인한다.
$ ubuntu-drivers devices

1. OS, GPU 확인

  $ cat /etc/os-release

PRETTY_NAME="Ubuntu 24.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.3 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo

  $ lsb_release -a

2. 시스템에 엔비디아 GPU가 있는지 확인
  $ lspci | grep -i NVIDIA


sudo apt install ubuntu-drivers-common
sudo ubuntu-drivers devices

3. sudo apt install nvidia-driver-550

<CUDA 설치>
1. 패키지 설치
$ sudo apt install build-essential

2. 다운로드 설치
$ w get https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run
$ sudo sh cuda_12.1.1_5.0.30.02_linux.run
  -->첫번째 화면 : Continue --->두번째 화면 : accept 입력. ---> 세번째 화면 : 1) Driver [  ]  2) Install
  설치가 진행 됨

$ sudo vi ~/.bashrc
아래 내용 추가
export PATH=/usr/local/cuda-12.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

4. 라이브러리 설정
  1) 라이브러리 경로 설정
      $ sudo vi /etc/ld.so.conf
        <아래 내용 추가>
      /usr/local/cuda-12.1/lib64

  2) lib가 제대로 나오는지 확인
    $ echo $LD_LIBRARY_PATH

5. 적용하기
$ sudo ldconfig -p | grep cuda
$ echo $PATH
  여기서 12.1이 나오는것을 확인하면 OK입니다!

6) nvcc -V로 버전 확인
$ nvcc -V
$ nvcc --version



< cuDNN 설치하기>
1. 다운로드
  $ w get https://developer.download.nvidia.com/compute/cudnn/redist/cudnn_samples/linux-x86_64/cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz

2. 압축 풀기와  경로로 이동하기
  $ tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
  $ ls -lh cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz    <--- 파일 크기 확인하기
  $ cd cudnn-linux-x86_64-8.9.5.30_cuda12-archive/

3.파일들을 cuda경로인 /usr/local/cuda로 복사하기
  $ sudo cp include/cudnn*.h /usr/local/cuda-12.1/include
  $ sudo cp lib/libcudnn* /usr/local/cuda-12.1/lib64
  $ sudo chmod a+r /usr/local/cuda-12.1/include/cudnn*.h /usr/local/cuda-12.1/lib64/libcudnn*

4. 복사된 파일 확인
  $ ls -l /usr/local/cuda-12.1/lib64/libcudnn*

5. 설치된 cuDNN 버전 확인
 $ cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
 
# 출력 결과
#define CUDNN_MAJOR 8
#define CUDNN_MINOR 9
#define CUDNN_PATCHLEVEL 4


6. 예제 실해하기
  1) 에제소스코드 작성하기
  $ vi test_cudnn.c

#include <cudnn.h>
#include <stdio.h>

int main() {
    cudnnHandle_t handle;
    cudnnStatus_t status = cudnnCreate(&handle);
    if (status == CUDNN_STATUS_SUCCESS) {
        printf("cuDNN successfully initialized.\n");
    } else {
        printf("cuDNN initialization failed.\n");
    }
    cudnnDestroy(handle);
    return 0;
}

2) 컴파일하기
  $ gcc -o test_cudnn test_cudnn.c -I/usr/local/cuda-12.1/include -L/usr/local/cuda-12.1/lib64 -lcudnn
3) 실행하기
  $ ./test_cudnn

대표적으로 다음 오류들이 있습니다.
Could not load library libcudnn_cnn_train.so.8. But I’m sure that I have set the right LD_LIBRARY_PATH
Segmentation fault (core dumped)

/usr/local/cuda-x.x에 대한 오류
/usr/local/ 에는 cuda와 cuda-x.x 디렉토리가 있습니다.(예를 들어 cuda 11.8을 설치한 경우 cuda/ cuda-11.8/ 이 있습니다.) 이 두개 버전의 충돌 때문에 오류가 발생하는 경우가 있습니다. 위의 환경변수 설정과 같이 환경변수를 cuda/ 디렉토리로 지정해 놨다면 다음을 시도해보세요.


cd /usr/local/cuda-<version>
# ex) cd /usr/local/cuda-11.8

sudo rm -rf lib64/libcudnn*
sudo rm -rf include/cudnn*