Логотип Тераферма Тераферма Регистрация

21 октября 2026 г. · Анатолий Крылов, редактор Тераферма

CUDA не видит видеокарту на сервере: диагностика за 5 минут и 8 частых причин

Видеокарта под лупой и терминал рядом — диагностика, почему CUDA не видит видеокарту на сервере

Если CUDA не видит видеокарту, причина почти всегда находится за 5 минут пятью командами: nvidia-smi, which python, torch.version.cuda, torch.cuda.is_available() и echo $CUDA_VISIBLE_DEVICES. Первая показывает, жива ли карта и драйвер, остальные показывают, видит ли её ваше окружение Python. На арендованном сервере в 9 случаях из 10 карта исправна, а сломано окружение: CPU-сборка PyTorch, не тот Python или переменная среды.

Команды подходят для любого Linux-сервера с NVIDIA, примеры приведены для серверов Тераферма с шаблоном «PyTorch + CUDA + Jupyter».

Шаг 1. Пять команд диагностики

Откройте терминал (по SSH или в Jupyter: File → New → Terminal) и выполните по очереди:

nvidia-smi
which python && python --version
python -c "import torch; print(torch.__version__, torch.version.cuda)"
python -c "import torch; print(torch.cuda.is_available(), torch.cuda.device_count())"
echo "CUDA_VISIBLE_DEVICES=[$CUDA_VISIBLE_DEVICES]"

Как читать результат:

Что видите Где проблема Куда смотреть
nvidia-smi не запускается или пишет ошибку машина, драйвер причина 8
torch.version.cuda выводит None CPU-сборка PyTorch причина 1
is_available() = False, версия CUDA есть драйвер старее PyTorch или переменная среды причины 2, 4
True, но device_count() меньше, чем карт в заказе CUDA_VISIBLE_DEVICES причина 4
В терминале True, в ноутбуке False разные окружения Python причина 5
True, но ошибка no kernel image is available PyTorch без поддержки архитектуры карты причина 3
Ошибка forward compatibility was attempted on non supported HW лишние библиотеки cuda-compat в образе причина 6

Сначала всегда смотрите на nvidia-smi. В правом верхнем углу таблицы стоят версия драйвера и CUDA Version: это максимальная версия CUDA, которую поддерживает драйвер, а не та, что установлена. Ниже идут модель карты, объём памяти и процессы на GPU.

Причина 1. Установлена CPU-сборка PyTorch

Самая частая причина. pip install torch в некоторых окружениях ставит сборку без CUDA, а пакет из requirements.txt с жёсткой версией torch==… может тихо перезаписать уже установленный CUDA-PyTorch.

Признак: torch.version.cuda выводит None, а в torch.__version__ стоит +cpu.

Решение: переустановить PyTorch с индекса CUDA:

pip uninstall -y torch torchvision torchaudio
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128

Чтобы это не повторилось при установке зависимостей проекта, зафиксируйте torch через файл ограничений:

pip freeze | grep -E "^torch" > /workspace/constraints.txt
pip install -r requirements.txt -c /workspace/constraints.txt

Если какой-то пакет требует другую версию torch, pip откажется ставить его и покажет конфликт, вместо того чтобы молча заменить PyTorch.

Причина 2. PyTorch собран под более новую CUDA, чем умеет драйвер

PyTorch приносит с собой библиотеки CUDA, но драйвер на машине должен их поддерживать. Если вы поставили сборку под CUDA 12.8, а nvidia-smi показывает CUDA Version: 12.2, PyTorch напишет The NVIDIA driver on your system is too old или просто вернёт False.

Сверьте два числа:

Что Где посмотреть
Максимальная CUDA драйвера nvidia-smi, правый верхний угол
CUDA, под которую собран PyTorch python -c "import torch; print(torch.version.cuda)"

Версия PyTorch должна быть не новее версии драйвера. Если новее, поставьте сборку под более старую CUDA, например cu124 или cu121, с тем же --index-url. Драйвер на арендованной машине обновить нельзя: его ставит владелец, а контейнер получает его с хоста. Поэтому, если нужна именно свежая CUDA, перезапустите сервер на другой машине.

