NVIDIA CUDA 12.4: что нового для ML-инженеров
NVIDIA выпустила CUDA 12.4 в начале 2024 года, и с тех пор это стало стандартным окружением для большинства ML-команд. Если вы ещё на 11.x или ранних версиях 12.x — самое время разобраться, что изменилось и стоит ли переходить прямо сейчас.
Что нового в CUDA 12.4
Улучшения cuDNN
cuDNN 9.x, идущий вместе с CUDA 12.4, получил переработанный backend для трансформерных архитектур. Основные изменения:
- Нативная поддержка Flash Attention 2 на уровне библиотеки — больше не нужно тащить отдельный пакет с расширениями на C++
- Улучшенный fused MHA (Multi-Head Attention) kernel для Hopper (H100) и Ampere (A100)
- Оптимизации для grouped query attention (GQA) — архитектура, которую используют Llama, Mistral и большинство современных LLM
Flash Attention нативно
До cuDNN 9.x разработчики использовали flash-attn как отдельный пакет, который нужно было компилировать под конкретную версию CUDA и PyTorch. Теперь Flash Attention доступна через стандартный torch.nn.functional.scaled_dot_product_attention при наличии cuDNN 9+.
import torch
import torch.nn.functional as F
# Автоматически использует Flash Attention при cuDNN 9+
with torch.backends.cuda.sdp_kernel(enable_flash=True, enable_math=False):
output = F.scaled_dot_product_attention(q, k, v, is_causal=True)
Установка на Ubuntu 22.04
Рекомендую устанавливать через официальный репозиторий NVIDIA, а не через apt из стандартных реп:
# Добавляем репозиторий NVIDIA
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
dpkg -i cuda-keyring_1.1-1_all.deb
apt update
# Устанавливаем CUDA 12.4
apt install cuda-12-4
# Добавляем в PATH
echo 'export PATH=/usr/local/cuda-12.4/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
nvcc --version
nvidia-smi
Совместимость с PyTorch 2.x
PyTorch 2.2+ полностью поддерживает CUDA 12.4. Важный момент: версии PyTorch и CUDA должны совпадать. Используйте официальный матрикс совместимости.
# PyTorch 2.2 с CUDA 12.4
pip install torch==2.2.0 torchvision==0.17.0 --index-url https://download.pytorch.org/whl/cu124
# Проверка
python -c "import torch; print(torch.version.cuda); print(torch.cuda.is_available())"
torch.compile() в PyTorch 2.x работает значительно лучше с CUDA 12.4 за счёт улучшенного Triton backend.
Бенчмарки: ускорение для LLM
Тест на A100 80GB, модель Llama-2−13B, batch size 8, sequence length 2048:
| Конфигурация | Tokens/sec | Latency (ms/token) |
|---|---|---|
| CUDA 11.8, PyTorch 2.0 | 312 | 3.2 |
| CUDA 12.1, PyTorch 2.1 | 378 | 2.6 |
| CUDA 12.4, PyTorch 2.2, cuDNN 9 | 445 | 2.2 |
| CUDA 12.4 + Flash Attention нативно | 467 | 2.1 |
Прирост ~15−20% по сравнению с CUDA 11.8 достигается без каких-либо изменений в коде модели.
Multi-Instance GPU (MIG) для A100/H100
MIG позволяет разделить один GPU на несколько изолированных инстансов. Полезно, когда одна задача не утилизирует карту целиком.
# Включаем MIG mode (требует перезапуска GPU)
nvidia-smi -i 0 -mig 1
# Смотрим доступные профили
nvidia-smi mig -lgip
# Создаём два инстанса 3g.40gb (половина A100)
nvidia-smi mig -cgi 9,9 -C
# Проверяем
nvidia-smi -L
С CUDA 12.4 MIG работает стабильнее: исправлены проблемы с изоляцией памяти и контекстами CUDA при одновременном запуске нескольких процессов.
Практические советы по обновлению
-
Не обновляйте на production без тестирования. Соберите тестовый стенд с такой же моделью и прогоните бенчмарки.
-
Версия драйвера важна. CUDA 12.4 требует драйвер >= 550.54. Проверьте:
nvidia-smi | grep Driver. -
Docker-образы. Используйте официальные образы
nvidia/cuda:12.4.0-cudnn9-devel-ubuntu22.04вместо самостоятельной установки — меньше проблем с зависимостями. -
NCCL для multi-GPU. Обновите NCCL до 2.20+ вместе с CUDA 12.4, иначе distributed training может работать медленнее.
В целом, переход с CUDA 11.x на 12.4 — это одно из самых безболезненных обновлений, которое приносит ощутимый прирост производительности без необходимости переписывать код.
Главное не забыть что версия драйвера должна соответствовать CUDA. Обжигался на этом несколько раз — ставишь новую CUDA, а старый драйвер её не поддерживает, и полчаса гадаешь почему не работает.
С PyTorch 2.2 и CUDA 12.4 torch.compile реально ускоряет инференс, особенно заметно на небольших моделях. Рекомендую попробовать если ещё не пробовали.