Проблема CUDA - как очистить установку CUDA в Win 10, чтобы решить cudaGetDevice () не удалось - PullRequest
0 голосов
/ 04 октября 2019

У меня ранее была CUDA 9.x, работающая на этой 64-битной домашней системе Win 10 (для карты 1080Ti), но мне нужно обновить ее до CUDA 10.0 для TensorFlow 2. Сначала я думал, что TF2 в порядке с CUDA 10.1, и поэтому сначалаустановил 10.1 и только позже обнаружил, что это должен быть CUDA 10.

Не могу заставить его работать ...

Чтобы проверить TF, я запустил это для проверки установки (блокнот Jupyterчерез Anaconda - только что созданная среда TF2)

import tensforflow as tf
print(tf.reduce_sum(tf.random.normal([1000, 1000])))

Я получаю эту ошибку в базовом тесте Python

InternalError: cudaGetDevice () не удалось. Статус: символ cudaGetErrorString не найден

Это говорит о том, что файл ключа не может быть найден, но я не могу определить основную причину - и очень мало обращений к этой информации об ошибке, ни один из которыхпомог мне.

Текущая конфигурация

Установлен CUDA 10.0 драйвер Nvidia 436.48 готовый к игре драйвер

Возможные проблемы и действия по их устранению

Очевидно, что ни у одного из них нет исправленных вещей

  1. Старые установки CUDA - 9.0, 9.1, 10.0, 10.1: все, кроме 10.0, удалено и ПК перезагрузился;Затем запустите установщик 10.0.
  2. Обновление файлов cudnn: сначала попытайтесь с оригиналами, а затем скопируйте файлы cudnn v7.6.3.30 в bin, включите, если нужно, lib
  3. Переключитесь с драйвера, готового к игре, наДрайвер "Studio"
  4. Проверьте все переменные среды - удалили все, что относится к CUDA! = 10.0
  5. Обновите переименованный nvcuda.dll в .old в system32 и перезапустите CUDAУстановщик 10.0 ... новый nvcuda был не произведен.
  6. Обновление 2 Я нашел nvcuda64.dll v 10.0.132 в хранилище драйверов и заменил nvcuda.dllв system32 с этим;после перезагрузки nvidia-smi теперь вообще не сообщает версию CUDA: (

Известные странности

  1. [замененоОбновление 2] nvidia-smi.exe сообщает о CUDA 10.1 (да, он доступен на моей Win 10) - но, проверяя в реестре, я не могу найти ничего, что бы указывало на то, что CUDA 10.1 задерживается там ... Обновление Обнаружено в C: \ Windows \ System32

  2. Несмотря на удаление, в реестре все еще есть CudaXYZWizardsPackage под ключом Computer \ HKEY_USERS.DEFAULT \ Software \ Microsoft \ VisualStudio \14.0_Config \ InstalledProducts с XYZ = 90, 91, 100, 101 - но я сомневаюсь, что это проблема для TF в Python;) Обновление нет ничего в C: \ Program Files (x86) \ Microsoft VisualStudio \ 2017 \ Community \ Common7 \ IDE \ Extensions \ NVIDIA, за исключением 10.0, поэтому просто оставьте пустыми регистр.

Другая информация

  1. Перед выполнением всех деинсталляций и т. Д. Я успешно собрал и запустил пример Nvidiaпроект часов в VS 2017, поэтому основы были в порядке (тогда)

Вопросы

  1. Как я могу полностью удалить все следы CUDA, чтобы начать сновас чистого листа?
  2. Как я мог бы диагностировать такие проблемы в будущем, чтобы решить, где проблема / что делать
  3. Можно ли решить эту конкретную проблему проще?
  4. (Новое) Где я могу получить nvcuda.dll 10.0 для замены в system32? - Ответ одна возможность из C: \ Windows \ System32 \ DriverStore \ FileRepository

Ответы [ 2 ]

1 голос
/ 04 октября 2019
  1. загрузить и установить Anaconda (Python 3.7): https://www.anaconda.com/distribution/

  2. в командной строке:

conda update conda
conda update python

conda create --name tensorflow-gpu
conda activate tensorflow-gpu
conda install pip jupyter
pip install tensorflow-gpu
conda install cudatoolkit=10.0 -c pytorch
в меню «Пуск» выберите Anaconda3 (64-bit) -> Jupyter Notebook (tensorflow-gpu)
import tensorflow as tf
%%time
with tf.device('/CPU:0'):
    a = tf.random.uniform([1000,1000])
    b = tf.random.uniform([1000,1000])
