설치환경
- Ubuntu 22.04 LTS
- Intel Core Ultra 9 285K
- Nvidia GeForce RTX 5080 16G
- Nvidia Driver 595.99.02 (open)
버전 선택
- RTX 5080(Blackwell, sm_120)은 CUDA 12.8 이상이 필요함 (12.6 이하는 sm_120 미지원).
- 드라이버 595는 CUDA 13.2까지 지원하므로 12.8 설치 가능.
nvidia-smi을 통해 드라이버가 지원하는 최대 CUDA 버전을 확인.
그래픽카드 드라이버 확인
nvidia-smi
NVIDIA repo 등록
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt update
sudo apt install cuda-toolkit-12-8
cuda, cuda-12-8, cuda-drivers 패키지는 설치하지 않음 (기존 그래픽드라이버를 덮어쓸 수 있음).
cuda-toolkit-12-8은 Toolkit만 설치함.
환경변수 등록
nano ~/.bashrc
export PATH=/usr/local/cuda-12.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.8/lib64:$LD_LIBRARY_PATH
source ~/.bashrc
테스트
nvcc -V
cuDNN 설치 (apt)
설치
- cuDNN 9는 CUDA 12.x 전체와 호환되므로 CUDA 12 계열 최신 버전 설치.
sudo apt install cudnn9-cuda-12
# 설치확인
dpkg -l | grep cudnn
테스트
CUDA 테스트
- 벡터 덧셈 커널 실행 (
test_cuda.cu)
#include <cstdio>
__global__ void add(int n, const float* a, const float* b, float* c){
int i = blockIdx.x*blockDim.x + threadIdx.x; if(i<n) c[i]=a[i]+b[i];
}
int main(){
int n=1<<20; size_t sz=n*sizeof(float);
float *a,*b,*c; cudaMallocManaged(&a,sz); cudaMallocManaged(&b,sz); cudaMallocManaged(&c,sz);
for(int i=0;i<n;i++){a[i]=1.f;b[i]=2.f;}
add<<<(n+255)/256,256>>>(n,a,b,c);
cudaError_t e=cudaDeviceSynchronize();
if(e!=cudaSuccess){printf("FAIL: %s\n",cudaGetErrorString(e));return 1;}
int bad=0; for(int i=0;i<n;i++) if(c[i]!=3.f) bad++;
int rt,drv; cudaRuntimeGetVersion(&rt); cudaDriverGetVersion(&drv);
printf("CUDA runtime %d, driver %d, errors=%d -> %s\n",rt,drv,bad,bad?"FAIL":"PASS");
return bad;
}
nvcc -arch=sm_120 test_cuda.cu -o test_cuda && ./test_cuda
- 결과:
CUDA runtime 12080, driver 13020, errors=0 -> PASS
cuDNN 테스트
- cuDNN 핸들 생성 (
test_cudnn.cpp)
#include <cstdio>
#include <cudnn.h>
#include <cuda_runtime.h>
int main(){
printf("cuDNN header %d.%d.%d, loaded lib %zu\n",CUDNN_MAJOR,CUDNN_MINOR,CUDNN_PATCHLEVEL,cudnnGetVersion());
cudnnHandle_t h; cudnnStatus_t s=cudnnCreate(&h);
if(s!=CUDNN_STATUS_SUCCESS){printf("FAIL: %s\n",cudnnGetErrorString(s));return 1;}
cudnnDestroy(h); printf("cudnnCreate OK -> PASS\n"); return 0;
}
nvcc test_cudnn.cpp -o test_cudnn -lcudnn && ./test_cudnn
- 결과:
cuDNN header 9.28.0, loaded lib 92800 / cudnnCreate OK -> PASS
- 컴파일 시
offline compilation ... prior to sm_75 경고는 -arch 미지정으로 인한 것이므로 무시 가능
Sample 실행