ПО для GPU

Как проверить версию CUDA и драйвера NVIDIA в Ubuntu

Разберитесь в выводе nvidia-smi, найдите CUDA Toolkit, с которым вы на самом деле компилируете код, и добавьте другую версию CUDA, не трогая драйвер.

На этой странице
  1. Версии драйвера и CUDA в выводе nvidia-smi
  2. Проверка CUDA Toolkit с помощью nvcc
  3. Как сочетаются версии драйвера и CUDA Toolkit
  4. Установка другой версии CUDA Toolkit в Ubuntu 24.04
  5. Включение persistence mode
  6. Устранение типичных ошибок

Чтобы проверить версию драйвера NVIDIA и CUDA на GPU-сервере, нужны две команды, потому что они отвечают на разные вопросы: nvidia-smi сообщает версию драйвера, а nvcc — версию CUDA Toolkit, с которым вы компилируете код. На этой странице объясняется, что показывает каждая из них и как должны соотноситься их версии, как установить ещё один CUDA Toolkit рядом с имеющимся в Ubuntu 24.04 или 22.04 и как исправить ошибки, с которыми вы, скорее всего, столкнётесь.

Версии драйвера и CUDA в выводе nvidia-smi

nvidia-smi
nvidia-smi --query-gpu=index,name,driver_version,memory.total --format=csv
cat /proc/driver/nvidia/version

В заголовке вывода nvidia-smi указаны три версии:

  • NVIDIA-SMI — версия самой утилиты; обычно она совпадает с версией драйвера.
  • Driver Version — версия установленного драйвера.
  • CUDA Version — самая новая версия CUDA, которую поддерживает этот драйвер. Это не значит, что CUDA Toolkit этой версии установлен.

/proc/driver/nvidia/version показывает модуль ядра, который загружен на самом деле. Если его версия отличается от версии установленных пакетов драйвера, например после обновления, значит, сервер ждёт перезагрузки.

Проверка CUDA Toolkit с помощью nvcc

nvcc --version
ls -d /usr/local/cuda*

Версию CUDA Toolkit показывает строка «Cuda compilation tools, release X.Y». /usr/local/cuda указывает на CUDA Toolkit по умолчанию, а другие версии находятся в /usr/local/cuda-X.Y. Если команда nvcc не найдена, добавьте CUDA Toolkit в окружение (чтобы настройка сохранилась, допишите эти строки в ~/.bashrc):

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

Фреймворки часто не используют этот CUDA Toolkit. Wheel-пакеты PyTorch и большинство контейнеров содержат собственные библиотеки CUDA, и им нужен лишь достаточно новый драйвер, как показано в руководстве по PyTorch и vLLM. Проверить, что видит PyTorch, можно так:

python3 -c "import torch; print(torch.__version__, torch.version.cuda,
  torch.cuda.is_available())"

Как сочетаются версии драйвера и CUDA Toolkit

  • Драйвер должен быть не старее кода. Значение CUDA Version в выводе nvidia-smi должно быть не ниже версии CUDA, на которую рассчитаны ваш CUDA Toolkit, wheel-пакет или контейнер. Старые версии CUDA Toolkit работают на новых драйверах.
  • У совместимости минорных версий есть пределы. В рамках одной мажорной версии, например 12.x, NVIDIA позволяет многим приложениям, собранным с более новой минорной версией, работать на более старом драйвере той же мажорной версии, но такие функции, как JIT-компиляция PTX, могут не работать. Прежде чем на это полагаться, проверьте.
  • Архитектура GPU задаёт минимальную версию. GPU на архитектуре Hopper (H100, H200) работают с CUDA 12 и новее. Для GPU на архитектуре Blackwell (B200, RTX PRO 6000, RTX 5090) нужны CUDA 12.8 или новее и сборки фреймворков с поддержкой Blackwell; минимальную версию для B300 уточните в примечаниях к выпуску NVIDIA.

Простое правило: оставьте установленный драйвер и выбирайте версии CUDA Toolkit, wheel-пакеты и теги контейнеров, у которых версия CUDA не выше значения CUDA Version в nvidia-smi.

Установка другой версии CUDA Toolkit в Ubuntu 24.04

