Как посмотреть видеокарту в PyTorch: полное руководство

Запуск скрипта torch.cuda.is_available() возвращает False, несмотря на наличие мощной NVIDIA RTX в системе, что блокирует обучение нейросетей. Эта ошибка часто указывает на рассинхронизацию между установленным драйвером и версией библиотеки, либо на некорректную конфигурацию окружения перед началом работы. Чтобы устранить проблему, необходимо сначала убедиться, что системе вообще виден GPU, а затем проверить, recognizes ли именно PyTorch это устройство для вычислений.

Визуальная проверка в диспетчере задач иногда вводит в заблуждение, показывая загрузку GPU, но не раскрывая деталей о том, насколько глубоко система интегрирована в фреймворк. Для точной диагностики требуется использовать специализированные утилиты и методы прямого обращения к API, которые позволяют увидеть не только наличие карты, но и её идентификатор, модель и доступное количество памяти.

Базовая проверка доступности GPU в окружении Python

Первым шагом всегда должно быть подтверждение того, что библиотека PyTorch была установлена с поддержкой CUDA, а не в режиме CPU-only. Если вы скачали версию пакета без учета аппаратной части, она просто не будет видеть видеокарту, даже если драйверы исправны. Это критический момент, который часто упускают при первичной настройке среды разработки.

import torch

print(torch.__version__)

print(torch.cuda.is_available())

Команда torch.cuda.is_available() является фундаментом для любой дальнейшей работы. Если она возвращает True, значит, CUDA найдена и готова к использованию. Однако это лишь начало: вам нужно узнать, какая именно карта доступна, если у вас установлено несколько ускорителей или гибридная система с NVIDIA Optimus.

⚠️ Внимание: Если torch.cuda.is_available() возвращает False, не пытайтесь сразу переустанавливать драйверы. Чаще всего проблема кроется в неправильной версии PyTorch (например, установка CPU-версии поверх CUDA-версии).

Вам необходимо обратить внимание на версию Python и совместимость её с библиотекой. Часто пользователи игнорируют рекомендации официальной документации, устанавливая последнюю версию Python 3.12, в то время как многие специфические сборки PyTorch могут иметь задержку в поддержке новых релизов интерпретатора. Это создает ложное впечатление поломки оборудования.

Утилита nvidia-smi и её роль в диагностике

Команда nvidia-smi в терминале — это стандартный инструмент, который показывает состояние видеокарт независимо от того, какие библиотеки установлены в Python. Запустив её, вы увидите таблицу с температурой, загрузкой и версиями драйверов, что помогает отличить проблему на уровне железа от проблемы на уровне софта. Если утилита показывает карту, значит, драйвер работает корректно, и сбой нужно искать внутри скрипта.

Однако nvidia-smi не является частью PyTorch, поэтому она не может сказать, может ли конкретная версия библиотеки использовать данное устройство. В некоторых случаях, особенно при использовании старых карт серии Maxwell или Pascal, новые версии CUDA могут не поддерживать архитектуру вашей GPU для вычислений, хотя утилита их видит.

Следующий шаг — проверка списка устройств внутри самого интерпретатора. Это позволит увидеть, как PyTorch интерпретирует доступное оборудование. Вывод команды может отличаться от того, что вы видите в системных настройках Windows или Linux.

  • Запустите nvidia-smi в терминале консоли, чтобы увидеть физическое состояние карты.
  • Сравните индекс устройства (GPU ID) с тем, что показывает Python.
  • Проверьте версию CUDA, которую поддерживает драйвер, и сравните с версией, требуемой вашим PyTorch.
Детали архитектуры

В старых системах с гибридной графикой (Intel + NVIDIA) утилита nvidia-smi может показать карту, но PyTorch будет использовать только интегрированное ядро, если не настроен режим дискретного рендеринга.

Получение списка доступных видеокарт через код

Чтобы увидеть детальную информацию о каждой доступной карте, необходимо использовать функцию torch.cuda.device_count() в связке с циклом перебора. Это покажет не просто количество, но и позволит узнать, какая именно GPU имеет индекс 0, а какая — 1. В многопроцессорных конфигурациях порядок устройств может меняться в зависимости от загрузки системы и настроек BIOS.