На Тераферме машины подбираются под CUDA 12.8 базового шаблона, поэтому с ним эта причина почти не встречается. Она появляется, когда вы ставите nightly-сборку PyTorch или свой образ под CUDA 13.

Причина 3. RTX 50 и старый PyTorch: no kernel image

Карты Blackwell (RTX 5090, 5080, 5070 Ti, RTX PRO 6000) имеют архитектуру sm_120. Сборки PyTorch под CUDA 12.4 и старше её не знают. Симптом обманчивый: is_available() возвращает True, а первая же операция на GPU падает с ошибкой:

RuntimeError: CUDA error: no kernel image is available for execution on the device

или с предупреждением sm_120 is not compatible with the current PyTorch installation.

Решение: PyTorch 2.7 или новее со сборкой под CUDA 12.8:

pip install --upgrade torch torchvision --index-url https://download.pytorch.org/whl/cu128
python -c "import torch; print(torch.cuda.get_arch_list())"

В списке архитектур должен появиться sm_120. Та же проблема бывает у отдельных библиотек со своими CUDA-ядрами (xformers, flash-attn, bitsandbytes старых версий): обновите их до сборок с поддержкой Blackwell. Если на RTX 50 что-то не собирается, проще временно взять карту прошлого поколения, например аренда RTX 4090 с тем же объёмом памяти, что у RTX 3090.

Причина 4. Переменная CUDA_VISIBLE_DEVICES

Эта переменная говорит программам, какие карты им можно видеть. Если она пустая строка, PyTorch не увидит ни одной карты. Если в ней 0, на сервере с четырьмя картами будет видна только первая.

echo "[$CUDA_VISIBLE_DEVICES]"
unset CUDA_VISIBLE_DEVICES

Переменную часто выставляют скрипты запуска, .bashrc из чужого репозитория или ноутбук, который кто-то скопировал вместе с ячейкой os.environ["CUDA_VISIBLE_DEVICES"] = "". Учтите: переменную нужно менять до первого import torch, после импорта она уже не действует.

Причина 5. Не тот Python: Jupyter, conda и venv

В терминале is_available() возвращает True, а в ноутбуке Jupyter — False или ModuleNotFoundError. Значит, ядро ноутбука запущено из другого окружения.

Проверьте в ячейке:

import sys; print(sys.executable)

и в терминале which python. Если пути разные, у вас два Python. Чтобы ноутбук видел ваше окружение, зарегистрируйте его как ядро:

source /workspace/venv/bin/activate
pip install ipykernel
python -m ipykernel install --user --name myenv

После этого в Jupyter выберите ядро myenv в правом верхнем углу. В базовом шаблоне Тераферма PyTorch с CUDA уже стоит в основном Python образа, и создавать venv для простых задач не нужно.

Причина 6. Лишние библиотеки cuda-compat в своём образе

Если вы запускаете свой Docker-образ, собранный под серверные карты, в нём может быть пакет cuda-compat. Он нужен, чтобы новая CUDA работала со старым драйвером на A100 и H100, но на игровых картах вызывает ошибку:

CUDA error: forward compatibility was attempted on non supported HW

Решение: убрать путь к compat-библиотекам из LD_LIBRARY_PATH или удалить пакет при сборке образа:

echo $LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$(echo $LD_LIBRARY_PATH | tr ':' '\n' | grep -v compat | paste -sd:)

Для своего образа лучше брать за основу официальный pytorch/pytorch или nvidia/cuda нужной версии без compat-пакетов.

Причина 7. TensorFlow и JAX не видят GPU

У TensorFlow и JAX свои требования к CUDA и cuDNN, и PyTorch-образ их не покрывает. Проще всего ставить пакеты, которые сами принесут нужные библиотеки:

pip install "tensorflow[and-cuda]"
python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"

pip install "jax[cuda12]"
python -c "import jax; print(jax.devices())"

Если список пустой, посмотрите предупреждения при импорте: TensorFlow прямо пишет, какую библиотеку не нашёл. Ставить TensorFlow и PyTorch в одно окружение можно, но версии CUDA-библиотек у них иногда конфликтуют, надёжнее держать отдельный venv.

Причина 8. Сама машина: nvidia-smi не работает

