Post

CUDA 설치 및 예제 운용

CUDA 환경 구성

CUDA 프로그래밍을 하기 위해서는 먼저 관련 드라이버를 설치해야한다.
이번 포스팅은 CUDA 프로그래밍을 하기 위한 관련 드라이버를 설치하고 개발 환경을 구성해보겠다.

1. 설치

1) 설치에 앞서 알아봐야할 것

먼저 내가 가지고 있는 그래픽 카드가 어떤 Compute capability 버전을 지원하는지 알아봐야한다.
아래의 표는 위키 에 나와있는 표를 갖고 온 것이다.

내가 갖고있는 그래픽 카드가 RTX 3070이라고 한다면 위의 표에서 찾아보면 된다.
해당 모델은 Geforce 계열에서 Ampere Micro architecture에 속해있으면 Compute capability 는 8.6인걸 알 수 있다.
Compute capability 버전을 알았다면 아래의 표를 참고해서 어디 SDK까지 지원하는지 알 수 있다. (아래의 표 역시 위키 에 올라와있다)

이전 표에서 확인한 Micro architecture 이름은 Ampere, Compute capability 버전은 8.6이었다. 위의 표를 보면 왼쪽에 CUDA SDK Version이 나와있는데 11.0 ~ 12.8 버전까지 지원하는것을 알 수 있다.

2) 윈도우 기반

a. 툴킷 설치

먼저 윈도우 환경에서 설치해보도록 하겠다. 당연하지만 CUDA 프로그래밍을 하기 위해서는 먼저 NVIDIA 그래픽 카드가 필요하다. 현재 내 컴퓨터는 Geforce RTX 3070 그래픽 카드가 설치되어있다.
(어떤 툴킷을 받아야하는지는 위의 “설치에 앞서 알아봐야할 것”을 참고하기 바란다)

최신 버전의 CUDA Toolkit을 받을 수 있는 먼저 NVIDIA 공식 홈페이지 에 들어가서 자신의 OS에 맞는 설정을 선택하면 아래와 같이 나온다.

img.png

파일을 다운로드 한 다음에 실행해준다. 그 뒤에는 그냥 안내에 따라 설치해주면 된다.

b. Visual Studio 2022 설치

일단 Visual Studio를 설치해서 CUDA Toolkit과 연동할 것이다. 먼저 Microsoft의 Visual Studio 홈페이지 에 들어가서 설치하도록 한다.

img_1.png

다운로드 후 실행하면 이것저것 설치되며 다음과 같은 화면이 나오는데 아래와 같이 선택하면 된다.

img_2.png

3) 리눅스 기반

※ 설치전 확인

일단 OS와 GPU를 확인해야한다.
물론 빌린게 아닌이상에야 자기 컴퓨터의 OS나 GPU를 모르는 경우는 없겠지만 확실하면 뭐든 좋은 법이다. 아래와 같은 명령어로 OS 및 GPU를 확인할 수 있다.

1
2
cat /etc/os-release
lspci | grep -i NVIDIA

또한 gcc 컴파일러 또한 필요하기에 gcc 역시 설치해준다.

1
sudo apt install gcc

(선택 사항)
gcc만 설치하면 이것저것 의존성에 걸릴 수 있으므로 아래의 패키지를 설치하면 대부분의 필수적인 패키지는 자동 설치된다.

1
sudo apt install build-essential

a. 그래픽 그라이버 설치

먼저 아래와 같은 명령어를 입력한다.

1
sudo apt install ubuntu-drivers-common

사용자의 하드웨어를 스캔하여 시스템에 적합한 NVIDIA 드라이버를 추천해주는 패키지이다. 위 패키지를 설치했다면 아래와 같이 입력하여 추천되는 드라이버를 설치한다.

1
sudo ubuntu-drivers devices

위와 같이 입력하면 패키지가 추천하는 드라이버가 아래와 같이 recommended 라고 뜬다.

img.png

대상 패키지를 확인했으면 아래와 같이 대상 패키지의 이름을 입력해서 설치한다.
만약 “nvidia-driver-570” 에 recommended라고 되어있다면 아래와 같이 입력한다.

1
sudo apt install nvidia-driver-570

이후에 reboot하여 아래와 같이 입력하면 세부 정보를 표시하는 관리 인터페이스가 나타난다.

1
nvidia-smi

b. CUDA 툴킷 설치

구글에 CUDA Toolkit이라고 검색하면 공식 홈페이지가 나온다.
공식 홈페이지에 들어가서 내 환경을 선택하여 설치하면 되는데 나는 deb(local) 옵션을 선택하여 아래에 나온 명령어를 입력했다.

img_1.png

이후에 설치된 파일에 대해서 경로를 잡아주어야한다.
아래와 같이 입력한다.

1
2
3
4
sudo sh -c "echo 'export PATH=$PATH:/usr/local/cuda-12.8/bin'>> /etc/profile"
sudo sh -c "echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-12.8/lib64'>> /etc/profile"
sudo sh -c "echo 'export CUDARDIR=/usr/local/cuda-12.8'>> /etc/profile"
source /etc/profile

이후에 아래와 같이 명령어를 입력했을때 버전이 출력된다면 설치가 잘 된것이다.

1
nvcc --version

2. 예제

1) 윈도우 기반

NVIDIA에서 제공하는 샘플 프로젝트를 돌려볼 수도 있겠지만 아직 12.8버전에 맞는 샘플이 나오지 않아 돌려볼 순 없다.
(정확하게는 꼼수를 써서 가능은 하긴 하지만 그다지 권장하지 않는다) 따라서 그냥 Visual Studio에서 새 프로젝트를 만들어서 구동해보는 형태로 해볼 것이다.
먼저 Visual Studio를 구동하고 새 프로젝트 만들기를 누른다.

img_3.png

이후 목록 중에 CUDA 12.8 Runtime이라고 되어있는 항목을 누르고 다음을 누르고 프로젝트 이름을 지정해준다음에 만들어준다.

img_4.png

그러면 간단한 예제와 함께 프로젝트가 생성된다.
이 예제는 GPU를 이용해서 행렬 연산을 하는 예제이다. 제일 위에 디버그 없이 빌드 버튼을 눌렀을때 아래와 같이 나온다면 아무런 문제없이 설치된 것이다.

img_5.png

2) Linux 기반

아래는 예제 코드이다. 이 예제 코드를 먼저 linux 텍스트 편집기를 통해서 입력하고 이름은 “hello_cuda.cu” 로 저장한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

__global__ void HelloCUDA(){
        printf("Hello GPU world!\n");
}

int main(){
        printf("Hello CUDA from CPU!\n");

        HelloCUDA<<<1, 10>>>();

        cudaDeviceSynchronize();
        return 0;
}

이후 아래의 명령어로 빌드와 동시에 구동한다.

1
nvcc hello_cuda.cu -o hello_cuda --run

아래와 같이 출력되면 제대로 빌드된 것이다.

img_2.png

참고문헌

This post is licensed under CC BY 4.0 by the author.