for i in range(torch.cuda.device_count()):

print(f"Device {i}: {torch.cuda.get_device_name(i)}")

print(f" Memory: {torch.cuda.get_device_properties(i).total_memory / 1024**3:.2f} GB")

Этот код выводит полное название модели, например, NVIDIA GeForce RTX 4090, и объем видеопамяти в гигабайтах. Такая проверка незаменима, если вы работаете в серверной среде или на машине с несколькими картами, где важно задать конкретный индекс для обучения. PyTorch по умолчанию использует устройство под индексом 0, но вы можете явно указать другое.

⚠️ Внимание: На ноутбуках с технологиями NVIDIA Optimus или Hybrid Graphics устройство с индексом 0 может быть интегрированной графикой Intel или AMD, если дискретная карта не передана в Linux-контейнер или не активирована в Windows.

Иногда возникает ситуация, когда device_count() возвращает 1, но название устройства показывает «NVIDIA GeForce RTX 3060», а при попытке запуска тяжелой модели выдается ошибка о нехватке памяти. Это может означать, что система видит карту, но драйвер не может выделить достаточно памяти из-за ограничений WDDM в Windows.

☑️ Проверка доступности GPU

Выполнено: 0 / 4

Работа с индексацией устройств и контекстом

Важно понимать, что PyTorch нумерует устройства с нуля, и это может не совпадать с порядком, который вы видите в диспетчере устройств Windows. Если у вас две карты, и вы хотите использовать вторую, вам нужно явно передать её индекс в функцию to() или создать тензор на устройстве cuda:1. Контекст вычислений привязывается к конкретному индексу, и его смена требует аккуратности.

Использование torch.cuda.current_device() позволяет узнать, на каком именно устройстве в данный момент выполняются операции. Это полезно при отладке скриптов, где вы переходите с CPU на GPU и обратно, или переключаетесь между картами в многопоточном режиме. Ошибка в выборе индекса часто приводит к падению скрипта с сообщением об отсутствии памяти на неактивном устройстве.

Для корректной работы с несколькими картами часто используют torch.cuda.set_device(index), чтобы переключить текущий контекст. Это действие влияет на все последующие операции, если явно не указывать устройство для каждого тензора. В профессиональной среде Deep Learning управление контекстом является критическим навыком для оптимизации обучения.

Таблица соответствия версий CUDA и драйверов

Совместимость версий CUDA и драйверов — это частая причина, почему PyTorch не видит видеокарту, несмотря на её наличие. Ниже приведена таблица с основными требованиями для популярных версий библиотеки. Обратите внимание, что PyTorch часто требует более новой версии драйвера, чем минимально поддерживаемую NVIDIA.

Версия PyTorch Требования CUDA Мин. версия драйвера Поддерживаемые серии GPU
2.1.x CUDA 12.1 535.xx RTX 30xx, 40xx, A100
2.0.x CUDA 11.8 525.xx RTX 20xx, 30xx, 40xx
1.13.x CUDA 11.7 470.xx RTX 10xx, 20xx, 30xx
1.12.x CUDA 11.6 496.xx Kepler, Maxwell, Pascal, Turing

Если ваша карта старая и не поддерживается последней версией CUDA, вам придется использовать более старую сборку PyTorch. Например, для карт серии GTX 1050 или GTX 970 может потребоваться специальная конфигурация с CUDA 11.3 или ниже. Это критическое ограничение, которое нельзя обойти простой переустановкой драйвера.

Иногда Driver Version в выводе nvidia-smi показывает самую последнюю версию, но CUDA Runtime, доступная в системе, может быть устаревшей. Это происходит, если вы обновили драйвер, но не обновили переменные окружения или не пересобрали библиотеки в проекте. Проверка nvcc --version поможет уточнить ситуацию.

Альтернативные методы проверки и ОС

В Linux-средах проверка PyTorch может отличаться из-за особенностей прав доступа к устройствам. Часто пользователи сталкиваются с тем, что команда nvidia-smi работает, а Python выдает ошибку доступа к файлам устройства /dev/nvidia0. Это решается добавлением пользователя в группу video или nvidia с правами sudo.

