셋이 합 안 맞으면 아무것도 안 돌아
'CUDA 깔아' 는 오해 부르는 instruction이야. CUDA라는 한 덩어리는 없어. 세 층이고 각자 release cadence 다르고 호환성 맞아야 해:
- Driver — kernel-mode 소프트웨어, GPU 실리콘이랑 직접 대화. NVIDIA가 거의 매주 업데이트. driver는 최대 지원 CUDA runtime version을 광고해.
- Toolkit — userland header, library (cuBLAS, cuDNN, cuFFT 등), tool (NVCC, Nsight). 'CUDA 13.0', 'CUDA 13.2' 식으로 몇 달마다 release.
- NVCC — toolkit 안에 있는 컴파일러 binary.
.cusource를 fat binary로 컴파일하는데 PTX + 여러 SASS variant 들어 있어 (sm_75Turing,sm_86Ampere,sm_89Ada Lovelace,sm_90Hopper).
호환성 룰: driver의 최대 지원 CUDA version ≥ 컴파일에 쓴 toolkit version. CUDA 13.2 toolkit으로 컴파일한 binary는 CUDA 12.4까지만 지원하는 driver에선 안 돌아. driver가 floor야.
관료 같은 얘기 같지? 뭐 깨질 때까진 그래. 깨지는 순간 nvidia-smi 출력 보면서 driver냐 toolkit이냐 binary의 SASS target이냐 쫓아다녀. 멘털 모델: 버전 맞춰 깔고, binary에 맞는 SASS 박아.
AI 작업할 때 왜 중요하냐면 PyTorch, TensorFlow, JAX, MLX 다 특정 compute capability용 pre-compiled CUDA 커널을 wheel로 ship해. 30-series에서 40-series로 GPU 업그레이드하면 sm_89 SASS 들어간 새 framework wheel 필요할 수도 있어 — 안 그래도 PTX JIT으로 돌긴 하는데, 시동 시간 느려져.