# GPU и CUDA

> Графические процессоры как массово-параллельные ускорители вычислений и платформа NVIDIA CUDA для программирования их; основа обучения и инференса нейросетей.

Источник: https://llmdocs.ru/wiki/gpu-cuda/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **CUDA**: Compute Unified Device Architecture (NVIDIA, 2007)
- **Модель программирования**: ядра (kernels), сетка блоков потоков, варпы по 32 потока
- **Библиотеки**: cuBLAS, cuDNN, NCCL, TensorRT
- **Альтернативы**: AMD ROCm/HIP, Apple Metal (MPS), Intel oneAPI, Google TPU
- **Ключевые параметры**: объём и пропускная способность памяти, FLOPS в FP16/BF16/FP8
- **Утилита мониторинга**: nvidia-smi
**GPU** (англ. *graphics processing unit* — графический процессор) — процессор с тысячами простых вычислительных ядер, изначально созданный для отрисовки графики и ставший главным ускорителем для [нейросетей](https://llmdocs.ru/wiki/neural-network.md). **CUDA** — платформа и модель программирования NVIDIA, позволяющая запускать на GPU произвольные вычисления. Почти всё современное глубокое обучение, от обучения [больших языковых моделей](https://llmdocs.ru/wiki/llm.md) до их инференса, выполняется на GPU NVIDIA через CUDA, хотя альтернативы постепенно развиваются.[1]

## Почему GPU

Центральный процессор (CPU) — несколько десятков мощных ядер, оптимизированных для последовательной логики с ветвлениями. GPU — тысячи упрощённых ядер, выполняющих одну и ту же операцию над разными данными. Нейросети в основном состоят из умножений матриц, которые идеально распараллеливаются, поэтому GPU выполняет их в десятки и сотни раз быстрее.

Поворотным моментом стала сеть AlexNet (2012): обученная на двух игровых видеокартах, она с большим отрывом выиграла конкурс ImageNet и запустила бум глубокого обучения.[3]

## CUDA

NVIDIA выпустила CUDA в 2007 году. Программист пишет **ядро** (kernel) — функцию, которая выполняется параллельно множеством потоков; потоки организованы в блоки, блоки — в сетку. Аппаратно потоки исполняются группами по 32 (**варпы**), а у каждого блока есть быстрая общая память.[1]

На практике ядра пишут редко: фреймворки вроде [PyTorch](https://llmdocs.ru/wiki/pytorch.md) вызывают оптимизированные библиотеки — **cuBLAS** (линейная алгебра), **cuDNN** (операции нейросетей), **NCCL** (обмен данными между GPU), **TensorRT** (оптимизация инференса). Для собственных ядер всё чаще используют язык Triton от OpenAI, генерирующий код из Python. Пример оптимизированного ядра — FlashAttention, ускоряющий механизм внимания [трансформеров](https://llmdocs.ru/wiki/transformer.md) за счёт работы в быстрой памяти чипа.[7]

```python
import torch

print(torch.cuda.is_available(), torch.cuda.get_device_name(0))
x = torch.randn(8192, 8192, device="cuda", dtype=torch.bfloat16)
y = x @ x                          # выполняется на GPU через cuBLAS
torch.cuda.synchronize()           # вызовы асинхронны — ждём завершения
```

```bash
nvidia-smi                 # загрузка, память, температура, процессы
nvidia-smi -l 1            # обновление раз в секунду
```

## Что важно в GPU для ML

- **Объём видеопамяти (VRAM)** — часто главный ограничитель: модель, активации, градиенты и состояние оптимизатора должны поместиться. Для инференса модели в 7 млрд параметров в 16-битной точности нужно около 14 ГБ на веса плюс память на KV-кэш.[6]
- **Пропускная способность памяти** — при генерации текста LLM упирается именно в неё, а не в вычисления.
- **Тензорные ядра** — специализированные блоки для матричных операций в пониженной точности (FP16, BF16, FP8, FP4), дающие основной прирост скорости.
- **Связь между GPU** — NVLink и InfiniBand для обучения на многих картах.

| Класс | Примеры | Память |
|---|---|---|
| Игровые | RTX 4090, RTX 5090 | 24–32 ГБ |
| Рабочие станции | RTX 6000 Ada / Blackwell | 48–96 ГБ |
| Дата-центр | A100, H100, H200, B200 | 40–192 ГБ HBM |

## Смешанная точность

Обучение в 16-битных форматах (BF16, FP16) вдвое сокращает память и многократно ускоряет вычисления на тензорных ядрах; критичные части (накопление сумм, главная копия весов) остаются в FP32.[4] Для инференса веса сжимают ещё сильнее — до 8 и 4 бит; см. [Квантизация моделей](https://llmdocs.ru/wiki/quantization.md).

## Альтернативы CUDA

- **AMD ROCm** и язык HIP, близкий к CUDA; PyTorch поддерживает ROCm официально.[5]
- **Apple Silicon** — общая память CPU и GPU, бэкенд MPS в PyTorch и фреймворк MLX; удобен для локального запуска моделей.
- **Google TPU**, AWS Trainium, Intel Gaudi — специализированные ускорители в облаках.

Привязка экосистемы к CUDA («CUDA lock-in») — одна из причин доминирования NVIDIA на рынке.

## В контейнерах

GPU пробрасывается в [Docker](https://llmdocs.ru/wiki/docker.md)-контейнер через NVIDIA Container Toolkit (`docker run --gpus all`), в [Kubernetes](https://llmdocs.ru/wiki/kubernetes.md) — через device plugin, после чего поды запрашивают ресурс `nvidia.com/gpu`. Версия драйвера на хосте должна быть не ниже требуемой версией CUDA в образе.

## См. также

- [PyTorch](https://llmdocs.ru/wiki/pytorch.md)
- [Квантизация моделей](https://llmdocs.ru/wiki/quantization.md)
- [Локальный запуск LLM (llama.cpp, Ollama)](https://llmdocs.ru/wiki/local-llm.md)
- [vLLM и инференс-серверы](https://llmdocs.ru/wiki/vllm.md)
- [Сервинг моделей](https://llmdocs.ru/wiki/model-serving.md)

## Источники

1. [NVIDIA — CUDA C++ Programming Guide](https://docs.nvidia.com/cuda/cuda-c-programming-guide/)
2. [PyTorch — CUDA semantics](https://pytorch.org/docs/stable/notes/cuda.html)
3. [Krizhevsky, Sutskever, Hinton — ImageNet Classification with Deep CNNs (2012)](https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks)
4. [NVIDIA — Mixed Precision Training](https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/)
5. [AMD ROCm — документация](https://rocm.docs.amd.com/)
6. [Hugging Face — Model memory anatomy](https://huggingface.co/docs/transformers/model_memory_anatomy)
7. [Dao et al. — FlashAttention (2022)](https://arxiv.org/abs/2205.14135)
