Level 8: GPU 프로그래밍 (CUDA 기초)

Level 8

CUDA 환경 설정

드라이버, 툴킷, nvcc

40분
CUDA 환경 설정 강의 영상
강의 영상 보기 (새 탭에서 재생)YouTube

📓Google Colab에서 실습하기

이 레슨은 PyTorch/GPU가 필요합니다. 노트북을 다운로드 후 Google Colab에서 열어주세요.

학습 내용

CUDA 환경 설정

학습 목표

  • CUDA 개발 환경의 구성 요소를 이해한다
  • CUDA Toolkit을 설치한다
  • nvcc 컴파일러 사용법을 익힌다
  • 환경 설정을 검증한다

CUDA 개발 환경 구성 요소

CUDA 개발에는 세 가지 핵심 구성 요소가 필요합니다.

필수 구성 요소

구성 요소역할설치 방법
NVIDIA 드라이버GPU 하드웨어 제어NVIDIA 웹사이트
CUDA Toolkit개발 도구 및 라이브러리developer.nvidia.com
호환 컴파일러C/C++ 컴파일Visual Studio, GCC

설치 순서

1. NVIDIA 그래픽 드라이버 설치
2. CUDA Toolkit 설치
3. 환경 변수 설정
4. 설치 확인

GPU 호환성 확인

Compute Capability

각 NVIDIA GPU는 Compute Capability라는 버전을 가집니다.

세대Compute Capability예시 GPU
Kepler3.0 - 3.7GTX 780
Maxwell5.0 - 5.3GTX 970
Pascal6.0 - 6.2GTX 1080
Turing7.5RTX 2080
Ampere8.0 - 8.6RTX 3090
Ada Lovelace8.9RTX 4090

호환성 확인 방법

bash
# Windows (PowerShell) nvidia-smi # 출력 예시: # NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2

CUDA Toolkit 설치

다운로드 위치

  • 공식 사이트: developer.nvidia.com/cuda-toolkit

설치 옵션

옵션설명권장 사용자
Express모든 구성 요소 자동 설치초보자
Custom필요한 구성 요소만 선택고급 사용자

주요 설치 구성 요소

CUDA Toolkit 구성 요소: ├── CUDA Runtime # 런타임 라이브러리 ├── CUDA Libraries # cuBLAS, cuFFT, cuDNN 등 ├── CUDA Tools # nvcc, nvprof, Nsight ├── CUDA Samples # 예제 코드 └── Documentation # 문서

환경 변수 설정

Windows 환경 변수

CUDA_PATH = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.0
PATH += %CUDA_PATH%\bin
PATH += %CUDA_PATH%\libnvvp

Linux 환경 변수 (.bashrc)

bash
export CUDA_HOME=/usr/local/cuda export PATH=$CUDA_HOME/bin:$PATH export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH

환경 변수 확인

bash
# CUDA 버전 확인 nvcc --version # 출력 예시: # nvcc: NVIDIA (R) Cuda compiler driver # Built on Tue_Aug_15_22:02:13_PDT_2023 # Cuda compilation tools, release 12.2, V12.2.140

nvcc 컴파일러

**nvcc(NVIDIA CUDA Compiler)**는 CUDA 코드를 컴파일하는 도구입니다.

nvcc의 역할

┌─────────────────────────────────────┐ │ .cu 소스 파일 │ └──────────────┬──────────────────────┘ ↓ ┌─────────────────────────────────────┐ │ nvcc │ │ ┌─────────┐ ┌───────────────┐ │ │ │ Host 코드│ │ Device 코드 │ │ │ │ (C/C++) │ │ (CUDA 커널) │ │ │ └────┬────┘ └───────┬───────┘ │ │ ↓ ↓ │ │ gcc/cl.exe PTX/cubin │ └──────────────┬──────────────────────┘ ↓ ┌─────────────────────────────────────┐ │ 실행 파일 (.exe/.out) │ └─────────────────────────────────────┘

기본 컴파일 명령

bash
# 기본 컴파일 nvcc hello.cu -o hello # 최적화 옵션 nvcc -O3 hello.cu -o hello # 아키텍처 지정 nvcc -arch=sm_86 hello.cu -o hello # 디버그 정보 포함 nvcc -g -G hello.cu -o hello