На macOS с чипами Apple Silicon (M1, M2, M3) ситуация принципиально иная: PyTorch не использует CUDA, так как архитектура ARM отличается от CUDA. Вместо этого используется Metal Performance Shaders (MPS). Для проверки доступности такой карты используется команда torch.backends.mps.is_available(), что часто вызывает путаницу у новичков.

В Windows 10/11, если вы используете WSL2 (Windows Subsystem for Linux), передача видеокарты в Linux-контейнер может быть настроена некорректно. В этом случае PyTorch внутри WSL2 будет видеть карту, но не сможет её использовать без включения поддержки GPU в настройках подсистемы. Проверьте наличие драйверов в Windows, даже если вы работаете внутри Linux-терминала.

Частые ошибки и их устранение

Одной из самых распространенных ошибок является сообщение RuntimeError: Found no NVIDIA driver on your system. Это не всегда означает, что драйвер не установлен; часто проблема в том, что версия PyTorch ожидает CUDA 12, а в системе установлена только CUDA 11. Решение — переустановить библиотеку, выбрав версию, соответствующую вашему драйверу.

Другая частая проблема — CUDA out of memory, когда карта видна, но не может выделить память. Это может быть связано с тем, что другие процессы уже заняли видеопамять. Используйте nvidia-smi, чтобы найти и завершить "прожорливые" процессы, либо уменьшите размер батча (batch size) в вашем скрипте.

Иногда помогает принудительное указание видимых устройств через переменную окружения. Если у вас несколько карт и вы хотите использовать только одну, вы можете скрыть остальные, установив CUDA_VISIBLE_DEVICES=1 перед запуском скрипта. Это упрощает отладку и гарантирует, что PyTorch будет работать строго на указанном устройстве.

  • Проверьте, не запущен ли другой процесс, который уже захватил GPU.
  • Убедитесь, что файл torch установлен с флагом +cu118 или соответствующей версией CUDA.
  • Перезагрузите компьютер после обновления драйверов для корректной инициализации.

Если все вышеперечисленные шаги не помогли, попробуйте создать новый виртуальный окружение (venv или conda) и установить PyTorch с нуля, используя официальный установщик для вашей конфигурации. Конфликты версий в старых окружениях — это скрытая причина многих проблем, которые трудно диагностировать без чистого старта.

⚠️ Внимание: Не используйте pip install torch без указания индекса пакета, если у вас специфическая версия CUDA. Всегда используйте команду с сайта pytorch.org, подобранную под вашу систему.

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

Почему PyTorch видит видеокарту, но выдает ошибку CUDA out of memory?

Это означает, что память карты занята другими процессами или вы пытаетесь загрузить модель слишком большого размера. Проверьте загрузку в nvidia-smi, закройте лишние приложения или уменьшите размер батча (batch size) в коде.

Как проверить, поддерживает ли моя старая карта последние версии PyTorch?

Посетите официальный сайт NVIDIA, найдите свою модель и посмотрите максимальную версию Compute Capability. Затем сверьте её с требованиями новой версии PyTorch. Если карта устарела (например, архитектура Maxwell), используйте более старые версии библиотеки.

Что делать, если torch.cuda.is_available() возвращает False на ноутбуке?

Скорее всего, у вас включен режим энергосбережения, и система использует только встроенную графику. Зайдите в настройки графики Windows, найдите свой скрипт или Python и укажите запускать его с помощью "Высокопроизводительного процессора" (вашей дискретной NVIDIA).

Можно ли использовать PyTorch с видеокартой AMD?

Да, но это требует установки специальной версии PyTorch с поддержкой ROCm (для Linux) или DirectML (для Windows). Обычная CUDA-версия не будет работать с картами AMD Radeon, так как архитектура командная.

Как узнать, какая именно карта используется, если их несколько?

Выведите список устройств с помощью цикла for i in range(torch.cuda.device_count()): print(torch.cuda.get_device_name(i)). Это покажет имена всех доступных карт и их индексы, чтобы вы могли понять, какая из них является cuda:0.