Если nvidia-smi не запускается или пишет одно из сообщений ниже, ваш код ни при чём:

Сообщение Что значит
Failed to initialize NVML: Driver/library version mismatch на хосте обновили драйвер без перезагрузки
No devices were found карта отвалилась от шины или перегрелась
Unable to determine the device handle for GPU…: Unknown Error аппаратный сбой карты
в таблице меньше карт, чем в заказе одна из карт недоступна

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

При запуске Тераферма сама сверяет модель и число карт с заказом: если проверка прошла, в карточке сервера стоит отметка об этом. Но карта может отказать и позже, под нагрузкой, поэтому nvidia-smi остаётся первой командой при любой странности.

Скрипт проверки окружения

Сохраните его в /workspace/check_gpu.py и запускайте после установки зависимостей:

import os, sys, subprocess
print("python:", sys.executable)
print("CUDA_VISIBLE_DEVICES:", repr(os.environ.get("CUDA_VISIBLE_DEVICES")))
print(subprocess.run(["nvidia-smi", "--query-gpu=name,memory.total,driver_version",
                      "--format=csv,noheader"], capture_output=True, text=True).stdout)
import torch
print("torch:", torch.__version__, "cuda:", torch.version.cuda)
print("available:", torch.cuda.is_available(), "count:", torch.cuda.device_count())
if torch.cuda.is_available():
    print("arch:", torch.cuda.get_arch_list())
    x = torch.randn(4096, 4096, device="cuda")
    print("matmul ok:", (x @ x).sum().item() != 0, torch.cuda.get_device_name(0))

Последняя строка выполняет реальное умножение матриц на карте. Если она прошла, CUDA работает: дальше проблема уже в конкретной библиотеке, а не в связке «драйвер — PyTorch».

Начинайте с nvidia-smi. Если он работает, карта и драйвер в порядке, и причину нужно искать в окружении: CPU-сборка PyTorch, версия CUDA, RTX 50 без сборки cu128, CUDA_VISIBLE_DEVICES или не тот Python в Jupyter. Если nvidia-smi не работает, не тратьте время на отладку, перезапустите сервер на другой машине.

Чтобы не собирать окружение с нуля, запускайте сервер с шаблоном «PyTorch + CUDA + Jupyter»: PyTorch 2.7.1 и CUDA 12.8 там уже согласованы с драйвером, включая RTX 50. Пошаговое подключение описано в статье первый запуск на арендованной GPU, выбор карты в каталоге аренды GPU.

Вопросы по теме

Почему torch.cuda.is_available() возвращает False?

Чаще всего установлена CPU-сборка PyTorch: её ставит pip install torch из другого индекса или зависимость, которая перезаписала torch. Проверьте torch.version.cuda: если там None, переустановите PyTorch с индекса CUDA, например pip install torch --index-url https://download.pytorch.org/whl/cu128. Другие частые причины — пустая переменная CUDA_VISIBLE_DEVICES и Jupyter, который запущен из другого окружения Python.

nvidia-smi видит карту, а PyTorch — нет. Что делать?

Значит, драйвер и карта в порядке, а проблема в окружении Python. Проверьте три вещи: torch.version.cuda не None, CUDA_VISIBLE_DEVICES не пустая, команда which python указывает на тот Python, куда вы ставили пакеты. В 90% случаев причина в одной из них.

Что значит ошибка no kernel image is available for execution on the device?

PyTorch собран без поддержки архитектуры вашей карты. Обычно это RTX 5090, 5080 и 5070 Ti (архитектура sm_120) со сборкой PyTorch под CUDA 12.4 или старше. Нужен PyTorch 2.7+ со сборкой под CUDA 12.8. На Тераферме базовый шаблон уже содержит PyTorch 2.7.1 с CUDA 12.8.

Что делать, если nvidia-smi не запускается на арендованном сервере?

Если nvidia-smi пишет Failed to initialize NVML или No devices were found, проблема на стороне машины, а не вашего кода. Скачайте результаты из /workspace, остановите сервер и запустите новый на другой машине, а номер сервера пришлите в поддержку.

Подберите GPU

20 моделей с поминутной оплатой в рублях.