주요 nvcc 옵션

옵션설명예시
-o출력 파일명 지정-o myapp
-archGPU 아키텍처 지정-arch=sm_86
-O최적화 레벨-O3
-gHost 디버그 정보-g
-GDevice 디버그 정보-G
-I헤더 파일 경로-I/path/to/headers
-L라이브러리 경로-L/path/to/libs
-l라이브러리 링크-lcudart

분리 컴파일

bash
# 대규모 프로젝트에서 분리 컴파일 nvcc -dc module1.cu -o module1.o nvcc -dc module2.cu -o module2.o nvcc module1.o module2.o -o myapp

설치 확인

방법 1: nvidia-smi

bash
nvidia-smi # 정상 출력 예시: # +-----------------------------------------------------------------------------+ # | NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2 | # |-------------------------------+----------------------+----------------------+ # | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | # | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | # |===============================+======================+======================| # | 0 NVIDIA GeForce ... Off | 00000000:01:00.0 Off | N/A | # | 0% 45C P8 15W / 350W | 512MiB / 24576MiB | 0% Default | # +-------------------------------+----------------------+----------------------+

방법 2: deviceQuery

bash
# CUDA Samples의 deviceQuery 실행 ./deviceQuery # 주요 출력 정보: # - GPU 이름 # - Compute Capability # - CUDA 코어 수 # - 메모리 크기 # - 메모리 대역폭

방법 3: 간단한 테스트 프로그램

cuda
// test_cuda.cu #include <stdio.h> __global__ void hello() { printf("Hello from GPU! Thread %d\n", threadIdx.x); } int main() { hello<<<1, 5>>>(); cudaDeviceSynchronize(); return 0; }
bash
# 컴파일 및 실행 nvcc test_cuda.cu -o test_cuda ./test_cuda # 출력: # Hello from GPU! Thread 0 # Hello from GPU! Thread 1 # Hello from GPU! Thread 2 # Hello from GPU! Thread 3 # Hello from GPU! Thread 4

Python 환경에서 CUDA

PyTorch CUDA 확인

import torch

# CUDA 사용 가능 여부
print(f"CUDA available: {torch.cuda.is_available()}")

# CUDA 버전
print(f"CUDA version: {torch.version.cuda}")

# GPU 정보
if torch.cuda.is_available():
    print(f"GPU: {torch.cuda.get_device_name(0)}")
    print(f"GPU count: {torch.cuda.device_count()}")

cuDNN 설치

bash
# cuDNN은 딥러닝 연산 최적화 라이브러리 # PyTorch, TensorFlow 성능 향상에 필수 # conda로 설치 conda install cudnn # 또는 NVIDIA 웹사이트에서 직접 다운로드

문제 해결

일반적인 오류와 해결책

오류원인해결책
nvcc not found환경 변수 미설정PATH에 CUDA bin 추가
Driver version insufficient드라이버 구버전드라이버 업데이트
No CUDA-capable deviceGPU 미인식드라이버 재설치
Out of memoryGPU 메모리 부족배치 크기 줄이기

드라이버/툴킷 버전 호환성

CUDA Toolkit 12.x → Driver 525.60.13 이상 필요
CUDA Toolkit 11.x → Driver 450.80.02 이상 필요
CUDA Toolkit 10.x → Driver 410.48 이상 필요

정리

항목내용
필수 구성 요소NVIDIA 드라이버, CUDA Toolkit, 호환 컴파일러
버전 확인nvidia-smi, nvcc --version
컴파일 명령nvcc source.cu -o output
환경 변수CUDA_PATH, PATH, LD_LIBRARY_PATH
테스트 도구deviceQuery, bandwidthTest

핵심 포인트: 올바른 드라이버와 툴킷 버전 조합이 안정적인 CUDA 개발의 기초입니다.

레슨 정보

레벨
Level 8: GPU 프로그래밍 (CUDA 기초)
예상 소요 시간
40분
참고 영상
YouTube 링크

💡실습 환경 안내

이 레벨은 PyTorch/GPU가 필요하여 Google Colab 사용을 권장합니다.

Colab은 무료 GPU를 제공하여 PyTorch, CNN, Transformer 등을 실행할 수 있습니다.