Настройка NVIDIA CUDA/cuDNN для GPU-вычислений
CUDA и cuDNN — фундамент GPU-ускоренных вычислений для ML. Корректная установка и совместимость версий CUDA/cuDNN/драйвер/фреймворк — частый источник проблем при настройке ML-окружения.
Матрица совместимости
Перед установкой важно свериться с официальной таблицей совместимости:
| CUDA | cuDNN | PyTorch | TensorFlow | Min Driver |
|---|---|---|---|---|
| 12.1 | 8.9 | 2.1.x | 2.14.x | 530.30 |
| 12.2 | 8.9 | 2.2.x | — | 535.54 |
| 11.8 | 8.7 | 2.0.x | 2.12.x | 520.61 |
Золотое правило: driver версия должна поддерживать CUDA версию или выше (NVIDIA Driver ≥ требуемой CUDA версии).
Установка NVIDIA Driver
# Ubuntu 22.04
# Рекомендуемый способ — через ubuntu-drivers
sudo ubuntu-drivers autoinstall
# Или вручную
sudo apt install nvidia-driver-545
# Проверка
nvidia-smi
# Вывод: Driver Version: 545.xx.xx | CUDA Version: 12.3
Установка CUDA Toolkit
# Через runfile (рекомендуется для точного контроля версии)
wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run
sudo sh cuda_12.2.0_535.54.03_linux.run --silent --toolkit --no-drm
# Добавить в ~/.bashrc
export PATH=/usr/local/cuda-12.2/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH
# Проверка
nvcc --version
Установка cuDNN
# Скачать cuDNN с developer.nvidia.com (требует аккаунт)
tar -xzvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
sudo ldconfig
# Через apt (альтернативный способ)
sudo apt install libcudnn8=8.9.7.29-1+cuda12.2 libcudnn8-dev=8.9.7.29-1+cuda12.2
Установка через Conda (самый простой способ)
# Conda управляет CUDA/cuDNN автоматически
conda create -n ml python=3.11
conda activate ml
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
# Проверка
python -c "import torch; print(torch.cuda.is_available(), torch.version.cuda)"
Проверка корректности установки
import torch
print(f"PyTorch version: {torch.__version__}")
print(f"CUDA available: {torch.cuda.is_available()}")
print(f"CUDA version: {torch.version.cuda}")
print(f"cuDNN version: {torch.backends.cudnn.version()}")
print(f"GPU count: {torch.cuda.device_count()}")
print(f"GPU name: {torch.cuda.get_device_name(0)}")
# Тест производительности матричного умножения
x = torch.randn(8192, 8192, device='cuda', dtype=torch.float16)
y = torch.randn(8192, 8192, device='cuda', dtype=torch.float16)
torch.cuda.synchronize()
import time
t = time.time()
z = x @ y
torch.cuda.synchronize()
print(f"MatMul 8192x8192 (FP16): {time.time()-t:.3f}s")
# A100: ~0.05s, RTX 3090: ~0.12s
Типичные проблемы
"CUDA error: no kernel image is available" — PyTorch скомпилирован для другой версии CUDA. Переустановить PyTorch для нужной CUDA.
"libcuda.so not found" — LD_LIBRARY_PATH не настроен. Добавить /usr/local/cuda/lib64 в конфиг.
Низкая производительность — проверить nvidia-smi -q | grep "Performance State". GPU в режиме P8 вместо P0: выполнить nvidia-smi -pm 1 для Persistence Mode.







