CUDA
CUDA — программная платформа NVIDIA для вычислений на GPU
CUDA связывает программы с видеокартами NVIDIA. Через её runtime, драйвер и библиотеки фреймворки запускают матричные операции, свёртки и attention на GPU. Пользователю AI-приложения обычно не нужно писать CUDA-код, но важно подобрать совместимые видеокарту, драйвер и сборку фреймворка.
Коротко
Коротко. CUDA — платформа NVIDIA для параллельных вычислений на её GPU. PyTorch, TensorFlow, ComfyUI и другие программы вызывают CUDA-библиотеки вместо того, чтобы вручную управлять тысячами потоков видеокарты. Для запуска чаще всего нужны поддерживаемая NVIDIA GPU, достаточно новый драйвер и подходящая сборка приложения.
Что это такое
Название расшифровывается как Compute Unified Device Architecture. Под словом CUDA обычно смешивают несколько связанных вещей:
- модель программирования для GPU;
- runtime и driver API;
- компилятор и инструменты разработки;
- библиотеки для линейной алгебры, нейросетей и других задач;
- экосистему оптимизированных kernels.
CUDA работает только с поддерживаемыми видеокартами NVIDIA. На другом железе применяются свои backend: ROCm у AMD, MPS и Metal у Apple, DirectML в Windows, Vulkan и другие варианты. Их возможности зависят от фреймворка и конкретной операции, поэтому универсального рейтинга совместимости нет.
Почему GPU ускоряет нейросети
CPU хорошо выполняет сложный последовательный код и управляет всей системой. GPU рассчитан на множество однотипных операций над большими массивами данных. Нейросети постоянно перемножают матрицы и обрабатывают тензоры, поэтому такой параллелизм им подходит.
Упрощённая цепочка выглядит так:
- Python-код вызывает операцию во фреймворке.
- Фреймворк выбирает подходящую CUDA-реализацию.
- Драйвер ставит kernel в очередь выполнения.
- GPU читает данные из VRAM и обрабатывает их параллельно.
- Результат остаётся в памяти устройства для следующей операции либо копируется на CPU.
Передача данных между RAM и VRAM тоже занимает время. Поэтому маленькая одиночная операция не обязательно ускоряется: выгода появляется, когда вычислений достаточно много и данные не приходится постоянно гонять туда и обратно.
Driver, runtime и Toolkit
Эти три слоя часто путают.
Драйвер NVIDIA устанавливается в операционную систему и даёт приложениям доступ к GPU. Он должен быть достаточно новым для runtime, с которым собрана программа.
CUDA runtime — библиотеки, которые нужны готовому приложению во время работы. Python-пакет или дистрибутив программы нередко приносит совместимый runtime с собой.
CUDA Toolkit — набор для разработки: компилятор nvcc, заголовки, профилировщики и библиотеки. Он нужен при сборке собственных CUDA-расширений, но не всегда нужен для запуска готовой программы.
Как устроена совместимость
Новые драйверы обычно запускают приложения, собранные с более старым CUDA runtime. Обратное направление ограничено: свежему runtime может понадобиться более новый драйвер.
Начиная с современных семейств CUDA поддерживается совместимость между минорными версиями одной основной ветки при соблюдении минимальной версии драйвера, но отдельные новые функции и PTX-код могут требовать более свежего окружения. Точные границы публикуются в CUDA Compatibility Guide.
Практически это означает:
- сначала выбирается официальная сборка приложения или фреймворка;
- затем проверяется её требование к драйверу;
- системный Toolkit добавляется только при необходимости компиляции;
- после обновления проверяются ключевые extensions, потому что у них могут быть собственные бинарные зависимости.
Совет «поставить самую новую CUDA» редко решает проблему сам по себе. Важна согласованная матрица версий.
Пример на практике
Пользователь запускает ComfyUI и видит в журнале:
device: cuda:0
total VRAM: ...
cuda:0 означает первое доступное CUDA-устройство. Если GPU несколько, они получают следующие индексы. Как именно выбирается карта, зависит от программы и переменных окружения.
Если PyTorch не видит GPU, полезная проверка идёт по слоям:
- отображается ли карта в диспетчере устройств и
nvidia-smi; - соответствует ли драйвер требованиям сборки;
- установлена ли CUDA-сборка фреймворка, а не CPU-only-вариант;
- возвращает ли
torch.cuda.is_available()значениеTrue; - поддерживает ли расширение архитектуру этой видеокарты;
- не смешаны ли пакеты из разных окружений Python.
Такая последовательность обычно быстрее случайной переустановки нескольких Toolkit подряд.
Библиотеки и kernels
Основную скорость дают не только ядра GPU, но и программные библиотеки:
- cuBLAS ускоряет операции линейной алгебры;
- cuDNN содержит реализации типовых операций нейросетей;
- NCCL связывает несколько GPU;
- TensorRT оптимизирует инференс поддерживаемых моделей;
- специализированные attention- и quantization-kernels ускоряют отдельные архитектуры.
Пользовательский пакет может содержать заранее собранное расширение под ограниченный набор compute capability. Тогда свежий драйвер не исправит отсутствие нужного бинарного кода — понадобится другая сборка или компиляция из исходников.
С чем часто путают
- CUDA и GPU. GPU — устройство, CUDA — программная платформа для NVIDIA GPU.
- CUDA и CUDA cores. Cores — аппаратные блоки; CUDA описывает способ использовать устройство и его библиотеки.
- Driver и Toolkit. Драйвер нужен готовому приложению, Toolkit главным образом нужен разработчику и компилятору.
- CUDA и cuDNN. cuDNN — одна из библиотек поверх CUDA.
- CUDA и VRAM. CUDA управляет вычислениями и памятью, но не увеличивает физический объём VRAM.
- CUDA и PyTorch. PyTorch поддерживает несколько backend, а CUDA — один из них.
Альтернативные backend
ROCm даёт стек вычислений для поддерживаемых AMD GPU. MPS позволяет PyTorch выполнять операции через Metal на Apple Silicon. DirectML и Vulkan помогают запускать часть задач на другом оборудовании.
Одинаковая модель может поддерживаться не полностью: одна операция имеет оптимизированный kernel, другая откатывается на CPU, а сторонняя нода ожидает только CUDA. Поэтому совместимость оценивают по полному workflow, а скорость — на нужном размере и точности.
Частые ошибки и заблуждения
«Перед PyTorch обязательно нужен системный Toolkit». Для готовой бинарной сборки часто хватает драйвера и runtime, который приходит с пакетом. Toolkit нужен, если установка или extension компилирует CUDA-код.
«Новая версия CUDA всегда быстрее». Обновление может принести оптимизации, но скорость определяется также моделью, kernel, точностью, драйвером и архитектурой GPU.
«Любой CUDA-код работает на любой NVIDIA-карте». Старые и новые архитектуры поддерживают разный набор инструкций, а сборка может не содержать код для нужной compute capability.
«Если nvidia-smi работает, PyTorch тоже увидит GPU». Это подтверждает работу драйвера, но не правильность Python-окружения и установленного варианта фреймворка.
«Другие backend всегда медленнее». Результат зависит от операции и устройства. CUDA обладает большой экосистемой, но конкретный Apple, AMD или специализированный ускоритель может быть удачнее в своей задаче.
Частые вопросы
Какую версию CUDA ставить для ComfyUI? Ту, под которую собрана рекомендуемая версия PyTorch или готовый дистрибутив. Актуальная команда установки находится в документации сборки; фиксированный номер быстро устаревает.
Нужен ли Toolkit для обычного запуска? Не всегда. Если все зависимости поставляются готовыми бинарными пакетами, достаточно совместимого драйвера. Компиляция custom node может добавить требование Toolkit.
Почему после обновления драйвера всё ещё ошибка? Причина может быть в CPU-only-сборке, несовместимом extension, старой архитектуре GPU или смешанных пакетах. Сообщение об ошибке и версии внутри активного окружения полезнее номера установленного Toolkit.
Можно ли запустить CUDA-программу на AMD или Apple GPU? Не напрямую. Нужен другой backend либо специально адаптированная сборка программы.
Что такое compute capability? Это обозначение аппаратных возможностей поколения NVIDIA GPU. Компилятор использует его, чтобы включить подходящий машинный код и инструкции.
Главное
CUDA — программный путь от AI-фреймворка к NVIDIA GPU. Для готовой модели важна не «самая новая версия», а совместимая цепочка: видеокарта, драйвер, runtime, фреймворк и extensions. Если эту цепочку проверять по слоям, установка становится предсказуемой и не требует бесконечной смены Toolkit.