Дополнительный CUDA Toolkit можно установить из apt-репозитория NVIDIA рядом с уже имеющимся, не заменяя драйвер. Если в /etc/apt/sources.list.d/ уже есть запись о репозитории CUDA, пропустите шаг 1.

  1. Добавьте ключ репозитория NVIDIA. В Ubuntu 22.04 замените ubuntu2404 на ubuntu2204:
    repo=https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64
    wget $repo/cuda-keyring_1.1-1_all.deb
    sudo dpkg -i cuda-keyring_1.1-1_all.deb
    sudo apt update
  2. Посмотрите, какие версии CUDA Toolkit доступны:
    apt-cache search --names-only '^cuda-toolkit-[0-9]+-[0-9]+$'
  3. Установите пакет, содержащий только CUDA Toolkit нужной версии, например 12.8:
    sudo apt install -y cuda-toolkit-12-8
    Всегда используйте cuda-toolkit-X-Y. Пакеты cuda, cuda-X-Y и cuda-drivers устанавливают ещё и драйвер.
  4. Выберите эту версию в своей командной оболочке и проверьте:
    export PATH=/usr/local/cuda-12.8/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda-12.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
    nvcc --version
    Должно отобразиться «release 12.8». Если CUDA Toolkit установлены из пакетов NVIDIA, команда sudo update-alternatives --config cuda меняет версию по умолчанию, на которую указывает /usr/local/cuda.

Когда репозиторий NVIDIA подключён, последующий apt upgrade может предложить более новые пакеты драйвера. Прежде чем подтверждать обновление, просмотрите список пакетов или зафиксируйте драйвер, как описано в руководстве по образам ОС. Если другая версия CUDA нужна только одному проекту, часто проще использовать контейнер: см. руководство по Docker-контейнерам с GPU.

Включение persistence mode

Persistence mode сохраняет драйвер инициализированным, даже когда GPU не использует ни один процесс, поэтому задачи запускаются без ожидания загрузки драйвера. Проверьте текущее состояние, затем включите режим:

nvidia-smi --query-gpu=index,persistence_mode --format=csv
sudo nvidia-smi -pm 1

Для каждого GPU должно отображаться «Enabled». После перезагрузки настройка не сохраняется. Если после перезапуска режим выключен, включайте его при загрузке через crontab пользователя root: выполните sudo crontab -e и добавьте строку @reboot /usr/bin/nvidia-smi -pm 1.

Устранение типичных ошибок

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver

Модуль ядра не загружен — часто после обновления ядра, для которого модуль не был собран. Соберите сведения:

uname -r
lsmod | grep nvidia
dkms status
sudo dmesg | grep -i -E 'nvidia|nvrm'

Если dkms status показывает модуль NVIDIA для других ядер, но не для того, которое выводит uname -r, установите соответствующие заголовочные файлы ядра, пересоберите модуль и перезагрузите сервер:

sudo apt install -y linux-headers-$(uname -r)
sudo dkms autoinstall
sudo reboot

Если dkms не установлен, драйвер использует заранее собранные модули: создайте в личном кабинете тикет в поддержку и приложите вывод команд выше.

Failed to initialize NVML: Driver/library version mismatch

Пакеты драйвера обновились, пока был загружен старый модуль. Выполните sudo reboot. После перезагрузки nvidia-smi и /proc/driver/nvidia/version должны показывать одну и ту же версию. Фиксация пакетов драйвера предотвращает эту ошибку.

CUDA error 802, system not yet initialized

На 8-GPU-серверах HGX, прежде чем CUDA сможет использовать фабрику NVSwitch, должен быть запущен NVIDIA Fabric Manager точно той же версии, что и драйвер. Проверьте systemctl status nvidia-fabricmanager, перезапустите службу командой sudo systemctl restart nvidia-fabricmanager, а если она не запускается, создайте тикет в личном кабинете.

CUDA driver version is insufficient for CUDA runtime version

Программа, wheel-пакет или контейнер собраны под более новую версию CUDA, чем поддерживает драйвер. Используйте сборку под более старую версию CUDA или создайте в личном кабинете тикет об обновлении драйвера. Об аппаратных ошибках (сообщения Xid в dmesg) читайте в руководстве по мониторингу GPU.

Часто задаваемые вопросы

Почему nvidia-smi и nvcc показывают разные версии CUDA?

nvidia-smi показывает самую новую версию CUDA, которую поддерживает драйвер, а nvcc — версию CUDA Toolkit, с которым вы компилируете код. Если CUDA Toolkit старее, чем CUDA Version драйвера, это нормально и всё работает.

Нужен ли CUDA Toolkit, чтобы запускать PyTorch?

Нет. Wheel-пакеты PyTorch и большинство контейнеров содержат собственные библиотеки CUDA, и им нужен лишь достаточно свежий драйвер. CUDA Toolkit понадобится, если вы сами компилируете код на CUDA.

Можно ли самостоятельно обновить драйвер NVIDIA?

Да, у вас полный root-доступ. Запланируйте перезагрузку, на 8-GPU-серверах HGX держите Fabric Manager той же версии, что и драйвер, а если нужен совет, сначала создайте тикет в личном кабинете.

Не получается?

Создайте тикет в личном кабинете: укажите сервер, что вы запускали, и приложите вывод ошибок, если он есть. Инженеры отвечают круглосуточно.

Создать тикет

Вход в FullGPU

Управляйте GPU-серверами, балансом и счетами.

Впервые в FullGPU? Создать аккаунт