OpenCL не отображает графический процессор Nvidia

Надеюсь, это не дубликат, я огляделся, но поправьте меня, если я ошибаюсь.

Недавно я установил pyopencl через Anaconda, и он работает на моем процессоре Intel без проблем. Однако, когда я звоню:

for platform in get_platforms():
    print(platform.name)

ctx = create_some_context()

for dev in ctx.devices:
    print(dev.name)

Все, что я получаю в ответ, это:

Portable Computing Language
Choose platform:
[0] <pyopencl.Platform 'Portable Computing Language' at 0x7f0ff2205020>
>> 0
Choice [0]:0
Set the environment variable PYOPENCL_CTX='0' to avoid being asked again.
pthread-Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz

У меня есть Nvidia GeForce GTX 1050 Ti и версия драйвера 390.87 с CUDA 9.1, которая должна быть совместима в соответствии с примечаниями к выпуску Nvidia. Я также использую Linux Mint 19.1 (если это уместно), а также я немного нуб, когда дело доходит до этого, поскольку мой опыт связан с физикой, а не с информатикой.

Я где-то читал (не помню где), что у меня должен быть файл nvidia.icd, но есть только файл pocl.icd в /home//anaconda3/etc/OpenCL/vendors, и я не знаю, как/ где взять файл nvidia.icd.

Заранее спасибо за любую помощь, и дайте мне знать, если вам нужна дополнительная информация!

Изменить: добавлен результат get_platforms()

Изменить 2: мне удалось найти файл nvidia.icd в моем каталоге /etc/OpenCL/vendors. Я скопировал это в каталог Anaconda, /home/<user>/anaconda3/etc/OpenCL/vendors и pyopencl теперь распознают Nvidia CUDA как платформу, а мой GPU как устройство.

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


person diatomicDisaster    schedule 21.01.2019    source источник


Ответы (4)


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

Второе редактирование OP, когда он скопировал файл nvidia.icd из /etc/OpenCL/vendors, сработало для меня, но мне показалось это неправильным, поэтому я немного углубился в PyOpenCL документация, в которой рекомендуется в дополнение к пакету PyOpenCL выполнять conda install ocl-icd-system. (См. раздел «Использование драйверов, поставляемых поставщиком» на этой странице.)

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

person Andrew Reid    schedule 03.12.2019
comment
Это правильный ответ, я потратил 6 часов на отладку своей системы, пытаясь понять это. - person Christopher Bradley; 10.01.2021

В вашей системе несколько платформ и устройств OpenCL, и create_some_context выберет только одну. Если вы хотите использовать конкретное устройство, вам необходимо перечислить доступные платформы и устройства с помощью get_platforms() и Platform.get_devices().

person apetranzilla    schedule 21.01.2019
comment
Извините, я должен был добавить это, но когда я вызываю цикл по имени платформы, я получаю только одну платформу: Portable Computing Language. Я предполагаю, что это платформа pocl. - person diatomicDisaster; 21.01.2019
comment
@WilfridSomogyi, не могли бы вы еще раз проверить с помощью clinfo (вам может потребоваться установить программу с помощью диспетчера пакетов вашей системы) и, возможно, попробовать обновить драйверы видеокарты? - person apetranzilla; 21.01.2019
comment
Итак, работает, похоже, что NVIDIA CUDA доступна в качестве платформы, а моя видеокарта указана как доступное устройство. Все выглядит хорошо, но в конце есть куча информации под NULL platform behavior, которую я не могу расшифровать. - person diatomicDisaster; 21.01.2019
comment
@WilfridSomogyi В разделе NULL platform behavior показано, что происходит, когда определенные функции OpenCL вызываются с помощью NULL — например, вызов clGetDeviceIDs, но передача NULL для идентификатора платформы может использовать платформу по умолчанию. Вы можете в значительной степени игнорировать это, это не должно изменить то, что происходит, когда вы выполняете итерацию платформ/устройств вручную. - person apetranzilla; 22.01.2019

Возможно, мое предложение относится только к ноутбукам (процессор Intel + GPU Nvidia + Linux), и это не ваш случай. У меня была эта проблема при использовании tensoflow некоторое время назад.

Если карта Nvidia не отображается в списке доступных устройств (ответ @apemanzilla), давайте проверим, включили ли вы режим производительности в nvidia-settings профилях Primes. И наоборот, Режим энергосбережения включает только встроенный графический процессор Intel.

Более подробная информация о материалах Prime :-) в этот ответ

person Fabiano Tarlao    schedule 21.01.2019
comment
Моя карта Nvidia определенно работает. У меня выбран «Режим производительности» в настройках Prime, и вызов sudo prime-select nvidia говорит мне the nvidia profile is already set. - person diatomicDisaster; 21.01.2019
comment
Извините, ваша проблема связана с pyopencl, который я никогда не использовал. - person Fabiano Tarlao; 22.01.2019

пытаться:

sudo apt установить nvidia-opencl-icd

если нет ‹pyopencl.Platform 'NVIDIA CUDA' по адресу 0x559e3a192fb0›.

person Yifan Lu    schedule 01.08.2020