c = tf.matmul(a, b)

Время стены: 18,9 мс

%%time
with tf.device('/GPU:0'):
    a = tf.random.uniform([1000,1000])
    b = tf.random.uniform([1000,1000])
c = tf.matmul(a, b)

Время стены: 2,99 мс

0 голосов
/ 17 октября 2019

Это в основном расширенный комментарий, так как @diego запрашивает обновления ...

Я установил CUDA 10.0, а панель управления nVidia сообщает о nvcuda.dll как v 10.0.132

Я создал рекомендованный демонстрационный файл devicequery.exe с использованием Visual Studio 2017 из решения vs в C: \ ProgramData \ NVIDIA Corporation \ CUDA Samples \ v10.0 \ 1_Utilities \ deviceQuery (обратите внимание, что файл .exe заканчивается в C: \ ProgramData \NVIDIA Corporation \ CUDA Samples \ v10.0 \ bin \ win64 \ Debug)

Затем программа запустилась из командной строки и выдала следующий вывод.

devicequery Запуск ...

Версия запроса устройства CUDA (API времени выполнения) (статическое связывание CUDART)

Обнаружено 1 устройство (-и), поддерживающее CUDA

Устройство 0: драйвер CUDA "GeForce GTX 1080 Ti"Версия / время выполнения Версия 10.0 / 10.0 CUDA Возможность Номер основной / вспомогательной версии: 6.1 Общий объем глобальной памяти: 11264 МБ (11811160064 байт) (28) Мультипроцессоры, (128) CUDA Cores / MP: 3584 CUDA Cores GPU Максимальная тактовая частота:
1607 МГц (1,61 ГГц) Тактовая частота памяти:
5505 МГц Ширина шины памяти: 352-битный Размер кэша L2: 2883584 байт Максимальный размер текстуры (x, y, z) 1D = (131072), 2D = (131072,65536), 3D = (16384, 16384, 16384) Максимальный размер многослойной текстуры, (num) слоев 1D = (32768), 2048 слоев Максимальный размер многослойной текстуры, (num) слоев 2D = (32768, 32768), 2048 слоевОбщий объем постоянной памяти: 65536 байт. Общий объем разделяемой памяти на блок: 49152 байта. Общее количество регистров, доступных на блок: 65536 Размер деформации:
32 Максимальное количество потоков в многопроцессорном режиме: 2048 Максимальное количество потоков в блоке: 1024Максимальный размерный размер блока резьбы (x, y, z): (1024, 1024, 64) Максимальный размерный размер размера сетки (x, y, z): (2147483647, 65535, 65535) Максимальный шаг памяти:
2147483647 байт. Выравнивание текстуры: 512 байт. Одновременное копирование и выполнение ядра: Да с двумя механизмами копирования. Ограничение времени работы на ядрах: Да.
Встроенный общий доступ к графическому процессору. Память хоста: Нет. ping: Да Требование выравнивания для поверхностей: Да Устройство имеет поддержку ECC:
Отключено Режим драйвера устройства CUDA (TCC или WDDM): WDDM (модель драйвера дисплея Windows) Устройство поддерживает унифицированную адресацию (UVA): Да Устройство поддерживает предварительную выгрузку: Нет
Поддерживает запуск кооперативного ядра: нет Поддерживает запуск многоядерного ядра кооператива: нет Идентификатор домена PCI устройства / идентификатор шины / идентификатор местоположения: 0/1/0 Режим вычисления: <по умолчанию (несколько потоков хоста могут использовать :: cudaSetDevice ()с устройством одновременно)>

deviceQuery, драйвер CUDA = CUDART, версия драйвера CUDA = 10.0, версия CUDA Runtime = 10.0, NumDevs = 1 Результат = PASS

Что я сделал сдостичь этого? Трудно быть конкретным, потому что я не осознавал, что мне это удалось, но я вспоминаю установку драйвера дисплея на VGA, перезагрузку (дважды для безопасности), затем удаление CUDA 10.0, перезагрузку и установку 10.0.

Я только что заметилчто я построил deviceQuery с решением vs 2012, но я согласился с обновлением VS для решения open.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...