CUDA
Compute Unified Device Architecture
CUDA — платформа параллельных вычислений NVIDIA, включающая SDK, компилятор (nvcc) и runtime. Каждая GPU имеет Compute Capability (CC) — версию аппаратных возможностей, определяющую совместимость с CUDA Toolkit и ML-фреймворками.
Что такое CUDA
CUDA (Compute Unified Device Architecture) — проприетарная платформа NVIDIA для параллельных вычислений на GPU. Включает:
- CUDA Toolkit — SDK с компилятором nvcc, библиотеками (cuBLAS, cuDNN, cuFFT) и профилировщиком
- CUDA Runtime — API для запуска вычислений на GPU
- CUDA Driver — низкоуровневый драйвер GPU
Compute Capability (CC)
Каждая GPU NVIDIA имеет версию Compute Capability — число вида X.Y (например, 8.9), определяющее аппаратные возможности чипа.
| CC | Архитектура | Примеры GPU | Ключевые возможности |
|---|---|---|---|
| 7.0 | Volta | V100 | Tensor Cores 1-го поколения |
| 7.5 | Turing | T4, RTX 2080 | INT8 Tensor Cores |
| 8.0 | Ampere | A100 | TF32, BF16 Tensor Cores, Sparsity |
| 8.6 | Ampere | RTX 3090, A40 | То же, но меньше SM |
| 8.9 | Ada Lovelace | RTX 4090, L40S | FP8 Tensor Cores |
| 9.0 | Hopper | H100, H200 | Transformer Engine, FP8 |
| 10.0 | Blackwell | B200, GB200 | FP4, 5-е поколение Tensor Cores |
| 12.0 | Blackwell Ultra | B300, GB300 | Улучшенный NVLink |
SM-коды и компиляция
Compute Capability транслируется в SM-код для компилятора nvcc:
# CC 8.0 → sm_80
nvcc -gencode arch=compute_80,code=sm_80 kernel.cu
# Несколько архитектур (fat binary)
nvcc -gencode arch=compute_70,code=sm_70 \\
-gencode arch=compute_80,code=sm_80 \\
-gencode arch=compute_90,code=sm_90 kernel.cu
Fat binary содержит код для нескольких архитектур. Размер бинарника растёт, но обеспечивает совместимость.
Жизненный цикл поддержки
NVIDIA постепенно прекращает поддержку старых архитектур:
- Supported — полная поддержка в текущем CUDA Toolkit
- Deprecated — работает, но будет удалена в следующих версиях
- Dropped — код не компилируется, GPU не поддерживается
Пример: Kepler (CC 3.x) поддерживался в CUDA 5-11, deprecated в CUDA 11, полностью удалён в CUDA 12. Maxwell (CC 5.x) deprecated в CUDA 12.
Это критично для ML: если PyTorch собран с CUDA 12, он не будет работать на Kepler GPU.
Совместимость с ML-фреймворками
| Фреймворк | Минимальный CC | Рекомендуемый CC |
|---|---|---|
| PyTorch 2.x | 3.7 (скоро 5.0) | 7.0+ (Tensor Cores) |
| TensorFlow 2.x | 3.5 | 7.0+ |
| vLLM | 7.0 | 8.0+ (BF16) |
| Flash Attention 2 | 8.0 | 8.0+ |
| TensorRT | 6.1 | 7.0+ |
Mixed Precision и CC
Tensor Cores (CC 7.0+) критичны для производительности mixed precision:
- CC < 7.0 — mixed precision работает, но без аппаратного ускорения
- CC 7.0-7.5 — FP16 Tensor Cores (2-8× ускорение)
- CC 8.0+ — BF16 + TF32 (проще в использовании, нет проблем с overflow)
- CC 8.9+ — FP8 (ещё 2× ускорение при инференсе)
CUDA vs ROCm
| Параметр | CUDA (NVIDIA) | ROCm (AMD) |
|---|---|---|
| GPU | GeForce, Tesla, Quadro | Radeon, Instinct |
| Экосистема | Огромная | Растущая |
| ML-поддержка | Полная | PyTorch, частично |
| Аналог CC | Compute Capability | GFX version |
Практические советы
- Проверка CC вашей GPU:
nvidia-smi --query-gpu=compute_cap --format=csv - При сборке PyTorch из исходников: укажите
TORCH_CUDA_ARCH_LIST="7.0 8.0 9.0" - Не собирайте для CC < 7.0 если не нужно — это замедляет компиляцию и увеличивает бинарник
- При аренде GPU для ML: выбирайте CC 8.0+ (Ampere и новее) для полной поддержки BF16 и Flash Attention