본 기사는 GPU 커널 엔지니어링을 위한 실용적인 환경 설정 가이드를 제공합니다. CUDA 버전별 지원 중단 아키텍처를 확인하고, 컴퓨팅 능력을 점검하는 것이 중요합니다. 또한, 비동기적 특성상 정확한 성능 측정을 위해 동기화 및 이벤트를 사용해야 하며, 프로파일러 카운터 권한 문제 해결 방법도 안내합니다.
핵심 포인트
GPU 환경 설정 시 단순히 유무가 아닌 컴퓨팅 능력(compute capability) 확인이 필수입니다.
CUDA 버전별 지원 중단 아키텍처를 숙지하고 적절한 툴킷을 사용해야 합니다.
비동기 실행 특성상 정확한 성능 측정을 위해 동기화 및 CUDA 이벤트를 활용해야 합니다.
프로파일러 카운터 접근 권한 문제 발생 시, 관리자 권한(sudo)으로 도구를 실행해야 할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 r/MachineLearning (hot)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
nvidia-smi --query-gpu=name,compute_cap --format=csv
7.5는 Turing이고, 8.0/8.6은 Ampere이며, 8.9는 Ada이고, 9.0은 Hopper입니다. 이 수치가 무엇을 할 수 있는지 결정합니다:
CUDA 13은 Maxwell, Pascal, Volta를 지원 중단했습니다. 해당 카드의 경우 CUDA 12 툴킷(toolkit)을 설치해야 합니다.
GTX 16 시리즈는 Turing이지만 텐서 코어(tensor core)가 없습니다.
텐서 코어 작업을 위해서는 RTX 20 시리즈 이상 또는 T4가 필요합니다. Ampere 전용 명령어는 Ampere 이상이 필요합니다.
FP8은 Ada 또는 Hopper가 필요합니다. Hopper 전용 기능(TMA, WGMMA)은 H100이 필요한데, 이는 대부분의 사람이 임대해야 할 것입니다.
드라이버(Driver), 툴킷(toolkit), PyTorch의 런타임(runtime)은 세 가지 다른 것들입니다. nvidia-smi 헤더에 표시된 CUDA 버전은 드라이버가 지원하는 가장 최신 버전이지, 실제로 설치된 버전이 아닙니다. pip으로 설치한 PyTorch는 자체적인 CUDA 런타임을 번들로 포함하므로, torch.cuda.is_available()이 True를 반환한다고 해서 nvcc가 존재하는지 여부는 알 수 없습니다.
WSL 2에서는 디스트로(distro) 내부에 리눅스 드라이버를 설치하지 마십시오. Windows 드라이버가 사용되기 때문에 WSL-Ubuntu 툴킷 전용 설치 프로그램(toolkit-only installer)을 사용하십시오.
GPU 실행은 비동기적(asynchronous)이므로, 단순한 타이밍 측정은 작업 자체의 시간이 아니라 큐잉(queueing) 시간을 주로 측정합니다. 워밍업(Warm up), 동기화(synchronize), CUDA 이벤트를 사용하고 여러 번 평균을 내야 합니다:
defbench(fn, iters=20):
for _ inrange(3): fn()
torch.cuda.synchronize()
s, e = torch.cuda.Event(enable_timing=True), torch.cuda.Event(enable_timing=True)
s.record()
for _ inrange(iters):
fn()
e.record()
torch.cuda.synchronize()
return s.elapsed_time(e) / iters # ms
1
2
3
4
5
6
7
8
9
10
11
행렬 곱셈(matmul)의 경우, 처리량(throughput)은 약 2MN*K FLOPs를 시간으로 나눈 값입니다.
숫자 옆에 dtype을 기록하세요. FP32와 BF16의 기준선(baseline) 차이가 크기 때문입니다.
프로파일러 카운터: ERR_NVGPUCTRPERM 기본적으로 비관리자 사용자(non-admin users)는 GPU 성능 카운터를 읽을 수 없으므로, Nsight Compute가 이 오류와 함께 실패합니다. 해결 방법은 다음과 같습니다. ncu를 sudo로 실행하세요 (sudo는 보통 PATH를 초기화하므로 전체 경로를 사용해야 합니다). 또는 관리자에게 모든 사용자에게 카운터 접근 권한을 활성화하도록 요청해야 합니다. Windows/WSL에서는 Windows 측에서 이 기능이 활성화됩니다. 만약 GPU를 임대(rent)한다면, 관리형 컨테이너 플랫폼은 카운터 접근을 차단할 수 있으므로 제공업체에 확정하기 전에 반드시 테스트해 보세요.
무엇보다 먼저 스모크 테스트(Smoke test)를 진행하세요. 모든 CUDA 호출에 오류 검사(error check)가 포함된 작은 추가 커널을 nvcc -arch=native로 빌드한 다음, nsys와 ncu를 한 번 실행합니다. 이것이 작동한다면 드라이버, 툴킷, GPU 및 두 프로파일러 모두 정상이라는 의미입니다.
해당 세션에서는 필수 전제 조건(포인터, 평탄 행렬 인덱싱(flat matrix indexing), matmul 및 그 FLOP 카운트, PyTorch 기본 지식)을 다루고 GPU를 얻는 여러 방법을 비교합니다. 소요 시간은 약 40분에서 45분입니다. 비디오: