【问题标题】:OpenCL doesn't display Nvidia GPUOpenCL 不显示 Nvidia GPU
【发布时间】:2019-06-15 03:01:24
【问题描述】:

希望这不是重复的,我确实环顾了一下,但如果我错了,请纠正我。

我最近通过 Anaconda 安装了 pyopencl,它在我的 Intel CPU 上运行没有问题。但是,当我打电话时:

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 文件,但现在只有 /home//anaconda3/etc/OpenCL/vendors 中的 pocl.icd 文件,而我没有确定如何/从何处获取 nvidia.icd 文件。

提前感谢您的帮助,如果您需要更多信息,请告诉我!

编辑:添加get_platforms()的结果

编辑 2:我能够在我的 /etc/OpenCL/vendors 目录中找到一个 nvidia.icd 文件。我将它复制到 Anaconda 目录中,/home/&lt;user&gt;/anaconda3/etc/OpenCL/vendorspyopencl 现在将 Nvidia CUDA 识别为平台,并将我的 GPU 识别为设备。

不幸的是,它仍在将任务加载到 CPU,但很有可能是因为我的代码,而我还没有正确弄清楚如何在 GPU 上创建上下文。

【问题讨论】:

    标签: linux anaconda opencl nvidia pyopencl


    【解决方案1】:

    这个问题有点陈旧,但我在试图解决这个问题时遇到了它,我在 Ubuntu Linux 的 Conda 环境中安装了一个新安装的 PyOpenCL 包,它没有将我的 GPU 列在列表中平台及其相关设备。

    OP 的第二次编辑,他从 /etc/OpenCL/vendors 复制 nvidia.icd 文件对我有用,但感觉不对,所以我深入研究了 PyOpenCL documentation,建议,除了 PyOpenCL 包,做conda install ocl-icd-system。 (请参阅该页面上的“使用供应商提供的驱动程序”部分。)

    这行得通,并为您提供所有系统功能——我认为这比复制.icd 文件更简洁。

    【讨论】:

    • 这是正确答案,我花了 6 个小时调试我的系统试图弄清楚这一点。
    【解决方案2】:

    您的系统有多个 OpenCL 平台和设备,create_some_context 只会选择一个。如果要使用特定设备,则需要使用get_platforms()Platform.get_devices() 枚举可用的平台和设备。

    【讨论】:

    • 对不起,我应该添加这个,但是当我在 platform.name 上调用循环时,我只得到一个平台:Portable Computing Language。我认为是pocl 平台。
    • @WilfridSomogyi 您能否与clinfo 再次核对一下(您可能需要使用系统的软件包管理器安装该程序)并尝试更新您的显卡驱动程序?
    • 好的,所以运行它看起来像NVIDIA CUDA 可用作平台,我的显卡被列为可用设备。这一切看起来都不错,但最后在NULL platform behavior 下有大量我无法解读的信息。
    • @WilfridSomogyi NULL platform behavior 部分显示了使用 NULL 调用某些 OpenCL 函数时会发生什么 - 例如,调用 clGetDeviceIDs 但将 NULL 传递给平台 ID 可能会使用“默认”平台。您几乎可以忽略这一点,它不应该改变您手动迭代平台/设备时发生的情况。
    【解决方案3】:

    也许我的建议仅适用于笔记本电脑(Intel CPU+Nvidia GPU+Linux),而您的情况并非如此。我之前在使用 tensoflow 时遇到了这个问题。

    当 Nvidia 卡未出现在可用设备中时(@apemanzilla 回答),让我们检查您是否在nvidia-settings Primes Profiles 中启用了 Performance Mode . 相反,省电模式只启用集成的 Intel GPU。

    this answer中有关“Prime stuff”的更多详细信息:-)

    【讨论】:

    • 我的 Nvidia 卡肯定在运行。我在 Prime 设置中选择了“性能模式”,并致电 sudo prime-select nvidia 告诉我 the nvidia profile is already set
    • 很抱歉,您的问题似乎与我从未使用过的pyopencl有关。
    【解决方案4】:

    尝试:

    sudo apt install nvidia-opencl-icd

    如果在 0x559e3a192fb0> 处没有

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 2013-08-18
      • 2018-07-21
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      相关资源
      最近更新 更多